gpt4 book ai didi

python - 贪吃蛇游戏的深度 Q 学习

转载 作者:太空宇宙 更新时间:2023-11-03 11:38:36 25 4
gpt4 key购买 nike

我正在做一个基于 Keras Plays Catch 的项目代码。我已将游戏更改为简单的贪吃蛇游戏,为了简单起见,我在棋盘上用一个点表示蛇。如果 Snake 吃了奖励,它将获得 +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.]]

这是my code for q learning on gist .

我不知道我做错了什么,但它玩的大多数游戏都会卡在一个循环中(上下或左右),或者它会直接撞到墙上,而且有很小的机会在它撞到墙上之前吃掉奖励。我怎样才能改进它并使其发挥作用?

最佳答案

如果您的蛇从未达到奖励,它可能永远不会获得 +5 分。不是每次移动使用恒定的 0.1 惩罚,而是对每个图 block 使用基于距离的成本可能会有所帮助。换句话说,您游戏中的智能体并不知道​​奖励的存在。

我认为最终你会得到类似 A* path finding 的结果.至少启发式是相似的。


更新:

考虑到您发布的完整代码,您的损失函数和分数不匹配!当分数高时,模型的损失是随机的。

尝试将游戏得分最大化作为您的目标。

关于python - 贪吃蛇游戏的深度 Q 学习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54302176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com