您如何创建深度Q学习神经网络来解决诸如蛇之类的简单游戏?

时间:2019-09-05 21:38:27

标签: python tensorflow machine-learning neural-network deep-learning

最近四天我一直在努力尝试创建一个简单的可学习的神经网络(NN)。我从河内塔楼开始,但是那很棘手(可以通过Q表完成),没有人在网上真的有很好的示例,因此我决定改为在蛇游戏中使用它,因为那里有很多示例和教程。长话短说,我做了一个新的超级简单的游戏,您有[0,0,0,0],通过选择0、1、2或3,您可以将0更改为1,反之亦然。因此,选择1将给出[0,1,0,0]的输出,而再次选择1将返回到[0,0,0,0]。非常简单

尽管游戏非常简单,但是由于我没有编码方面的知识,因此我仍然很难从概念转到实际。

现在的最终目标是获得下面的代码,以便能够多次完成游戏。 (它目前已经运行了约600次,并且没有一次完成4步问题)

当前的网络体系结构是第1个隐藏层中有4个输入4个节点和4个输出,即使隐藏层是冗余的,我也希望保持这种方式,以便我可以学习如何正确处理其他问题。

如果您不愿意阅读代码,但我不怪您,请把我的心理伪代码放在这里:

  1. 设置变量,占位符和导入库
  2. 运行200次程序,使其有学习的机会,每次运行有20转
  3. 使用“状态”作为输入遍历神经网络,并获取定义为“输出”的输出以供将来使用
  4. 游戏代码
  5. 针对此特定游戏的新奖励将只是新的一组状态,因为(我刚刚发现这是错误的方法(对于[0,1,0,0],各州应获得奖励[1 ,0,1,1]),但我已经尝试过翻转它,但它仍然无法正常工作,所以这不是问题)
  6. 我的想法是,只要通过NN运行新状态,我就能获得下一个Q值
  7. 这个等式直接取自互联网上任何深入的q学习教程,我想也许我已经知道了这个问题或其中一个错误原因。
  8. 运行渐变体面优化功能
[<CustomEquality; NoComparison>]
type Test =
    | A of string
    | B of int64
    override this.Equals(other) =
        let other' = other :?> Test
        match other' with
        | A str -> str = "a"
        | B i -> obj.Equals(this, other)

我有一段时间没有收到任何错误消息了,理想情况下每次的实际结果都是[1,1,1,1]。

提前感谢您的所有帮助

p.s。抱歉,我想不出一个客观的标题

1 个答案:

答案 0 :(得分:0)

reward值应为采取行动后的目标值。在您的情况下,您已设置reward=states。由于您的功能正在尝试最大化回报,因此您的状态越接近[1,1,1,1],您的AI应获得的奖励就越多。

也许诸如reward = sum(states)之类的奖励功能可以解决您的问题。