一個簡單的人工智慧,使用神經網路和簡單的遺傳演算法來教 Google Chrome 的離線恐龍跳躍仙人掌。
觀看此視頻,了解其實際效果,並了解其工作原理:人工智慧與 Google 恐龍
在您的電腦上安裝Node.js
將此資料夾克隆/下載到您的電腦。
在此資料夾中運行npm install
打開Chrome的恐龍遊戲,把終端機放在一邊(必須在同螢幕) (提示:進入開發者工具,在網路下,設定為離線)
在此資料夾中運行node index
。如果遊戲已定位,它將把滑鼠遊標移到恐龍floor
的原點。在終端機中按s
鍵開始學習。
我們從螢幕像素讀取 3 個不同的輸入:
我們還有一個具有 3 種可能狀態的輸出:
每一代由 12 個神經網路(基因組)組成。
每個基因組都透過遊戲進行測試,透過不斷地將遊戲的讀取輸入映射到神經網路的輸入,並從網路獲取輸出/激活並應用於鍵盤的按鍵。
在測試每個基因組時,我們透過計算遊戲中跳躍的仙人掌來追蹤其「適合度」。
當一整代完成後,我們刪除最糟糕的基因組,直到獲得N
基因組。對於這N
基因組,我們隨機選擇兩個,並交叉它們的值/配置。之後,我們在神經網路的值/配置中應用隨機突變,創建一個新的基因組。
我們進行交叉/突變,直到再次獲得 12 個基因組,並不斷重複。
所有實作都是使用 Node.js、Synaptic(神經網路庫)和 RobotJs(讀取像素和模擬按鍵的庫)完成的。
專案中有幾個文件:
index.js
:它將所有東西緊密結合在一起。
Scanner.js
:RobotJs 庫之上的基本抽象層,它像光線追蹤一樣讀取螢幕。還有一些實用功能。
UI.js
:UI 管理的全域範圍。它會初始化並根據更改更新螢幕。
GameManipulator.js
:具有讀取感測器並將輸出應用於遊戲的所有必要程式碼。還負責計算點、獲取遊戲狀態並觸發回調/偵聽器以實際實現。
Learner.js
:它是遺傳演算法的核心實作。這就是「魔法」發生的地方,透過世代相傳,進行「自然」選擇、交叉、突變…
.json
副檔名的genomes
資料夾內enter
(然後按s
開始)o
儲存生成Cc
完成流程恐龍遊戲有一個惱人的錯誤:隨著時間的推移,它開始向右“漂移”,使得恐龍從遊戲的原點錯誤地偏移。這使得程式將恐龍讀取為仙人掌,因為它的顏色相同。
您可以透過不斷刷新頁面來修復該問題,或將此程式碼貼到元素檢查器的控制台中:
// Make sure the dino does not drift to the right
setInterval(function (){Runner.instance_.tRex.xPos = 21}, 2000)
請遵循 Felix 的 Node.js 風格指南。它並不複雜,並且有一個非常簡單的模式。