美文网首页DQN+CNN
如何用AI玩贪食蛇?

如何用AI玩贪食蛇?

作者: f5065e26181b | 来源:发表于2019-06-25 11:19 被阅读2次

    文章同步发于公众号:1024程序开发者社区(cxkfzsq1024)

    公众号中回复“AI贪食蛇”获取代码链接

    前几日在丹枫无迹大哥的公众号里读到一篇用PyGame制作的贪食蛇游戏的文章并进行了转载,详见:Python:游戏:贪吃蛇

    玩的过程中我就在思考,如果用程序去控制蛇能达到怎样的效果呢?本文就将分析一下如何通过三种算法实现AI去玩贪食蛇。

    一、搜索算法实现

    第一大类就是通过获取蛇的头部和食物的位置,在避免碰到自己和边缘的前提下进行路径规划。这方面有大神已经研究过,在这里做简单介绍。

    可以用的方法有:BFS、DFS、A*算法等,此处大神采用了BFS算法,也就是广度优先搜索算法,它从根节点开始遍历图并探索所有相邻节点,选择最近的节点并浏览所有未探测的节点。对于每个最近的节点,该算法遵循相同的过程,直到找到目标为止。具体实现过程可以看大神博客,实现的结果如图:

    image

    此种方法的好处在于实现起来速度快,蛇的目标明确,直奔食物,对于贪食蛇游戏基本能玩转,但是如果新加一些约束条件如:障碍物,或者一个更加复杂的游戏,这个方法扩展性、适应性就显得不足。

    博客链接:http://hawstein.com/2013/04/15/snake-ai/

    源代码:公众号后台回复“AI贪食蛇”

    二、强化学习实现

    第二大类就是通过强化学习Q-Learning完成了贪食蛇,该方法原理如图:

    image

    作者通过程序抽取游戏过程中蛇与食物相对的位置获取state,选择动作在环境中得到reward(吃到食物为1,死亡为-1,其他情况0.1),更新形成一个Q-table,其中动作空间为上下左右四种,每一种state对应四个动作的选择概率:

    image

    该位大神通过js实现了代码的整个过程,可以在浏览器中完成训练的全过程,效果如图。他对游戏进行了简化,及没有边界,只有碰到自己身体蛇会死亡:

    image

    此种方法优点:通过自学习的方式实现,避免了建模的复杂过程,模型灵活性较高。

    缺点:需要大量训练,见效慢,且存在一定随机性。此外本模型中state的定义还存在一定的建模,没能完全脱离游戏模型。

    博客链接:https://italolelis.com/snake

    源代码:公众号后台回复“AI贪食蛇”

    三、神经网络实现

    第三类是通过建立神经网络来实现当前状态state和所要选取动作action之间的关系,也可以理解为一个分类问题。

    image

    具体建模方法为:

    选取能表示蛇与食物以及环境关系的参数,共有七个:左侧是否有物体、前方是否有物体、右侧是否有物体、蛇头运动X方向向量、食物与蛇头X方向向量、蛇头运动Y方向向量、食物与蛇头Y方向向量。

    image

    比如:

    image

    输出为,左右前三个动作。

    NN模型为两个隐含层,分别为9和15个节点,较之于深度神经网络这个模型可以说非常轻巧。效果如图:

    image

    此种方法难点是,训练数据获取,作者提出通过人工玩游戏这个过程进行数据采集,这就需要消耗一定的人力,而且数据越多模型玩的越好;

    模型优点在于,建模简单,不需要考虑过多的逻辑关系和路径规划方法。

    博客地址:https://theailearner.com/2018/04/19/snake-game-with-deep-learning-part-2/

    源代码:公众号后台回复“AI贪食蛇”

    以上,是三类方法构建AI玩贪食蛇的方法,下期会通过深度强化学习构建一个游戏AI,结合了第二、三种的优点,敬请期待。

    后台回复【AI贪食蛇】,获取源码。

    image

    1024程序开发者社区的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里就技术问题进行交流,还没有加入的小伙伴可以扫描下方“社区物业”二维码,让管理员帮忙拉进群,期待大家的加入。

    image

    //猜你喜欢//

    相关文章

      网友评论

        本文标题:如何用AI玩贪食蛇?

        本文链接:https://www.haomeiwen.com/subject/lgctcctx.html