Deep Q Learning For Snake Game - PullRequest
       40

Deep Q Learning For Snake Game

0 голосов
/ 22 января 2019

Я работаю над проектом с кодом Keras Plays Catch .Я изменил игру на простую игру «Змея» и представляю змею точку на доске для простоты.Если Снейк съел награду, он получит +5 очков, а за удар по стене - -5, а за каждый ход -0.1.Но он не изучает стратегию и дает ужасные результаты.вот моя игра play функция

def play(self, action):
    if action == 0:
        self.snake = (self.snake[0] - 1, self.snake[1])
    elif action == 1:
        self.snake = (self.snake[0], self.snake[1] + 1)
    elif action == 2:
        self.snake = (self.snake[0] + 1, self.snake[1])
    else:
        self.snake = (self.snake[0], self.snake[1] - 1)

    score = 0
    if self.snake == self.reward:
        score = 5
        self.setReward()
    elif self.isGameOver():
        score = -5
    else:
        score = -0.1

    return self.getBoard(), score, self.isGameOver()

, которая возвращает что-то вроде этого (1 - змея, 3 - награда и 2 - стена):

 [[2. 2. 2. 2. 2. 2. 2. 2. 2. 2.]
 [2. 0. 0. 0. 0. 0. 0. 0. 0. 2.]
 [2. 0. 0. 0. 0. 0. 0. 0. 0. 2.]
 [2. 0. 0. 0. 0. 0. 0. 0. 0. 2.]
 [2. 0. 0. 0. 0. 0. 0. 0. 0. 2.]
 [2. 0. 0. 0. 0. 1. 0. 0. 0. 2.]
 [2. 0. 0. 0. 0. 0. 3. 0. 0. 2.]
 [2. 0. 0. 0. 0. 0. 0. 0. 0. 2.]
 [2. 0. 0. 0. 0. 0. 0. 0. 0. 2.]
 [2. 2. 2. 2. 2. 2. 2. 2. 2. 2.]]

и здесь мой код для изучения qist .

Я не знаю, что я делаю неправильно, но в большинстве игр, которые он играет, он зацикливается (вверх и внизили направо и налево), или он попадает прямо к стене, и есть небольшая вероятность съесть награду, прежде чем она достигнет стены.Как я могу улучшить это и заставить это работать?

1 Ответ

0 голосов
/ 22 января 2019

Если ваша змея никогда не получит награду, она может никогда не узнать +5 очков. Вместо того, чтобы использовать постоянный штраф 0.1 за ход, вероятно, поможет использование стоимости на расстоянии для каждой плитки. Другими словами, агент в вашей игре не знает о существовании награды.

Я думаю, что в конечном итоге вы получите что-то вроде A * находки пути . По крайней мере, эвристики похожи.


Обновление:

Учитывая полный код, который вы разместили, ваша функция потерь и оценка не совпадают! Когда оценка высока, потеря вашей модели случайна.

Попробуйте максимизировать счет игры в качестве своей цели.

...