Deep Q-Learning agent плохо выполняет свои действия. Нужна помощь в оптимизации - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь сделать глубокого агента q-обучения из https://keon.io/deep-q-learning

Моя среда выглядит следующим образом: https://imgur.com/a/OnbiCtV

Как вы можете видеть, мой агент - это круг, и тамодна серая дорожка с оранжевыми линиями (награда ворот).Смелая линия - это активные ворота.Оранжевая линия от круга, указывающая на его направление.

Агент имеет постоянную скорость и может поворачиваться влево / вправо на 10 градусов или ничего не делать

На следующем изображении расположены датчики агентов https://imgur.com/a/Qj7Kesi

Они вращаются вместе с агентом.

Состояния - это расстояние от агента до активного затвора и длина датчиков.Всего существует 1 + 7 состояний, и это входное измерение нейронной сети с q-обучением.

Действия - повернуть налево, повернуть направо и ничего не делать.

Функция вознаграждения возвращает 25, когда агент пересекает ворота вознаграждения;125 когда агент пересекает последние ворота;-5 если агент пересекает границу трека Если ничего из этого, функция вознаграждения сравнивает расстояние от агента до активных ворот для текущего состояния и следующего состояния:

Если расстояние от текущего состояния> расстояние до следующего состояния: вернуть 0,1, иначе вернуть-0.1

Кроме того, DQNAgent обладает отрицательной, положительной и нейтральной памятью.Если награда равна -5, (состояние, действие, награда, следующее_статейное, выполнено) перейти в отрицательную память, если награда> = 25, в положительную, в противном случае в нейтральную

Это потому, что когда я формирую минибатдля тренировки я беру 20 случайных выборок из нейтральной памяти, 6 из положительных и 6 из отрицательных.

Каждый раз, когда агент пересекает границу дорожки или когда он застревает более 30 секунд, я делаюобучение (повтор) и агент начинается с самого начала.Это моя модель

model = Sequential()
model.add(Dense(64, input_dim=self.state_size,activation='relu', 
                  kernel_initializer=VarianceScaling(scale=2.0)))
model.add(Dense(32, 
    activation='relu',kernel_initializer=VarianceScaling(scale=2.0)))
model.add(Dense(self.action_size, activation='linear'))
model.compile(loss=self._huber_loss,
                  optimizer=Adam(lr=self.learning_rate))
return model

Я пробовал разные типы моделей, разное количество нейронов на слой, другие функции активации и потери, выпадение, нормализация партии, и эта модель работает лучше всего на данный момент

Я пробовал разные значения вознаграждения

Также я пытался использовать статические датчики (они не вращаются вместе с агентом) https://imgur.com/a/8eDtQIF (зеленые линии на фото)

Иногда моему агенту удается пересечь несколько ворот, прежде чем попасть на границу.Редко ему удается пройти половину пути, и однажды с этими настройками он прошел два круга, прежде чем застрял.

Чаще он вращается только в одном месте.

Я думаю, чтопроблема заключается в представлении штата или функции вознаграждения.

Любые предложения будут оценены

...