我正在学习深度强化学习,从互联网上解决诸如Snake,Cartpole等游戏的示例开始。我有自己的游戏正在尝试中,但是我坚持让代理商学习游戏。使用Snake和Cartpole,每个动作都会产生后果(例如,撞到墙或摆锤),因此我可以看到代码按其应有的方式工作。但是在我的游戏中,尽管它(现在)是一个简单得多的游戏,但是它却是一款运行时间长且具有很多游戏框架的游戏。只有2个输入,target_number和target_can_been_shot。游戏帧序列如下:
0,0
0,0
... (after 5000 game frames)
0,0
2,0
2,1
2,1
2,1
2,1
2,0
2,0
0,0
0,0
... (after 2000 game frames)
0,0
5,0
5,1
5,1
5,1
5,0
5,0
5,0
5,0
0,0
您可以在第5002帧看到目标(编号2)出现,而在第5003帧中,目标清晰可见。
练习的目的是训练AI在第二输入栏为1时射击目标(请耐心等待,这是更复杂游戏的简化版本)。有2个输出,什么也不做,或者射击。
问题是:为了在DQN中进行发现,它需要进行随机移动以查看该动作产生了什么结果(即是否获得奖励)。因此,为了击中第一个目标,它需要在5002帧中不做任何动作,这就是AI惨遭失败的原因。
我们如何解决这个问题?即,具有长时间运行帧的游戏,大多数情况下什么都没有发生。进行随机移动的代码(epsilon高时开始时的随机率也较高)是
move = to_categorical(randint(0, 1), num_classes=2)
我知道我只是想了解更多有关AI的知识而错过了一些基本知识。任何指导将不胜感激。