4

我一直在學習神經網絡,遺傳算法,並測試我的學習,努力使人工智能是學會玩笨鳥先飛:用遺傳算法訓練神經網絡來玩飛揚的小鳥 - 爲什麼不能學習?

Screenshot of program

我已經離開它至少運行10小時(一夜之間或更長時間),但最適合的成員仍然沒有顯示出從開始模擬以來避免地板和天花板的任何重大進展。 輸入是作爲視線的光線(如上圖所示),網絡的長度以及鳥的垂直速度。看起來最好的鳥基本上忽略了除水平線之外的所有視線,而當它很短時,它就會跳起來。 輸出是一個介於0和1之間的數字,如果輸出大於0.5,則鳥跳躍。有4個隱藏層,每層有15個​​神經元,輸入層向前饋送到第一個隱藏層,然後第一個隱藏層向前饋送到第二個隱藏層,最後一個隱藏層向前饋送到輸出,一隻鳥的dna是一組代表神經網絡權重的實數,我做了另一個使用相同樣式的神經網絡和遺傳算法的項目,螞蟻不得不前往食物,並且它的工作非常完美。

下面是代碼:https://github.com/Karan0110/flappy-bird-ai

請在評論說,如果你需要任何額外的信息

請你可以說我的方法是有缺陷的或沒有,因爲我幾乎可以肯定的代碼工作正常(我從以前的工作項目中獲得)。

+2

首先,這真的很酷,你做的工作似乎很棒!在這種情況下,恐怕這個問題對於這個網站來說太廣泛了,因爲除了「這段代碼不工作,我怎麼能使它工作?」之外,我看不到任何實際的問題。 – George

+1

謝謝,我試圖讓我的問題更具體。 –

+0

@KaranElangovan,在這裏發表相同的問題[交叉驗證](https://stats.stackexchange.com/)。並請確保您有效地遵循社區指南。人必須小心。 – quintumnia

回答

0

我喜歡你的想法,但我建議你改變一些事情。

  • 請勿使用固定結構的網絡。查找自動分層拓撲的神經演化,而是自己實現它,或使用像neataptic這樣的庫。

    • 我不相信你的網絡需要這麼多輸入。我相信3-5個傳感器(20-50°間隙)就足夠了,因爲許多輸入值似乎非常相似。

如果你不知道到底爲什麼你的項目工作不試試這個:

  • 嘗試查看當前最好的網絡的圖像。如果網絡不考慮重要的傳感器(如速度),您會立即看到它。

  • 確保您的所有傳感器都正常工作(在上圖中看起來不錯),並確保以有意義的方式對值進行正確化處理。

  • 檢查平均分數的最大值是否隨時間增加。如果它不是你的遺傳算法工作不正常,或者你的網絡接收到的輸入不足以解決問題。

一個詭計幫助我解決了很多問題,那就是讓GA的精英們獨立出陣。如果其他網絡的表現優於精英,則只能取代精英網絡。讓精英一直保持低谷,所以一旦你的算法找到了一個非常好的解決方案,如果沒有其他更好的表現,它將不會在未來的一代中流失。