文章目錄
- Q-learning原理
- python例子
本文是作者在學習莫煩的強化學習課程中的筆記,強烈推薦 莫煩強化學習。
Q-learning原理
我們以一個走迷宮的小游戲為例:讓探索者學會走迷宮. 黃色的是天堂 (reward 1), 黑色的地獄 (reward -1). 大多數 RL 是由 reward 導向的, 所以定義 reward 是 RL 中比較重要的一點.
Q-learning原理實際上就是建立一個Q表(最本文最后有展示),里面包含所有狀態下、不同動作的Q值(最終根據Q值走出迷宮),Q-learning通過不斷嘗試每個回合、每一步,不斷的更新Q表,最終達到最優的狀態。
整個算法就是一直不斷更新 Q table 里的值, 然后再根據新的值來判斷要在某個 state 采取怎樣的 action. Qlearning 是一個 off-policy 的算法, 因為里面的 max action 讓 Q table 的更新可以不基于正在經歷的經驗(可以是現在學習著很久以前的經驗,甚至是學習他人的經驗). 不過這一次的例子, 我們沒有運用到 off-policy, 而是把 Qlearning 用在了 on-policy 上, 也就是現學現賣, 將現在經歷的直接當場學習并運用. On-policy 和 off-policy 的差別我們會在之后的 Deep Q network (off-policy) 學習中見識到. 而之后的教程也會講到一個 on-policy (Sarsa) 的形式, 我們之后再對比。
python例子
首先我們先 import 兩個模塊, maze_env 是我們的環境模塊, 已經編寫好了, 大家可以直接在這里下載, maze_env 模塊我們可以不深入研究, 如果你對編輯環境感興趣, 可以去看看如何使用 python 自帶的簡單 GUI 模塊 tkinter 來編寫虛擬環境. maze_env 就是用 tkinter 編寫的. 而 RL_brain 這個模塊是 RL 的大腦部分.
from
maze_env
import
Maze
from
RL_brain
import
QLearningTable
下面的代碼, 我們可以根據上面的圖片中的算法對應起來, 這就是整個 Qlearning 最重要的迭代更新部分啦.
def
update
(
)
:
# 學習 100 回合
for
episode
in
range
(
100
)
:
# 初始化 state 的觀測值
observation
=
env
.
reset
(
)
while
True
:
# 更新可視化環境
env
.
render
(
)
# RL 大腦根據 state 的觀測值挑選 action
action
=
RL
.
choose_action
(
str
(
observation
)
)
# 探索者在環境中實施這個 action, 并得到環境返回的下一個 state 觀測值, reward 和 done (是否是掉下地獄或者升上天堂)
observation_
,
reward
,
done
=
env
.
step
(
action
)
# RL 從這個序列 (state, action, reward, state_) 中學習
RL
.
learn
(
str
(
observation
)
,
action
,
reward
,
str
(
observation_
)
)
# 將下一個 state 的值傳到下一次循環
observation
=
observation_
# 如果掉下地獄或者升上天堂, 這回合就結束了
if
done
:
break
# 結束游戲并關閉窗口
print
(
'game over'
)
env
.
destroy
(
)
if
__name__
==
"__main__"
:
# 定義環境 env 和 RL 方式
env
=
Maze
(
)
RL
=
QLearningTable
(
actions
=
list
(
range
(
env
.
n_actions
)
)
)
# 開始可視化環境 env
env
.
after
(
100
,
update
)
env
.
mainloop
(
)
迷宮中各個狀態的位置:
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
