Я решил представить такие показатели, как агент или позиции элементов с вектором размером 25 (т. е. одна запись для каждой ячейки, равная 1 или любому другому соответствующему числу, если есть элемент/агент, и 0 в противном случае). Таким образом, мое пространство наблюдения состоит из следующего: свободная емкость, позиция агента, позиции предметов, оставшееся время, местоположение цели, манхэттенские расстояния до предметов и цели, оставшееся время и расстояние до ближайшего объекта, расстояние от ближайшего объекта до цель, расстояние до стен.
Сеть актеров и критиков состоит из 4 скрытых слоев со 128 нейронами и функцией активации ReLU. Что касается моих гиперпараметров, я выбрал их следующим образом:
Код: Выделить всё
learning_rate: 0.0001
gamma: 0.99
lam: 0.95
clip_ratio: 0.2
value_coef: 0.5
entropy_coef: 0.5
num_trajectories: 5
num_epochs: 4
num_minibatches: 4
max_grad_norm: 0.5
Поскольку это несколько напоминает локальный оптимум, PPO застревает. Я подумал, что это может быть что-то вроде гиперпараметров/исследований. Поэтому я увеличил коэффициент энтропии, чтобы увеличить исследование, а также увеличил количество траекторий на одно внедрение политики, чтобы у агента было больше опыта при обновлении сетей. Однако ничего из того, что я пробовал, похоже, не сработало. Я даже запустил проверку WandB, и ни один из всех 100 запусков этой проверки не достиг общего вознаграждения выше 0. Увидев это, я подумал, что в коде должна быть какая-то ошибка, поэтому я перешел к кодируйте снова и снова, пытаясь понять, что пошло не так. Однако я не смог обнаружить ни одной ошибки в реализации (это не значит, что она есть, я просто не нашел ни одной ошибки после x раз просмотра кода).
Да кто-нибудь знает, что мешает PPO изучить хорошую стратегию? Очевидно, что у агента возникают проблемы с соединением действий по взятию предмета и его выдаче. Однако я не понимаю, почему это так, поскольку из-за разделенного вознаграждения за сбор и выгрузку агенту должно быть довольно просто выяснить, что со свободной емкостью он должен перейти к любой ячейке с предметами, а с полной емкостью он должен следует обратиться в депо.
При необходимости или интересе вы можете найти весь код через Pastebin здесь: https://pastebin.com/zuRprVWR.
Я надеюсь, что кто-нибудь что-нибудь скажет о том, что еще я могу попытаться решить эту проблему. Как вы думаете, проблема на самом деле связана с ошибкой реализации/логики или происходит что-то еще? Или PPO все-таки не в состоянии решить эту проблему, и какой-то другой алгоритм может быть лучшим выбором?
Я благодарен за любую информацию!
Подробнее здесь: https://stackoverflow.com/questions/793 ... ld-setting