強化學習Sarsa

2021-09-11 03:28:21 字數 2773 閱讀 2842

演算法如下:

相比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...