Neuroevolution_T-rex
用神經網絡來訓練個能自己玩chrome斷線時的那個小恐龍的AI
示例–github: https://cxwithyxy.github.io/Neuroevolution_T-rex/
示例–gitee:國內的朋友訪問這個鏈接會更快
遊戲本體(t-rex-runner)
遊戲本體叫“t-rex-runner”,源碼來自這裏https://github.com/wayou/t-rex-runner。
下稱“小恐龍游戲”。
我對遊戲的修改
- 刪除了音樂(因爲我電腦卡)
- 移除了當焦點不在瀏覽器上就暫停遊戲的監聽(因爲我要邊寫代碼邊看小恐龍)
- 遊戲的本體代碼在 game.js 和 game.html (因爲這樣我可以通過iframe來控制多個同時運行的遊戲)
關於人工智能或者神經網絡或者機器學習
主要實現這些“智能”的類庫來自於 neataptic.js ,這個文件來自於https://github.com/wagenaartje/neataptic。
關於如何控制小恐龍游戲
看 index.js 你就會明白,我循環創建了幾個iframe,一個iframe一個小恐龍游戲。
對每一個iframe進行操作,把小恐龍游戲的數據傳遞給AI,再把AI判斷的結果換成操作並讓小恐龍跳起來。
關於這個項目要怎麼開始跑
- 爲了讓iframe能避開安全沙箱(跨域什麼的),從而實現index.js對iframe裏面的上下文進行操作,因此你要開啓web服務器,我用的是nodejs的一個叫“http-server”,因此你會看到我的目錄下有個啓動腳本“startServer.bat”嗎,雙擊啓動就行了(如果你是window的電腦的話),然後訪問127.0.0.1:8080。
- 頁面運行的時候會創建50個iframe來跑小恐龍,由於我的電腦比較卡,因此setTimeout了8秒才啓動小恐龍游戲,所以你看到50個小恐龍一動不動的時候不要慌張。當然你電腦強的話可以把50改成500。
- 當所有小恐龍游戲結束的時候纔會重新開始,所以死剩最後一個小恐龍的時候不要慌,而且重新開始之後AI並不會刪除之前的訓練數據(反正我不知道訓練數據在哪裏,你自己找找看),因此每次死完之後的重生,AI就更加聰明一籌。
我的研究歷史
- 一開始是看到別人通過迷之代碼實現的像素鳥,很好奇,就基於那個作者寫好的一個js類庫 Neuroevolution.js ,實現了小恐龍的AI,因此你可以在 Neuroevolution分支 看到我這一開始的代碼。
- 後來分析了像素鳥AI的實現代碼,主要是 Neuroevolution.js ,因此做了個思維圖mind.png。
- 嘗試使用別的神經網絡類庫來實現小恐龍,synaptic.js ,但是失敗了。因此你可以在 synaptic分支 看到我這些代碼。
- 這時發現之前認爲的迷之代碼是遺傳算法和神經網絡來構成,在找了一段時間之後發現了 neataptic.js ,用這個庫實現了小恐龍AI。可以在 neataptic分支 看到這些代碼。
- 研究一段時間發現 neataptic.js 比 Neuroevolution.js 的功能豐富多了,因此用 neataptic分支 把 master分支 覆蓋了。
分支的說明
- master分支:目前我認爲最靠譜的代碼,因此 master分支 等於 neataptic分支。
- neataptic分支:基於 neataptic.js 實現的小恐龍游戲AI。
- Neuroevolution分支:基於 Neuroevolution.js 實現的小恐龍游戲AI。
- synaptic分支:基於 synaptic.js,但沒有實現小恐龍游戲AI。