西電人工智能大作業(Q-learing)

深度學習Q-learing算法實現


1. 問題分析

在這裏插入圖片描述

這是一個走懸崖的問題。強化學習中的主體從S出發走到G處一個回合結束,除了在邊緣以外都有上下左右四個行動,如果主體走入懸崖區域,回報爲-100,走入中間三個圓圈中的任一個,會得到-1的獎勵,走入其他所有的位置,回報都爲-5。

這是一個經典的Q-learing問題走懸崖的問題,也就是讓我們選擇的最大利益的路徑,可以將圖片轉化爲reward矩陣

[[  -5.   -5.   -5.   -5.   -5.   -5.   -5.   -5.   -5.   -5.   -5.   -5.]
 [  -5.   -5.   -5.   -5.   -5.   -1.   -1.   -1.   -5.   -5.   -5.   -5.]
 [  -5.   -5.   -5.   -5.   -5.   -5.   -5.   -5.   -5.   -5.   -5.   -5.]
 [  -5. -100. -100. -100. -100. -100. -100. -100. -100. -100. -100.  100.]]

我們的目標就是讓agent從s(3,0)到達g(3,11)尋找之間利益最大化的路徑,學習最優的策略。

2. Q—learing理論分析

在Q-learing算法中有兩個特別重要的術語:狀態(state),行爲(action),在我們這個題目中,state對應的就是我們的agent在懸崖地圖中所處的位置,action也就是agent下一步的活動,我的設定是(0, 1 ,2,3,4)對應的爲(原地不動,上,下,左,右),需要注意的事我們的next action是隨機的但是也是取決於目前的狀態(current state)。

我們的核心爲Q-learing的轉移規則(transition rule),我們依靠這個規則去不斷地學習,並把agent學習的經驗都儲存在Q-stable,並不斷迭代去不斷地積累經驗,最後到達我們設定的目標,這樣一個不斷試錯,學習的過程,最後到達目標的過程爲一個episode
Q(s,a)=R(s,a)+γmax{Q(s~,a~)}Q(s,a) = R(s,a)+\gamma *max \lbrace Q(\tilde{s},\tilde{a}) \rbrace
其中s,as,a表示現在狀態的state和action,s~,a~\tilde{s},\tilde{a}表示下一個狀態的state和action,學習參數爲0<γ<10<\gamma<1,越接近1代表約考慮遠期結果。
在Q-table初始化時由於agent對於周圍的環境一無所知,所以初始化爲零矩陣。

3. 算法實現

參考以下僞代碼:
在這裏插入圖片描述
具體程序如見附錄
程序的關鍵點:

  1. 核心代碼即爲僞代碼,但是各種方法需要自己實現,在程序中有註釋可以參考
  2. 需要判斷agent在一個狀態下可以使用的行動,這一點我用valid_action(self, current_state)實現

**發現的問題:**題目中的目標點爲G 的目標值也是爲-1,但是程序會走到這個一步但是函數沒有收斂到此處,而且由於在獎勵點收益大,所以最後的agent會收斂到獎勵點處,在三個獎勵點處來回移動。所有我將最後的目標點G的值改爲了100,函數可以收斂到此處。後來也看到文獻中的吸收目標

3. 結果展示

最後到Q-tabel矩陣由於太大放到附錄查看,但是同時爲了更加直觀的看到運行結果,
編寫了動態繪圖的程序 畫出了所有的路徑。如果需要查看動態圖片請運行程序最終結果如下圖:

待續

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章