2016-11-04 229 views
5

我想訓練神經網絡玩2048遊戲。我知道神經網絡對於像2048這樣的國家遊戲並不是一個好的選擇,但是我希望神經網絡能夠像經驗豐富的人一樣玩遊戲,即只在三個方向上移動平鋪。如何訓練神經網絡來玩2048遊戲?

但我不知道如何自我訓練神經網絡,因爲我們不知道有效的輸出。通常,例如在迴歸中,您知道正確的輸出,並且可以計算損失(例如均方誤差)並更新權重。但在2048年,有效輸出基本上是未知的(當然,你可以計算你可以移動的每個方向的分數,例如,具有最大差異的方向score_after_move - previous_score將是我們的有效輸出,但我認爲這不是自我學習的方式NN)。那麼是否有可能爲2048年遊戲定義損失函數?最好的將是一個可區分的。

接下來的問題是什麼時候更新權重:在每一次移動之後或者完成一個遊戲之後(遊戲結束)?

如果是很重要的:我的NN拓撲結構將是現在簡單:

2D matrix of gaming board -> 2D matrix of input neurons -> 2D fully-connected hidden layer -> 1D 4-neuron layer

所以每個瓦片將被輸入到第一層相應的神經元(有沒有完全連接的二維任何特殊的名字層?)。來自最後一層的預期輸出是長度爲4的矢量,例如, [1,0,0,0]將成爲「向上」移動方向。

現在我已經爲2048遊戲實現了無頭類(在Python/NumPy中),因爲使用可視化輸入很慢並且還有更多工作要做。

P.S.也許我正在錯誤地思考關於這個遊戲的NN學習(或者一般的遊戲)。隨時給我一個更好的方式,我將不勝感激。謝謝:)

編輯:強化學習似乎是方式。下面是一些有用的鏈接:

Demystifying Deep Reinforcement Learning

Action-Value Methods and n-armed bandit problems

Q-learning for Keras

Deep Reinforcement Learning for Keras

+0

您可能會發現這個有趣的:https://www.youtube.com/watch ?v = qv6UVOQ0F44 – Tim

+0

這很好:)我也想實現一些遺傳算法。不幸的是作者沒有寫任何解釋,所以只能選擇閱讀他的源代碼。 – jirinovo

+0

雖然可以將此問題遷移到SO,但您已按照要求進行遷移,但它看起來並不像這裏的話題,因此遷移可能會被拒絕。 – whuber

回答

3

所以https://github.com/matthiasplappert/keras-rl似乎是最好的辦法。您只能實現由OpenAI Gym環境API定義的幾個方法。這些都是step()reset()方法:https://github.com/matthiasplappert/keras-rl/blob/master/rl/core.py#L330

欲瞭解更多信息有來自keras-rl開發一個答案:https://github.com/matthiasplappert/keras-rl/issues/38

當我2048遊戲AI項目將完成,我發在這裏源(如果我贏了」的鏈接忘記這樣做:))

編輯:這裏是承諾鏈接到源,完全忘記了它:/ https://github.com/gorgitko/MI-MVI_2016

+0

你最終完成了它:p? –

+1

@tt_Gantz是啊:) [鏈接](https://github.com/gorgitko/MI-MVI_2016)添加 – jirinovo