【问题标题】:Training Neural Network to play flappy bird with genetic algorithm - Why can't it learn?用遗传算法训练神经网络玩飞鸟 - 为什么它不能学习?
【发布时间】:2018-01-04 09:38:57
【问题描述】:

我一直在学习神经网络和遗传算法,为了测试我的学习能力,我尝试制作一个学习玩飞鸟的 AI:

我已经让它运行了至少 10 个小时(一夜之间或更长时间),但是除了避开地板和天花板之外,从我开始模拟时最适合的成员仍然没有显示出任何显着的智力进步。 输入是充当视线的射线(如您在上面看到的),网络以它们的长度和鸟类的垂直速度馈送。似乎最好的鸟基本上是忽略了除了水平线之外的所有视线,当它很短时,它正在跳跃。 输出是一个介于 0 和 1 之间的数字,如果输出大于 0.5,则鸟会跳跃。 有 4 个隐藏层,每层有 15 个神经元,输入层前馈给第一个隐藏层,然后第一个隐藏层前馈给第二个隐藏层……最后一个隐藏层前馈给输出,即 dna of a bird 是一组表示神经网络权重的实数,我使用相同风格的神经网络和遗传算法制作了另一个项目,其中蚂蚁必须前往食物,并且效果很好。

这里是代码:https://github.com/Karan0110/flappy-bird-ai

如果您需要任何其他信息,请在 cmets 中说明

请您说一下我的方法是否有缺陷,因为我几乎可以肯定代码可以正常工作(我从以前的工作项目中得到)。

【问题讨论】:

  • 首先,这真的很酷,你所做的工作看起来很棒!顺便说一句,我担心这个问题对于这个网站来说似乎太宽泛了,因为除了“这个代码不起作用,我怎样才能让它起作用?”之外,我看不到任何实际问题。
  • 谢谢,我已经试着让我的问题更具体一点。
  • @KaranElangovan ,在这里Cross Validated 发布同样的问题。请确保您有效地遵循社区指南。人类您必须小心。

标签: javascript neural-network artificial-intelligence genetic-algorithm


【解决方案1】:

我喜欢你的想法,但我建议你改变一些东西。

  • 不要使用具有固定结构的网络。查找增强拓扑的神经进化并自己实现它,或者使用类似 netaptic 的库。

    • 我认为您的网络不需要那么多输入。我相信 3-5 个传感器(20-50° 间隙)就足够了,因为许多输入值似乎非常相似。

如果您不确定为什么您的项目无法正常运行,请尝试以下操作:

  • 尝试查看当前最佳网络的图像。如果网络不考虑重要的传感器(如速度),您会立即看到。

  • 确保您的所有传感器都工作正常(在上图中看起来很好),并确保以有意义的方式确定值。

  • 检查最高和平均分数是否随时间增加。如果不是,您的 GA 工作不正常,或者您的网络收到的输入不足以解决问题。

对我有很大帮助的一个技巧是将 GA 的精英保持在一个单独的阵列中。仅当其他网络的性能优于精英网络时,才替换精英网络。让精英在所有世代中保持下去,所以一旦你的算法找到了一个非常好的解决方案,如果没有其他更好的方法,它就不会在未来的任何一代中丢失。

【讨论】:

    猜你喜欢
    • 2017-10-25
    • 2012-05-30
    • 1970-01-01
    • 2017-10-12
    • 2018-10-22
    • 2021-07-02
    • 2019-04-15
    • 1970-01-01
    • 2020-11-24
    相关资源
    最近更新 更多