能玩Super Mario World的人工智能MarI/O

能玩Super Mario World的人工智能MarI/O

這篇文章是我嘗試的記錄,所以夾雜較多的廢話,見諒!

開源雜志oszine的網站上有這么一篇文章:

“用人工智能玩《超級馬里奧》,一千多行代碼,這事兒你也行!”

文章大意是介紹了一個開源的AI:MarI/O。MarI/O只有短短的一千多行代碼,但是卻能通過不斷地試錯和學習找出通關方法。

MarI/O只有幾個簡單的參數,它只是通過嘗試一切它能做出的動作。其中有一個“Fitness”值,只有當馬里奧向右移動時值才會增加。而MarI/O的設定是使得Fitness值不斷增加,這就會促使它向右移動。


MarI-O - Machine Learning for Video Games-高清觀看-騰訊視頻


在周四(11.12)晚上,我看到了這篇文章,當時就覺得很有趣,所以就復制了源代碼后開始嘗試。

源代碼是用腳本語言Lua寫的,通過一個的模擬器the BizHawk emulator運行游戲“Super Mario World (USA)"(簡稱SMW)或"Super Mario Bro."并調用腳本就可以在自己的電腦上運行MarI/O。

一開始我沒有留心源碼上的英文注釋,以為隨便找個模擬器和馬里奧的游戲就可以運行,事實證明我想得太簡單了。

由于我前段時間有接觸過Lua,電腦上也有Lua的運行環境,所以我也沒想太多。誰知道模擬器和游戲下載好后,雙擊Lua腳本,結果就呵呵了,一閃而過,然而啥事都沒有,想象中高大上的MarI/O也沒有出來。

沒辦法,硬著頭皮看那段英文注釋。在注釋中我得到了兩個重要信息,一個是模擬器,一個是游戲版本。得到了這兩個信息后,我馬上打開瀏覽器,Ctrl + V,百度谷歌一起搜,download了BizHawk和SMW,然后就開始了第二次嘗試。

然而這次嘗試還是失敗告終,原因之后說。

第二天我試著手打了一千多行源代碼,因為我懷疑是復制的問題導致腳本運行不了。誰知道手打完了,結果還是一樣。崩潰的心啊,嘩啦啦碎了一地。這時候只有再次祭出百度谷歌大法了。

我在伯樂在線上搜到這篇文章,里面也貼出了源代碼,當時我心想有沒有可能是oszine上的源碼有錯呢,然后便復制了伯樂在線那篇文章里的源代碼。結果真的跑起來了,當時那個興奮勁呀!(沒想到真的是源碼有錯,浪費了一天--!!!)

其實腳本能跑之后還有點小波折,就是一開始的SMW運行這個腳本的話會出現內存溢出的問題,所以我又重新下了一個SMW。

歷經波折,我的MarI/O昨晚也開始跑起來了,我果斷地讓它跑個通宵,還開了四倍速。到了下午(11.14),它已經有了百分之七八十的通過概率了。

MarI/O的嘗試過程超級有趣,看著它做出嘗試的時候,我想到了一個名詞——獎勵機制。同時也想到了從圖書館借的那本《通靈芯片——計算機運作的簡單原理》里面的第八章:自學習與自適應的計算機的內容。

然后我就有了一個想法,就是可以制造一個會做出簡單動作的機器人,它會嘗試一切自己能夠做的動作,通過識別人類的語音來判斷自己的行為是否正確,然后保留正確的動作,改變錯誤的動作。通過不斷地試錯與學習,是不是就會成為智能機器人呢?(笑)

其實獎勵機制讓我想到的還有一個人的成長過程。當一個嬰孩誕生在這個世界上時,他就開始了不斷地嘗試探索這個世界,以及通過周圍人的反饋去改變自己的行為,不斷地學習,這是不是很想MarI/O的成長過程呢?

一開始嬰孩腦海里也是一片空白,什么概念都沒有,存在的只有本能——尋找對自己有益的。MarI/O一開始也不知道怎么去通關一個游戲,它的本能就是去是"Fitness值"增長。

嬰孩通過嘗試自己能夠做出的動作來使得這個世界有所反應,然后他根據反饋去調整自己,通過不斷地學習,他也就擁有了自我的判斷能力。MarI/O也是如此,從一開始在原地上下左右望和跳,發現了向右可以增長"Fitness值",便開始了它的通關之路。

啰啰嗦嗦說了這么多也不容易呀!(笑)

附上下載鏈接,有興趣的人也可以試試,看著馬里奧在不斷地嘗試真的是很有趣的事情!(笑)

BizHawk模擬器

SMW游戲文件

MarI/O源代碼

PS:NEAT的意思如下

?這種學習方式稱之為神經網絡進化拓撲結構(NeuroEvolution of Augmenting Topologies,簡稱NEAT),雖然這并不是一項新技術,但是在這里,作者卻將其使用的非常高效。在一千多行Lua代碼下,即實現了與估值四億美金Deepmind類似的效果,不可不謂十分之神奇。?????--www.oszine.com

PPS:運行MarI/O前需要自己創建一個叫做"DP1.state"的存檔文件(SMB是"SMB1-1.state"文件),并將之復制到Lua目錄下和BizHawk根目錄下。而且最好是進入了關卡內的存檔。

最后附上一些圖片:

源碼

游戲界面


打開游戲ROM


Tools選項


腳本運行框(Lua Console)


一開始蠢萌蠢萌的MarI/O


學聰明的MarI/O(在經過24個遍歷輪回后--!!)


四倍速


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,488評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,034評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,327評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,554評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,337評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,883評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,975評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,114評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,625評論 1 332
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,555評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,737評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,244評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,973評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,615評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,343評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,699評論 2 370

推薦閱讀更多精彩內容