电脑上怎么样玩小恐龙(AI学会你最拿手的小游戏之后)
本文经授权转载自|把科学带回家
ID|steamforkids
作者|美图君
一个懂写代码的程序员平常是怎么玩游戏的?想知道吗,一个网名叫做CodeBullet的澳大利亚程序员就经常自己在家制造和训练AI帮他打游戏。
看过他训练出的AI玩的游戏,感觉…再也不想玩游戏了呢。
先来看AI玩Flappybird会怎样。
小哥使用的是NEAT(neuroevolutionofaugmentingtopologies)算法,也就是增强拓扑的神经演化算法。
NEAT是一种结合神经网络和遗传算法(geneticalgorithm)的好算法。
遗传算法是什么?
遗传算法类似于一个代码进化系统,它是一种优胜劣汰AI的算法。
你要做的,就是告诉计算机,什么是“成功”的标准,还要告诉AI,它可以看到什么,可以做什么。成功的AI可以进行一次繁殖,留下后代,不成功的AI就当场去世了。
为了模拟演化,子代AI还会和爸爸/妈妈有一点点的不同,类似于遗传突变。
神经网络则是一种具有学习能力的算法,它模拟的是生物神经网络的结构,可以根据经验不断调整。
在Flappybird里,小哥设定AI可以看到鸟鸟和柱子的距离、鸟鸟相对于柱子的速度等信息。剩下的该怎么玩AI自便。
在每一代的AI里,玩得最好的可以进行繁殖,并把自己的优秀基因遗传给下一代。当然了,下一代也不会照单全收,还是会有小小的突变。
第六代目就可以妥妥地拿下2000分了...
好的,小哥用NEAT玩坏的第二个游戏,就是Chrome浏览器连不上网时候出现的彩蛋小游戏——跳跳恐龙。
你还不知道有这个游戏?
你能玩到第几关呢?
好的,发现自己技术太差以后,小哥就自行复制出了游戏,并开始无情的AI模式了。
第一代AI有500只,每一只控制着一只恐龙。发挥最好的AI可以进入繁殖阶段,不行的AI就莫得繁殖。而且下一代的策略会和上一代有一点点不同,类似于遗传突变。
上面的那些网络就是控制这些AI的神经网络,它会一代代地发生变化。
这个神经网络的输入信号就是每个AI看到的东西,输出就是每个AI的动作。新的神经网络连接的出现代表着AI学会了某种特定的策略。
第一代的基本设定很简单,就是不停地随便乱跳。就和你一开始玩的时候一样。如果你仔细看上面的图,会发现有只AI是一直趴着前进的。
就这样,傻fufu的AI被一代代刷掉之后,终于有只AI搞明白要看清楚距离再跳了。
好的,玩过这个游戏的人知道,到了一定时间,速度会变得飞快,而且一些鸟鸟飞得太高踩不到,所以在大鸟鸟面前要主动弯腰。
利用遗传算法训练到第八代AI的时候,它们看起来就已经很聪明了。
但是第八代还是没学会在踩不扁的大鸟鸟面前低头。
到了25代,AI终于学会了,如果你不能碾压别人,那就要立刻向大佬低头,晚0.1秒都不行。
到了第40代AI,见识一下什么叫做恐怖。
第25代AI妥妥地拿下了2万分。后来因为小哥的电脑实在吃不消了才没有继续刷出高分。
还有这个世界最难游戏。
小哥也是因为自己玩得太烂,于是决定用遗传算法算法来海选AI帮自己刷分。
每个AI依照一套指令(术语叫做vector)。
和自然选择理论一致,适合度最高的AI可以繁殖,做不到的AI就只能去死了。小哥规定,AI要在有限的步数之内完成特定的指令。完成的指令越多,就可以获得更多的步数。
一伙AI冲上场的画面。有不怕死的已经当场去世了。
注意到头是绿的AI吗?它们是上一代AI里最优秀的后代。
终于到了第50代,第50代啊同志们,有一个AI来到了终点。
老母亲的泪目。
也是用NEAT算法训练的AI玩越野赛车。
从没眼看的个位数代目——
再到彪悍的十七代目——
再来看看AI玩贪吃蛇。
小哥先利用遗传算法和深度学习(deeplearning)训练出了几条优秀的AI贪吃蛇,然后利用融合(fusion)的方法把它们的“大脑”合体。相当于一个贪吃蛇的身体里藏着好几条蛇。人类是不是管这个叫做精分?
小哥另外让高级版的贪吃蛇AI在不同贪吃蛇AI附体时对外展现出不同的颜色。
比如,在发现食物,并且确定能够吃到的时候变成绿色,蓝色表示它确定能离食物越来越近,白色表示它看不到食物在哪里,只能尽量不让自己死掉。
这个精分版的贪吃蛇AI是这样玩的。
总之,小哥用NEAT算法的套路玩转了各种你耳熟能详的小游戏。效果都是杠杠的。
除了NEAT算法,他还用其他算法破解了另一些游戏。
比如,小哥还教AI玩55x55x55的魔方。
小哥说不能做更大的魔方了,它电脑要中风了。
小哥用Q学习(Q-Learning)练的玩钢琴块游戏的AI。
Q学习属于增强学习算法,增强学习算法就是要记录学习过的策略,并且根据奖励(目标)来调整策略的算法。
AI的目标是找到屏幕上的黑框,然后使劲地摁就好了。一键玩到电脑中风的样子——
你玩过扫雷吧。小哥也造了一个扫雷AI。看AI玩64x36的扫雷觉得莫名舒爽有木有?
好的,看完了上面这些AI打游戏的精彩片段我们知道,永远也不要嘲笑一个会繁殖的AI和一个玩不好游戏的程序员。