演算法如下:
相比q-learning而言,sarsa會比較膽小,不希望自己掉進陷阱裡,從而做出的決策都比較謹慎;而q-learning會選擇一條雖然比較危險但是可以成功的道路
# off-policy
class
qlearningtable
(rl)
:def
__init__
(self, actions, learning_rate=
0.01
, reward_decay=
0.9, e_greedy=
0.9)
:super
(qlearningtable, self)
.__init__(actions, learning_rate, reward_decay, e_greedy)
deflearn
(self, s, a, r, s_)
: self.check_state_exist(s_)
q_predict = self.q_table.loc[s, a]
if s_ !=
'terminal'
: q_target = r + self.gamma * self.q_table.loc[s_,:]
.max()
# next state is not terminal
else
: q_target = r # next state is terminal
self.q_table.loc[s, a]
+= self.lr *
(q_target - q_predict)
# update
# on-policy
class
sarsatable
(rl)
:def
__init__
(self, actions, learning_rate=
0.01
, reward_decay=
0.9, e_greedy=
0.9)
:super
(sarsatable, self)
.__init__(actions, learning_rate, reward_decay, e_greedy)
deflearn
(self, s, a, r, s_, a_)
: self.check_state_exist(s_)
q_predict = self.q_table.loc[s, a]
if s_ !=
'terminal'
: q_target = r + self.gamma * self.q_table.loc[s_, a_]
# next state is not terminal
else
: q_target = r # next state is terminal
self.q_table.loc[s, a]
+= self.lr *
(q_target - q_predict)
# update
對比而言,其中比較重要的有兩行
# q-learning
q_target = r + self.gamma * self.q_table.loc[s_,:]
.max()
# next state is not terminal
# sarsa
q_target = r + self.gamma * self.q_table.loc[s_, a_]
# next state is not terminal
q-learning只是選擇了針對下乙個狀態的最好的action納入考慮範圍,然後做差值。而sarsa提前選擇好了下乙個環境所對應的action來進行差值
其中的λ
\lambda
λ是指距離最終目的地的步伐的重視程度,如果其值為0那麼就認為每一次更新都是相對來說和目的地沒有關聯的,而其值為1的時候則認為每一次更新都是在考慮了目的地的更新
**方面,則新新增了乙個矩陣作為更新的「不可或缺性參考」
# 其內容為q_table的複製
self.eligibility_trace = self.q_table.copy(
)# method 1:若選擇了這個行為,則相對應的矩陣內容進行+1操作,這樣容易導致後面數值過大
self.eligibility_trace.loc[s, a]+=1
# method 2:若選擇了這個行為,則將對應的行內容進行歸零並將選擇的動作列進行賦值為1操作
self.eligibility_trace.loc[s,:]
*=0self.eligibility_trace.loc[s, a]=1
# q update 更新的時候也要將誤差放大相應的倍數
self.q_table += self.lr * error * self.eligibility_trace
# decay eligibility trace after update
self.eligibility_trace *= self.gamma*self.lambda_
強化學習 強化學習基礎
為了應對車載網路中通訊環境快速變化的難題,可以使用強化學習進行解決,這裡對強化學習的基礎進行整理。主要的應用場景為車載網路中資源分配問題。本文源自莫煩python 強化學習章節,有需要請查閱原文 20200413補充了一些內容,來自這篇部落格,是李巨集毅的深度強化學習的筆記。強化學習的主要構成有 a...
強化學習 1 1 0 強化學習介紹
abstract 本文介紹reinforcement learning的具體特點和與其他機器學習演算法不同之處,本文是乙個骨架性的文章,所有專有名詞都保持英文原始單詞,具體內容會在後續中給出詳細解答。keywords reinforcement learning,situation,action,e...
強化學習系列1 強化學習簡介
2015年10月,alphago在和歐洲冠軍進行的圍棋賽上獲得了5 0的完勝,其後的深度強化學習也隨之火了起來。從本期開始開個新坑,一步步把強化學習的內容捋一遍。強化學習 reinforcement learning 是用來解決連續決策問題的一種方法。針對的模型是馬爾科夫決策過程 markov de...