強化學習 Q-learning 及python實現


Q-learning是強化學習中一種經典的無監督學習方法,通過與環境交互來指導學習;

大部分強化學習都是基於馬爾科夫決策(MDP)的。MDP是一個框架,而Q學習是應用了這種框架的一個具體的學習方法。

 

Q學習的四要素:(agent,狀態 s,動作 a,獎勵 r)

簡而言之,agent從當前狀態選擇一個動作,轉移至一個新的狀態,這個過程會獲得一個即時獎勵 r,agent再據此更新動作值函數Q,並將Q值儲存在Q表中。

這里關鍵的有一個即時獎勵矩陣R,和一個存儲動作值函數值的Q表;兩個表都是二維,行表示狀態,列表示動作;

 

Q學習中的Q值更新函數(其實基於MDP中的值函數):

 

α:學習速率; γ:折扣因子 ,表示對未來獎勵的重視程度;

不過我個人而言,常用α=1的情況,因為α的值對於算法對比和優化的效果差別不大(在迭代次數足夠多的情況下);

 

一下這個小例子用的是動態規划的方法迭代計算Q,因為模型已知;模型未知的情況常采用蒙特卡洛算法 & 時序差分算法(TD,常用)

簡單的一個迷宮例子就是這個走迷宮了~從任意狀態開始,走到房間5就算成功了~

  

 

python實現Q學習走迷宮:

 1 # an example for maze using qlearning, two dimension
 2 import numpy as np
 3 
 4 # reward matrix R
 5 R = np.array([[-1, -1, -1, -1, 0, -1], [-1, -1, -1, 0, -1, 100],
 6      [-1, -1, -1, 0, -1, -1], [-1, 0, 0, -1, 0, -1],
 7      [0, -1, -1, 0, -1, 100], [-1, 0, -1, -1, 0, 100]])
 8 
 9 Q = np.zeros((6, 6), float)
10 gamma = 0.8    # discount factor
11 
12 episode = 0
13 while episode < 1000:
14      state = np.random.randint(0, 6)    # from a random start state
15      for action in range(6):
16           if R[state, action] > -1:
17                Q[state, action] = R[state, action] + gamma*max(Q[action])  # this time, action is the next state
18      episode = episode + 1
19 
20 print(Q)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM