一個(gè)懂寫代碼的程序員平常是怎么玩游戲的?想知道嗎,一個(gè)網(wǎng)名叫做 Code Bullet 的澳大利亞程序員就經(jīng)常自己在家制造和訓(xùn)練 AI 幫他打游戲。
看過他訓(xùn)練出的 AI 玩的游戲,感覺…再也不想玩游戲了呢。
先來看 AI 玩 Flappy bird 會(huì)怎樣。
小哥使用的是NEAT(neuro evolution of augmenting topologies)算法,也就是增強(qiáng)拓?fù)涞纳窠?jīng)演化算法。
NEAT 是一種結(jié)合神經(jīng)網(wǎng)絡(luò)和遺傳算法(genetic algorithm)的好算法。
遺傳算法是什么?
遺傳算法類似于一個(gè)代碼進(jìn)化系統(tǒng),它是一種優(yōu)勝劣汰 AI 的算法。
你要做的,就是告訴計(jì)算機(jī),什么是“成功”的標(biāo)準(zhǔn),還要告訴AI,它可以看到什么,可以做什么。成功的AI可以進(jìn)行一次繁殖,留下后代,不成功的 AI 就當(dāng)場(chǎng)去世了。
為了模擬演化,子代 AI 還會(huì)和爸爸/媽媽有一點(diǎn)點(diǎn)的不同,類似于遺傳突變。
神經(jīng)網(wǎng)絡(luò)則是一種具有學(xué)習(xí)能力的算法,它模擬的是生物神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu),可以根據(jù)經(jīng)驗(yàn)不斷調(diào)整。
在 Flappy bird 里,小哥設(shè)定 AI 可以看到鳥鳥和柱子的距離、鳥鳥相對(duì)于柱子的速度等信息。剩下的該怎么玩 AI 自便。
在每一代的 AI 里,玩得最好的可以進(jìn)行繁殖,并把自己的優(yōu)秀基因遺傳給下一代。當(dāng)然了,下一代也不會(huì)照單全收,還是會(huì)有小小的突變。
第六代目就可以妥妥地拿下2000分了...
好的,小哥用 NEAT 玩壞的第二個(gè)游戲,就是 Chrome 瀏覽器連不上網(wǎng)時(shí)候出現(xiàn)的彩蛋小游戲——跳跳恐龍。
你還不知道有這個(gè)游戲?
你能玩到第幾關(guān)呢?
好的,發(fā)現(xiàn)自己技術(shù)太差以后,小哥就自行復(fù)制出了游戲,并開始無情的 AI 模式了。
第一代AI有500只,每一只控制著一只恐龍。發(fā)揮最好的 AI 可以進(jìn)入繁殖階段,不行的AI就莫得繁殖。而且下一代的策略會(huì)和上一代有一點(diǎn)點(diǎn)不同,類似于遺傳突變。
上面的那些網(wǎng)絡(luò)就是控制這些 AI 的神經(jīng)網(wǎng)絡(luò),它會(huì)一代代地發(fā)生變化。
這個(gè)神經(jīng)網(wǎng)絡(luò)的輸入信號(hào)就是每個(gè) AI 看到的東西,輸出就是每個(gè)AI的動(dòng)作。新的神經(jīng)網(wǎng)絡(luò)連接的出現(xiàn)代表著 AI 學(xué)會(huì)了某種特定的策略。
第一代的基本設(shè)定很簡(jiǎn)單,就是不停地隨便亂跳。就和你一開始玩的時(shí)候一樣。如果你仔細(xì)看上面的圖,會(huì)發(fā)現(xiàn)有只AI是一直趴著前進(jìn)的。
就這樣,傻 fufu 的 AI 被一代代刷掉之后,終于有只 AI 搞明白要看清楚距離再跳了。
好的,玩過這個(gè)游戲的人知道,到了一定時(shí)間,速度會(huì)變得飛快,而且一些鳥鳥飛得太高踩不到,所以在大鳥鳥面前要主動(dòng)彎腰。
利用遺傳算法訓(xùn)練到第八代 AI 的時(shí)候,它們看起來就已經(jīng)很聰明了。
但是第八代還是沒學(xué)會(huì)在踩不扁的大鳥鳥面前低頭。
到了25代,AI 終于學(xué)會(huì)了,如果你不能碾壓別人,那就要立刻向大佬低頭,晚0.1秒都不行。
到了第40代AI,見識(shí)一下什么叫做恐怖。
第25代 AI 妥妥地拿下了2萬分。后來因?yàn)樾「绲?a href="http://ttokpm.com/v/tag/1247/" target="_blank">電腦實(shí)在吃不消了才沒有繼續(xù)刷出高分。
還有這個(gè)世界最難游戲。
小哥也是因?yàn)樽约和娴锰珷€,于是決定用遺傳算法算法來海選 AI 幫自己刷分。
每個(gè) AI 依照一套指令(術(shù)語叫做 vector)。
和自然選擇理論一致,適合度最高的 AI 可以繁殖,做不到的 AI 就只能去死了。小哥規(guī)定,AI 要在有限的步數(shù)之內(nèi)完成特定的指令。完成的指令越多,就可以獲得更多的步數(shù)。
一伙 AI 沖上場(chǎng)的畫面。有不怕死的已經(jīng)當(dāng)場(chǎng)去世了。
注意到頭是綠的 AI 嗎?它們是上一代 AI 里最優(yōu)秀的后代。
終于到了第50代,第50代啊同志們,有一個(gè)AI來到了終點(diǎn)。
也是用 NEAT 算法訓(xùn)練的 AI 玩越野賽車。
從沒眼看的個(gè)位數(shù)代目——
再到彪悍的十七代目——
再來看看 AI 玩貪吃蛇。
小哥先利用遺傳算法和深度學(xué)習(xí)(deep learning)訓(xùn)練出了幾條優(yōu)秀的 AI 貪吃蛇,然后利用融合(fusion)的方法把它們的“大腦”合體。相當(dāng)于一個(gè)貪吃蛇的身體里藏著好幾條蛇。人類是不是管這個(gè)叫做精分?
小哥另外讓高級(jí)版的貪吃蛇 AI 在不同貪吃蛇 AI 附體時(shí)對(duì)外展現(xiàn)出不同的顏色。
比如,在發(fā)現(xiàn)食物,并且確定能夠吃到的時(shí)候變成綠色,藍(lán)色表示它確定能離食物越來越近,白色表示它看不到食物在哪里,只能盡量不讓自己死掉。
這個(gè)精分版的貪吃蛇 AI 是這樣玩的。
總之,小哥用 NEAT 算法的套路玩轉(zhuǎn)了各種你耳熟能詳?shù)男∮螒?。效果都是杠杠的?/p>
除了 NEAT 算法,他還用其他算法破解了另一些游戲。
比如,小哥還教 AI 玩55 x 55 x 55的魔方。
小哥說不能做更大的魔方了,它電腦要中風(fēng)了。
小哥用Q學(xué)習(xí)(Q-Learning)練的玩鋼琴塊游戲的 AI。
Q學(xué)習(xí)屬于增強(qiáng)學(xué)習(xí)算法,增強(qiáng)學(xué)習(xí)算法就是要記錄學(xué)習(xí)過的策略,并且根據(jù)獎(jiǎng)勵(lì)(目標(biāo))來調(diào)整策略的算法。
AI 的目標(biāo)是找到屏幕上的黑框,然后使勁地摁就好了。一鍵玩到電腦中風(fēng)的樣子——
你玩過掃雷吧。小哥也造了一個(gè)掃雷 AI。看 AI 玩 64 x 36 的掃雷覺得莫名舒爽有木有?
好的,看完了上面這些 AI 打游戲的精彩片段我們知道,永遠(yuǎn)也不要嘲笑一個(gè)會(huì)繁殖的 AI 和一個(gè)玩不好游戲的程序員。
-
AI
+關(guān)注
關(guān)注
87文章
29806瀏覽量
268103 -
代碼
+關(guān)注
關(guān)注
30文章
4722瀏覽量
68231
原文標(biāo)題:AI 學(xué)會(huì)你最拿手的小游戲之后…
文章出處:【微信號(hào):smartman163,微信公眾號(hào):網(wǎng)易智能】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論