本文要教大家 如何用Q learning 實作出一個走迷宮的AI機器人,如果不知道這公式怎麼來的話可以看我之前的推導文章Q-learning 推導

 

公式:

程式表示法:

Q(s,a)= oldQ + alpha * (R(s,a,s')+ (gamma * MaxQ(s')) - oldQ)

 

程式碼原檔:https://github.com/darren1231/Reinforcement-learning-q-learning-

歡迎大家下載,是用matlab寫的

如果沒有matlab也沒關係 可以用 Octave 跑也可以,但記得把plot_action 註解掉

 

完整程式碼解說如下:

 

主要核心概念就是先做出可以四處走動的機器人,剛開始先用隨機走四個方向,然後再設置牆壁,之後再經由Q learning公式,由最大的Q值決定機器人走向

 

決定我們的環境狀態怎麼設置,在matlab中起始狀態為1,所以左上角為座標(1,1),如下

 

所以我們共決定了16個狀態(S),牆壁不算狀態,4個動作(a),下面建立顯示的地圖表示方式,方便查看, 1代表牆壁,Q(s,a)

 

首先設置一個乾淨的Q table , 我用前面兩個數字的座標當作狀態, 最後面的數字代表動作 

 

初始化回合數,並設置回合數最大值50

 

每經過一回合學習,round就++,初始化開始位置(2,2),初始化機器人走路步數(step),您會漸漸地看到機器人每回合走路的step越來越來,直到最後找到最佳路徑

 

設定學習率0.9 折扣率0.8

 

所以總共有兩個迴圈,外層為回合迴圈,內層為步數迴圈,內層迴圈設置直到走回終點(5,5)才會跳出

 

圖形化的工具,因為這Q table是三維的不好觀看,所以我把它圖形化了,第一個參數代表要看的q table,後面的參數代表機器人現在的位置

 

機器人現在的位置用紅點表示

 

亂數產生1~4,代表四個方向

 

有了Q table後就可以比較出哪一個 Q(s,a1) Q(s,a2) Q(s,a3) Q(s,a4) 較大,第一個參數代表最大的那個值,第二個參數代表索引值

 

為了避免q table 剛開始都是0 所以學出來的路徑都一樣,在一開始加點亂數,如果把這個改成一直選最大的Q值也可以,但你會發現學出來的路徑都一樣

 

在我們的地圖上標記走的步數,如下圖

 

紀錄剛剛走過的狀態,也就是state(s)

 

根據上面計算的action(1~4),帶入相應動作,走完的狀態我們稱作state(s')

new_Q(s,a)= oldQ(s,a) + alpha * (R(s,a,s')+ (gamma * MaxQ(s')) - oldQ)

 

 

判斷撞牆狀態,把機器人退回原位置以及給予reward

由於 new_Q(s,a)= oldQ(s,a) + alpha * (R(s,a,s')+ (gamma * MaxQ(s')) - oldQ)

下一個狀態s'是牆壁,可是牆壁不算狀態,所以MaxQ(s')=0,所以把gamma(b)=0

 

判斷終點也是一樣的道理

 

這個就是在找下一個狀態s'的最大Q值 MaxQ(s')

 

而前面做了那麼多的動作就是為了下面公式的更新 new_Q(s,a)= oldQ(s,a) + alpha * (R(s,a,s')+ (gamma * MaxQ(s')) - oldQ)

假設剛剛從狀態 s 執行了a 動作 到 s' 得到 reward(s,a,s')

pre_position_x,pre_position_y就代表 s,

action 就代表 a

第二行代入Q learning 更新公式

第三行把算出的新Q value更新回q table中

 

顯示出每一回合跑了幾步

 

像這樣子,第一回合跑了89步,第二回合跑了15步,直到第八回合就收斂到最佳解6步了

 

你可以在最後看到機器人的最短路徑

 

當然你也可以運用matlab的debug 功能設置斷點,一步一步的觀察Q table的變動,以及機器人的移動模式,相信會明瞭許多

 

按run 然後按 F5 一次一次的跳到中斷點執行,當然你也可以F10一步一步的執行

 

matlab 右上角的workspace可以讓你很清楚看到數值的變化

 

 

每按一次F5就會有一張圖跑出來,這是S

 

這是下一個狀態s',0.47被更新成0.51了

 

 

這是收斂後的Q table,你可以仔細觀察它的數字已經不再變化了,也就是說已經達到最佳路徑了

 

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Darwin的AI天地 的頭像
    Darwin的AI天地

    我的小小AI 天地

    Darwin的AI天地 發表在 痞客邦 留言(4) 人氣()