使用神經網路和遺傳演算法玩轉 Flappy Bird

2021-08-07 06:29:09 字數 2419 閱讀 8185

首先,讓我們從演示程式開始,看一下遊戲過程中的演算法:

需科學上網)

根據2023年亞瑟·塞繆爾(arthur samuel)的說法,機器學習是讓計算機在不顯式程式設計的情況下行動的科學。一般來說,這是乙個循序漸進地改進初始隨機系統的學習過程。

因此,實現人工智慧的目標是通過對乙個差的系統進行模型引數的微調來找到乙個適當的解決方案。為此,機器學習演算法使用了許多不同的方法。

對於本專案,機器學習演算法(ml,machine learning)的主要方法是基於神經演化的。這種機器學習在形式上使用了遺傳演算法(ga,genetic algorithm)等進化演算法來訓練人工神經網路(ann,artificial neural network)。

所以,在這個例子中,我們可以說:機器學習 = 遺傳演算法 + 人工神經網路(ml = ga + ann)。

人工神經網路是機器學習演算法的乙個子集。它的誕生受到了生物神經網路結構和功能的啟發。這些網路由許多傳送訊號的神經元組成。

因此,要建立乙個人造大腦,我們需要模擬出神經元並將它們連線成乙個神經網路。

通用人造神經網路是由輸入層、乙個或多個隱藏層,以及輸出層組成。每一層都有一定數量的神經元。輸入和輸出神經元直接與外部環境相連,而隱藏的神經元則將以上兩者連線起來。

在本專案中,每個單元(小鳥)都有自己的神經網路作為ai大腦來玩遊戲。它由以下三層組成:

乙個具有2個神經元的輸入層,表示乙隻小鳥看到的東西:    - 與最近間隙的水平距離    - 與最近間隙的高度差

具有6個神經元的隱藏層

具有1個神經元的輸出層,提供如下動作:    - 如果 輸出 > 0.5,則扇動翅膀,否則什麼也不做

下圖顯示了本演示程式的神經網路架構:

在談論到機器學習演算法的時候,可以說,遺傳演算法可以用來訓練和改進神經網路。

遺傳演算法是一種基於搜尋的優化技術,其靈感來自於自然選擇和遺傳過程。它採用選擇、交叉和變異相結合的方法來進化初始隨機種群。

以下是遺傳演算法實現的主要步驟:

用**隨機神經網路**建立10個單元(小鳥)的初始鳥群

讓所有的單元同時使用自己的神經網路進行遊戲。

對於每個單元,計算其**適應度**函式來衡量其質量(詳情請參閱下面的「適應度函式」章節)

當所有的單元都死亡時,使用遺傳運算元來評估當前鳥群以生成下乙個鳥群(詳情請參閱下面的「替換策略」章節)

返回到步驟2

除了遺傳演算法(步驟3)之外,下面我們將了解一下有關適應度函式的一些細節,例如,適應度函式是什麼,如何定義。

因為我們希望通過使用最好的小鳥來進化鳥群,所以需要定義乙個適應度函式。

通常來說,適應度函式是衡量物件質量的指標。我們會度量每只鳥的質量,然後選擇最適合的小鳥,並用它來重新生成下一批小鳥。

在本專案中,我們會根據小鳥飛行的距離來進行獎勵。同時,根據小鳥當前到最近間隙的距離進行懲罰。所以,在這過程中,飛行了相同距離的小鳥之間就會產生差別。

因此,適應度函式是「小鳥飛行的總距離」和「與最近間隙的距離」之間的差。

除了遺傳演算法(步驟4)之外,以下是將自然進化應用於小鳥死亡的步驟。最好的小鳥生存下來,然後他們的孩子就以下面這種方式來替代最糟糕的小鳥:

按照適應度對當前所有的小鳥進行排序

選擇前4名(勝利者),並將他們直接傳遞給下乙個鳥群

建立乙個後代作為兩個最佳勝利者的交叉產品

建立3個後代作為兩個隨機勝利者的交叉產品

建立2個後代作為兩個隨機勝利者的直接副本

對每個後代應用隨機突變,以增加一些變異

由於程式是使用html5基於phaser框架和synaptic神經網路庫編寫的,因此需要這些檔案:

整個遊戲邏輯在**gameplay.js**檔案中實現。它由以下類組成:

treegroup 類,擴充套件了phaser group類,用於移動障礙物,包含頂部和底部的樹。

tree 類,擴充套件了phaser sprite類,用來表示一棵樹。

bird 類,擴充套件了phaser sprite類,用來表示乙隻鳥。

text 類,用於繪製文字的phaser bitmaptext類。

遺傳演算法在**genetic.js**檔案中實現,該檔案由以下類組成:

你可以嘗試更改**中的一些引數,看看會發生什麼。例如,你可以更改隱藏層中的神經元數量或小鳥的數量。此外,你還可以嘗試以某種方式修改適應度函式,修改一些物理引數,比如障礙物之間的距離、重力等等!

試著將這裡的進化理念應用到其他遊戲中去吧!

模擬退火法 神經網路 遺傳演算法

最優化理論的經典演算法 模擬退火法 神經網路 遺傳演算法是數學建模中常用的啟發式演算法,這裡整合一下模版,並進行一些拓展,方便直接使用 原文 一些拓展 基於模擬退火的遺傳演算法 模擬退火法 j y 在狀態y時的評價函式值 y i 表示當前狀態 y i 1 表示新的狀態 r 用於控制降溫的快慢 t 系...

基於遺傳演算法的BP神經網路優化

1 前言2 思路與步驟 遺傳演算法優化bp神經網路主要分為三步 bp神經網路結構的確定 遺傳演算法優化權值和閾值 bp神經網路訓練與 2.1 bp神經網路結構的確定 2.2遺傳演算法 基本要素 染色體編碼方式 適應度函式 遺傳操作 執行引數 其中執行引數是遺傳演算法初始化時確定的引數,主要包括 群體...

遺傳演算法優化BP神經網路前後的對比

注 遺傳演算法部分使用sheffield工具箱,bp部分是matlab自帶。1.bp 實現 function err bpfun x,p,t,hiddennum,p test,t test x為個體初始權值 閾值 p為訓練樣本輸入 t為訓練樣本輸出 hiddennum為隱含層神經元數量 p test...