簡體   English   中英

為什么我的井字游戲深度 Q 學習實施無法學會阻止對手的動作?

[英]Why does my Tic Tac Toe Deep Q-Learning implementation not learn to block opponent moves?

我正在嘗試使用深度 Q 網絡解決井字游戲。

環境:

長度為 9 的數組用於表示游戲的 state,其中 1 代表當前玩家的標記位置,-1 代表下一個玩家的位置。 0 用於未標記的位置。 可變輪數用於決定下一個輪到誰。 操作表示為具有行號和列號的列表。 0 對非終止動作和平局給予獎勵。 獲勝將獲得 1 的獎勵。

例子:

 x | - | -

 - | - | o 

 - | - | -

表示為 [1,0,0,0,0,0,0,-1,0],這里 x 表示為 1,o 表示為 -1,因為下一輪是 x 的動作 [1,2] 將改變state 至

 x | - | -

 - | - | o 

 - | x | -

表示為[-1,0,0,0,0,-1,0,1,0],這里x表示為-1,o表示為1,因為下一輪是o

深度 Q 網絡:

The q function takes in a state and an action to output the q value associated with that move for that state I update the q function by using the target q value for state s and action a as

目標 q 值(s,a) = gamma*(reward(s,a) - q 值(s',a'))

其中 gamma=1, s' 是在 state s 處完成移動 a 后的下一個 state,a' 是由 q ZC1C425268E68385D1AB5074F14ZA 決定的下一個玩家的下一個最佳移動。

根據我對極小極大算法的理解,我從獎勵中減去 q 值。

最佳動作是通過使用合法動作列表中的動作來獲得當前 state 的 q 值,並且具有最高 q 值的動作被認為是最佳動作

我正在使用在線 q-network 來提供下一個最佳移動,該移動在每個樣本期間都會更新,而離線 q-network 提供 q 值以獲得目標 q 值,該目標 q 值根據 DDQN 實現更新頻率較低。與 epsilon 一起衰變探索和開發。

我也在使用經驗回放緩沖區

使用的神經網絡是

model = models.Sequential()
model.add(layers.Dense(50, input_dim=11, activation='sigmoid'))
model.add(layers.Dense(20, activation='sigmoid'))
model.add(layers.Dense(1, activation='linear'))

帶有學習率的 rmsprop 優化器.01

epsilon=1 to.05,衰減率為.9995

經驗回放緩沖區大小 = 500 集

訓練的 batch_size = 500 個狀態和動作

離線 model 以 500 集為間隔更新在線的權重。

在訓練了 20000 集之后,損失是波動的損失曲線

DQN 未能阻止移動,只對完成一行感興趣。 我想了解這個實現中出了什么問題。 是因為 DQN 不穩定還是我犯了任何缺陷。感謝任何幫助。 這是我第一次發帖,我不熟悉如何寫問題,請糾正問題中的錯誤。

這是代碼,但寫得不好

如果您還可以發布獎勵與時間步長的 plot,那就太好了。

您可以嘗試的一件事是通過每集反向傳播折扣獎勵。 本質上,在每一集結束后,您應該使獎勵為:

new_reward = gamma^(Tt)*terminal_reward

您將這些獎勵存儲在回放緩沖區中,而不是您將從環境中獲得的零獎勵。 這將緩解稀疏獎勵的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM