我正在尝试为'连续蛇'游戏实施AI。它与普通的蛇游戏非常不同,至少就人工智能而言。基本上,蛇的驾驶有点像汽车,而且两个玩家中的第一个撞到了他的小道,或者另一个小跑失去了比赛。屏幕也围绕着它的边界。
如果你看一下我目前进展的视频,你可以更好地理解它: https://www.youtube.com/watch?v=i9qU-r4COQ8
这不是太糟糕,但仍然无法击败我(我是黄色的)。 获胜的人工智能理想情况下需要展示这些行为:
我目前的方法使用NEAT算法(http://www.cs.ucf.edu/~kstanley/neat.html)。 它是一种遗传算法,可以在几代人之间发展神经网络。它学会了如何在某种程度上做1,2和3(但不是很好)但不知道4。
对于输入,我正在使用:
我现在有点卡住了,想知道:
如果有人想看到它(C#),我很乐意让我的代码可用。
谢谢!
答案 0 :(得分:0)
首先,如果要获得良好的效果,请使用深度卷积q学习,该方法会将图像作为输入。为了进一步改善,您可以输入三到四个连续图像的堆栈,这将有助于确定方向。我认为您无需使用lstm解决此问题,堆叠多个帧会很好。为了进一步改进,您可以将相同的代码转换为决斗网络。
如果您更喜欢快速结果和更少的计算,则可以使用增强型随机搜索,但是如果没有经过仔细培训,它可能会进入本地最大值。
答案 1 :(得分:0)
这里的主要问题是您的学习算法没有足够的信息(除非您正在使用递归功能)。基本上,您要让每个帧通过几个距离传感器导航迷宫-不可能。
singhV之前所说的是正确的-为了获得良好的结果,学习算法的输入必须是图像(以及您自己的头部位置和角度)。您可以降低分辨率,然后转换为单色以提高效率。
关于您的问题: *循环网络是可以记住先前状态并基本上像“内存”一样使用的网络。这不是您完成此任务所需要的(除非您真的想保持输入原样,但那条蛇将不得不学习“记住”它所看到的一切-这将是非常令人印象深刻的,但太难了) *无监督:这意味着没有可以学习的“示例”,而是通过正面/负面反馈(失败=不好)来学习。您的网络是不受监督的。 *实时/连续-不知道,除了2007年的一些Microsoft研究外,我什么也没找到:https://www.microsoft.com/en-us/research/publication/continuous-neural-networks/
顺便说一下,NEAT非常整洁,我很高兴遇到这个问题!
答案 2 :(得分:0)
我还不能发表评论,所以我将在这里发表我的建议,但我不希望它能完全回答您的问题,只是您可以借鉴的想法。
1)尝试输入可用于“蛇”移动的可用区域。这可能不容易做到,您将不得不做一些假设。例如:假设对手走的路线使您的区域最小化,或更简单地说,对手保持相同的方向。
2)尝试输入积极的策略,这意味着计算对手的可用区域。该算法可以尝试将您的区域最大化,同时将对手区域最小化。
3)最后,尝试使用与人工神经网络不同的方法。如果将问题表述为最小化/最大化任务,则可以使用许多方法来解决。
顺便说一下!