Q-Learning 值超出閾值
在實施Q-Learning 時,您遇到了Q 值變得過大的問題,導致溢出。為了解決這個問題,讓我們檢查一下基本概念和潛在問題:
獎勵函數
提供的獎勵函數為每個時間步分配正獎勵,促進長期比賽重於勝利。這是不可取的,因為應該激勵代理人去爭取勝利。
更新方程式
問題的關鍵在於Q 值的更新方程式:
agent.values[mState] = oldVal + (agent.LearningRate * (agent.prevScore + (agent.DiscountFactor * reward) - oldVal))
這裡,agent.prevScore 代表前一個狀態動作的獎勵。但是,在您的實作中,您將其設定為上一步驟的 Q 值(即 oldVal)。這個錯誤會導致 Q 值無限增加。
解決方案
透過 agent.prevScore 分配給上一步驟的獎勵來修正此錯誤後,代理人的行為正常化。更新後的 Q 值現在反映了預期的總獎勵,激勵智能體追求勝利。
Q 值範圍
在典型的 Q-Learning 問題中,Q-價值受到最大可能的獎勵和懲罰的限制。在您的情況下,獎勵函數將 Q 值限制為 [-1, 1],因為它為失敗分配 -1,為獲勝分配 1。然而,在其他場景中,範圍可能更大甚至無界。預期總獎勵是決定 Q 值範圍的關鍵因素。
透過解決這些問題,您已經成功實施了 Q-Learning,現在可以訓練一個以更具戰略性的方式進行遊戲的智能體,優先考慮贏得長時間遊戲。
以上是為什麼我的 Q-Learning 價值觀呈現爆炸性成長?的詳細內容。更多資訊請關注PHP中文網其他相關文章!