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