神经进化算法学习玩Mario

SethBling以其发布各种Minecraft世界的技巧和发明的频道闻名。通常会出现其他内容。例如,马里奥(Mario)在视频记录器的兴趣列表中。是SethBling首次使用带有通过移动游戏中的物品来编辑内存的bug在控制台上通过了 Super Mario World。他的最新视频和视频流仍具有相同的游戏。但这不是一个玩游戏的人,而是塞思伯林亲自编写的神经进化算法。



该实现称为MarI / O。神经网络的图形表示在屏幕顶部进行。左侧显示了算法如何看待关卡-它了解玩家的环境和位置。白色方块是玩家可以站立的方块,黑色方块是移动的物体。右边是神经网络可以单击的按钮。神经元连接位于中间,在任何给定时间仅使用其中一部分。

结构很复杂,但是SethBling并未创建神经网络。这是由他实现神经进化算法完成的。该程序尝试执行动作,然后根据行进距离评估其有效性。培训耗时一天。零代非常愚蠢,有些人只是静止不动。如果玩家站立太久,则模拟结束。有些人学会了前进,而忽略了障碍和敌人的存在。这导致了与敌人和子弹的会面,但至少取得了一些进展。零代个人之一。绿线是正极连接。如果有块进入,则相同的颜色将被传输到输出。这种神经元迫使玩家向前移动,同时前方有一个平台。红线为负,输出与所获得的颜色相反。





在遇到头顶上的几个敌人后,玩家跳了几次,发现自己站在悬崖峭壁上的平台上。由于在正确的位置不再有障碍物,因此此人在此处停止。更复杂且可能更成功的人具有更多的神经元,但操作原理保持不变。

为了使神经网络学习,应用选择。每个人的表现都取决于行进的距离和速度。在下一代中,只有最有效的个体被杂交,然后才会发生突变。该过程将根据需要重复多次。花了35代完成一个级别。最完美的个人获得的健身值约为4000。



SethBling没有从头开始提出工作原理。在创建它时,他使用了已经存在的有关NEAT(增强拓扑的神经进化)的科学工作,NEAT是不断发展的拓扑的神经进化。它还描述了如何将世代划分为物种,并非所有遗传算法都试图这样做。 MarI / O是使用BizHawk模拟器在Lua中编写的 SethBling并没有就此停止。他强迫该算法通过其他平台程序,在他的Twitch帐户中广播学习过程。游戏中有经典的《超级马里奥兄弟》。 MarI / O能够通过第一级,但已经停在第二级。即使失败,该算法还是意外地发现了一个可能对Speedraner有用的小错误。







一些人卡在超级马里奥世界甜甜圈平原4级的一堵墙上。花了一些时间才知道您需要撞墙,而无需跳上墙。下一代已经可以撞墙了,但是在下一个障碍物上,人们停下来了,他们忘记了如何跳到障碍物的前面。经过几代人的努力,该算法实现了按下按钮左侧的位置和跳转位置。 MarI / O从未能够完成该水平。其中一根管子太高而无法跳上。而是使用锤子兄弟之一的平台。塞思伯林(SethBling)中断了学习过程,认为该算法永远不会学到这一点。







在第三个视频中,MarI / O在计时赛模式下没有敌人的情况下玩超级马里奥赛车。温特邦妮(Winterbunny)帮助修改了脚本,使其可以在该游戏中使用。尽管“超级马里奥赛车”与平台游戏不同,但是学习过程是相同的。首先,该算法很愚蠢,无法执行任何操作。个人只是试图单击某些按钮。但是即使在零代,也有一些人学会了很好的骑行。



早在第七代,就有一个人在2.5分钟内行驶了5圈。这个数字不好,世界纪录约为一分钟。一个人不断遇到障碍,有时会缠圈。来自第九代的个人表现出了1.5分钟的好成绩,她甚至试图在路上不走旁观。

Pastebin MarI / O源代码
MarI / O学习各种游戏的另一个Twitch频道

Source: https://habr.com/ru/post/zh-CN381315/


All Articles