【问题标题】:Neural network help on game of continuous snake神经网络对连续蛇游戏的帮助
【发布时间】:2014-07-21 03:00:37
【问题描述】:

我正在尝试为“连续蛇”游戏实现 AI。它与普通的蛇游戏非常不同,至少就人工智能而言。基本上,蛇的驾驶有点像汽车,2 名玩家中的第一个撞到他的踪迹或其他人的踪迹将输掉比赛。屏幕也会环绕其边框。

如果您看一下我当前进度的视频,您会更好地理解它: https://www.youtube.com/watch?v=i9qU-r4COQ8

还不错,但还是打不过我(我是黄色的)。 理想情况下,获胜的 AI 需要表现出以下行为:

  1. 避开墙壁
  2. 注意它可能会“缩短我的时间”(在我旁边稍微靠前的时候)。
  3. 避免被“剪短”。
  4. 了解当前二维空间的拓扑结构,尝试将我封闭在更小的空间中/为自己保护更大的空间。

我目前的方法使用 NEAT 算法 (http://www.cs.ucf.edu/~kstanley/neat.html)。 这是一种遗传算法,可以在几代人中进化神经网络。它在一定程度上学会了如何做 1,2 和 3(但不是很好),但不知道 4。

对于输入,我使用的是:

  • 相对于我们的对手角度
  • 对手与我们的距离
  • 相对于我们的对手航向
  • 通过一定数量的树搜索在某些方向上探测的智能光线(参见视频)

我现在有点卡住了,想知道:

  • 我应该研究哪类算法?循环/实时/连续/无监督神经网络,......关于这些以及它们如何应用于我的问题的解释会很棒。
  • 我应该研究任何特定的算法吗?
  • 我还可以使用哪些其他输入集?人类玩家可以看到游戏中的所有像素,这比我简单的一组输入信息要多得多。但我认为将示例中的 200x200 像素输入到我的 NN 根本行不通。也许如果我将它们离散化并使其相对于 AI 位置/航向...听起来很棘手。

如果有人想查看我的代码,我很高兴提供 (C#)。

谢谢!

【问题讨论】:

  • 如果这能给您带来不错的结果,我会尝试添加更多功能作为神经网络的输入。你可以给它自己和对手的 X、Y 坐标。您还可以计算对手行进的距离并将其作为特征。我对您如何定义适应度函数以及如何确定它来进化代理很感兴趣。
  • 我已经给出了对手的相对位置/航向,这就是我认为屏幕环绕自身所需要的一切。是的,我需要在输入方面更有创意......适应度函数非常简单 - 我对自己玩不同版本的人工智能,获胜者获得 10 适应度,失败者获得 1。我在那里做了一些调整以平衡如果获胜者“快速”获胜,则获得更多积分。 5% 最好的 AI 可以“复制”自己并混合他们的基因以创建更智能的神经网络。
  • 您是否尝试过尝试不同数量的隐藏层,甚至允许神经网络的结构进化(假设您只进化权重)。您还必须考虑优化的约束。例如,我正在用进化神经网络进化赛车 AI,而最好的智能体在某些地方使用赛道的墙壁来帮助他更好地转弯,因为我不会因此而受到惩罚。因此,如果您希望 AI 学习特定行为,您需要确保适应度函数奖励这种行为。
  • 我想知道 vlad,在视频中我看到了一个没有隐藏层的神经网络。我也看到你在奖励“获胜”,但是奖励“活着的时间”呢?你应该尝试一下。

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


【解决方案1】:

我还不能发布 cmets,所以我会在这里发布我的建议,但我不希望它是对您问题的完整答案,只是供您参考的想法。

1) 尝试输入您的“蛇”移动的可用区域。这可能并不容易做到,您将不得不做出一些假设。例如:假设对手走的是最小化你的区域的路线,或者更简单的假设对手保持相同的方向。

2) 尝试输入一个激进的策略,即计算对手的可用区域。该算法可以尝试最大化你的区域,同时最小化对手的区域。

3) 最后,尝试一些与 ANN 不同的东西。如果您将问题表述为最小化/最大化任务,您可以使用很多方法来解决它。

顺便说一句很酷的东西!

【讨论】:

    【解决方案2】:

    这里的主要问题是您的学习算法没有足够的信息(除非您使用递归功能)。基本上,您要求它通过几个距离传感器在迷宫中导航的每一帧 - 不可能。

    singhV 之前说的是真的——为了获得好的结果,学习算法的输入必须是图像(以及你自己的头部位置和角度)。您可以稍微降低分辨率并转换为单色以提高效率。

    至于你的问题: * 循环网络是可以记住先前状态的网络,基本上像“记忆”一样使用它。这不是你完成这项任务所需要的(除非你真的想保持输入的原样,但是蛇必须学会“记住”它所看到的一切——这将是非常令人印象深刻但太难了) * 无监督:这意味着没有“示例”可供学习,而是通过正/负反馈进行学习(失败 = 糟糕)。您的网络不受监督。 * 实时/连续 - 不知道,除了一些 2007 年的微软研究,我什么都没找到:https://www.microsoft.com/en-us/research/publication/continuous-neural-networks/

    顺便说一句,NEAT 很整洁,很高兴我遇到了这个!

    【讨论】:

      【解决方案3】:

      首先,如果您想要获得好的结果,请使用将图像作为输入的深度卷积 q-learning。为了进一步改进,您可以输入三到四个连续图像的堆栈,这将有助于确定方向。我认为您不需要使用 lstm 来解决这个问题堆叠多个帧就可以了。为了进一步改进,您可以将相同的代码转换为决斗网络。

      如果您更喜欢快速结果较少计算量,您可以使用增强随机搜索,但如果不仔细训练,它可能会进入本地最大值。

      【讨论】:

      • 我能理解我在回答中遗漏了什么吗?我认为它会解决您的问题。
      猜你喜欢
      • 2016-01-17
      • 2011-02-28
      • 2017-06-07
      • 2011-04-08
      • 1970-01-01
      • 2017-01-27
      • 2012-03-24
      • 2010-12-21
      • 1970-01-01
      相关资源
      最近更新 更多