遺傳算法和神經網絡實現chrome的小恐龍游戲(Flappy TRex)的人工智能

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

下稱“小恐龍游戲”。

我對遊戲的修改

  1. 刪除了音樂(因爲我電腦卡)
  2. 移除了當焦點不在瀏覽器上就暫停遊戲的監聽(因爲我要邊寫代碼邊看小恐龍)
  3. 遊戲的本體代碼在 game.js 和 game.html (因爲這樣我可以通過iframe來控制多個同時運行的遊戲)

關於人工智能或者神經網絡或者機器學習

主要實現這些“智能”的類庫來自於 neataptic.js ,這個文件來自於https://github.com/wagenaartje/neataptic

關於如何控制小恐龍游戲

看 index.js 你就會明白,我循環創建了幾個iframe,一個iframe一個小恐龍游戲。
對每一個iframe進行操作,把小恐龍游戲的數據傳遞給AI,再把AI判斷的結果換成操作並讓小恐龍跳起來。

關於這個項目要怎麼開始跑

  1. 爲了讓iframe能避開安全沙箱(跨域什麼的),從而實現index.js對iframe裏面的上下文進行操作,因此你要開啓web服務器,我用的是nodejs的一個叫“http-server”,因此你會看到我的目錄下有個啓動腳本“startServer.bat”嗎,雙擊啓動就行了(如果你是window的電腦的話),然後訪問127.0.0.1:8080。
  2. 頁面運行的時候會創建50個iframe來跑小恐龍,由於我的電腦比較卡,因此setTimeout了8秒才啓動小恐龍游戲,所以你看到50個小恐龍一動不動的時候不要慌張。當然你電腦強的話可以把50改成500。
  3. 當所有小恐龍游戲結束的時候纔會重新開始,所以死剩最後一個小恐龍的時候不要慌,而且重新開始之後AI並不會刪除之前的訓練數據(反正我不知道訓練數據在哪裏,你自己找找看),因此每次死完之後的重生,AI就更加聰明一籌。

我的研究歷史

  1. 一開始是看到別人通過迷之代碼實現的像素鳥,很好奇,就基於那個作者寫好的一個js類庫 Neuroevolution.js ,實現了小恐龍的AI,因此你可以在 Neuroevolution分支 看到我這一開始的代碼。
  2. 後來分析了像素鳥AI的實現代碼,主要是 Neuroevolution.js ,因此做了個思維圖mind.png
  3. 嘗試使用別的神經網絡類庫來實現小恐龍,synaptic.js ,但是失敗了。因此你可以在 synaptic分支 看到我這些代碼。
  4. 這時發現之前認爲的迷之代碼是遺傳算法和神經網絡來構成,在找了一段時間之後發現了 neataptic.js ,用這個庫實現了小恐龍AI。可以在 neataptic分支 看到這些代碼。
  5. 研究一段時間發現 neataptic.js 比 Neuroevolution.js 的功能豐富多了,因此用 neataptic分支 把 master分支 覆蓋了。

分支的說明

  1. master分支:目前我認爲最靠譜的代碼,因此 master分支 等於 neataptic分支。
  2. neataptic分支:基於 neataptic.js 實現的小恐龍游戲AI。
  3. Neuroevolution分支:基於 Neuroevolution.js 實現的小恐龍游戲AI。
  4. synaptic分支:基於 synaptic.js,但沒有實現小恐龍游戲AI。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章