一、简介
同动态规划方法不同,蒙特卡洛方法不假设需要拥有完备的环境知识(
p
(
s
′
,
r
∣
s
,
a
)
p(s',r|s,a)
p(s′,r∣s,a))。蒙特卡洛算法仅仅需要经验,即从真实环境或模拟环境中采样得到状态、动作、收益的序列。
蒙特卡洛算法通过平均样本的回报reward来解决强化学习问题。为了保证能够得到有良好定义的回报,这里只定义用于分幕式任务的蒙特卡洛算法。在分幕式任务中,我们假设一段经验可以被分为几个幕,并且无论采用怎样的动作处于怎样的状态,整个幕最后一定会走到终止。价值估计以及策略改进在整个幕终止时才进行。因此,蒙特卡洛算法是逐个幕做出改进的,而非每个幕中的每一步都有所改进。因此蒙特卡洛算法是逐幕做出改进的。
由于采取了某个动作之后的回报取决于在同一幕内后来的状态中采取的动作。由于所有动作的选择都在随时刻演进,而不间断地学习,所以从较早状态的视角来看,这个问题是非平稳的。为了处理其非平稳性,需要采用类似于动态规划中提到的广义策略迭代(GPI)的思想。即
π
0
→
v
π
0
→
π
1
→
v
π
1
→
.
.
.
→
π
∗
→
v
π
∗
\pi_{0} \rightarrow v_{\pi_{0}} \rightarrow \pi_{1} \rightarrow v_{\pi_{1}} \rightarrow ... \rightarrow \pi* \rightarrow v_{\pi*}
π0→vπ0→π1→vπ1→...→π∗→vπ∗
只不过,不同于动态规划的是,动态规划的每一次价值评估都是基于马尔可夫决策过程知识从而计算出价值;而蒙特卡洛是通过多次尝试来用经验平均来估算价值,而在策略更新的过程都是相似的。
二、蒙特卡洛预测
针对于某一特定的状态
s
s
s,我们要估计它的价值函数
v
π
(
s
)
v_{\pi}(s)
vπ(s),按照蒙特卡洛的做法就是做很多次尝试,然后对多幕的收益进行平均,从而得出在策略
π
\pi
π下的状态收益
v
π
(
s
)
v_{\pi}(s)
vπ(s)。但是在一幕序列中,有可能出现多次状态
s
s
s,所以,对于这种情况的处理就分成了两个派别:首次访问型蒙特卡洛(Monte Carlo MC)算法和多次访问型MC算法。顾名思义,首次访问型MC算法就是每一幕的收益只算该状态出现的第一次;多次访问就是需要使用所有访问的平均值。首次访问型预测算法的大概流程如下:
输入:待评估的策略
π
\pi
π
初始化:
对所有
s
∈
S
s\in S
s∈S,任意初始化
V
(
s
)
∈
R
V(s) \in R
V(s)∈R
对所有
s
∈
S
s\in S
s∈S,
R
e
t
u
r
n
(
s
)
←
空列表
Return(s) \leftarrow 空列表
Return(s)←空列表
无限循环(对每幕):
根据
π
\pi
π生成一幕序列:
S
0
,
A
0
,
R
1
,
S
1
,
A
1
,
R
2
,
.
.
.
,
S
T
−
1
,
A
T
−
1
,
R
T
S_{0},A_{0},R_{1},S_{1},A_{1},R_{2},...,S_{T-1},A_{T-1},R_{T}
S0,A0,R1,S1,A1,R2,...,ST−1,AT−1,RT
G
←
γ
G
+
R
t
+
1
G \leftarrow \gamma G+R_{t+1}
G←γG+Rt+1
除非
S
t
S_{t}
St在
S
0
,
S
1
,
.
.
.
,
S
t
−
1
S_{0},S_{1},...,S_{t-1}
S0,S1,...,St−1中出现过:
将
G
G
G加入到
R
e
t
u
r
n
(
S
t
)
Return(S_{t})
Return(St)
V
(
S
t
)
←
a
v
e
r
a
g
e
(
R
e
t
u
r
n
(
S
t
)
)
V(S_{t}) \leftarrow average(Return(S_{t}))
V(St)←average(Return(St))
三、动作价值的蒙特卡洛估计
在没有模型的情况下,仅仅有状态价值函数是不够的。我们必须通过现实地确定每个动作的函数来确定一个策略。动作价值函数的策略评估问题的目标就是估计
q
π
(
s
,
a
)
q_{\pi}(s,a)
qπ(s,a),即在策略
π
\pi
π下从状态
s
s
s采取动作
a
a
a的期望回报。只需将对状态的访问改为对“状态-动作”的二元组的访问,蒙特卡洛方法就可以用几乎和之前一样的方式来解决问题。
唯一存在的问题就是,一些“状态-动作”二元组可能永远不会被访问到。如果
π
\pi
π是一个确定性的策略,那么遵循
π
\pi
π意味着在每一个状态只会观测到一个动作的回报。解决这个问题的思路是将指定的“状态-动作”二元组作为起点开始一幕采样,同时保证所有“状态-动作”二元组都有非零概率可以被选为起点。这样就保证在采样的幕的个数趋于无穷的时候,每一个“状态-动作”二元组都会被访问到无数次。我们将这种假设称为试探性假设。
四、蒙特卡洛控制
现在已经可以考虑如何使用蒙特卡洛估计来解决控制问题了,即如何近似最优的策略。基本思想是采用广义策略迭代(GPI)。近似于动态规划的策略迭代,蒙特卡洛算法的策略迭代只是将状态价值改为动作价值:
π
0
→
q
π
0
→
π
1
→
q
π
1
→
.
.
.
→
π
∗
→
q
π
∗
\pi_{0} \rightarrow q_{\pi_{0}} \rightarrow \pi_{1} \rightarrow q_{\pi_{1}} \rightarrow ... \rightarrow \pi* \rightarrow q_{\pi*}
π0→qπ0→π1→qπ1→...→π∗→qπ∗
下面给出经典的试探性出发蒙特卡洛迭代算法:
- 初始化:
对所有 s ∈ S s \in S s∈S,任意初始化 π ( s ) ∈ A ( s ) \pi(s) \in A(s) π(s)∈A(s)
对所有 s ∈ S , a ∈ A ( s ) s \in S,a \in A(s) s∈S,a∈A(s),任意初始化 Q ( s , a ) ∈ R Q(s,a) \in R Q(s,a)∈R
对所有 s ∈ S , a ∈ A ( s ) s \in S,a \in A(s) s∈S,a∈A(s), R e t u r n ( s , a ) ← 空列表 Return(s,a) \leftarrow 空列表 Return(s,a)←空列表 - 无限循环(对每一幕):
选择 S 0 ∈ S 和 A 0 ∈ A ( S 0 ) S_{0} \in S 和 A_{0} \in A(S_{0}) S0∈S和A0∈A(S0)以使得所有“状态-动作”二元组的概率都>0
从 S 0 , A 0 S_{0},A_{0} S0,A0开始,根据 π \pi π生成一幕序列: S 0 , A 0 , R 1 , S 1 , A 1 , R 2 , . . . , S T − 1 , A T − 1 , R T S_{0},A_{0},R_{1},S_{1},A_{1},R_{2},...,S_{T-1},A_{T-1},R_{T} S0,A0,R1,S1,A1,R2,...,ST−1,AT−1,RT
G ← 0 G \leftarrow 0 G←0
对幕中的每一步进行循环, t = T − 1 , T − 2 , . . . , 0 t=T-1,T-2,...,0 t=T−1,T−2,...,0:
G ← γ G + R t + 1 G \leftarrow \gamma G+R_{t+1} G←γG+Rt+1
除非二元组 S t , A t S_{t},A_{t} St,At在 S 0 , A 0 , R 1 , S 1 , A 1 , R 2 , . . . , S t − 1 , A t − 1 S_{0},A_{0},R_{1},S_{1},A_{1},R_{2},...,S_{t-1},A_{t-1} S0,A0,R1,S1,A1,R2,...,St−1,At−1中已经出现过:
将 G G G加入到 R e t u r n ( S t , A t ) Return(S_{t},A_{t}) Return(St,At)
Q ( S t , A t ) ← a v e r a g e ( R e t u r n ( S t , A t ) ) Q(S_{t},A_{t}) \leftarrow average(Return(S_{t},A_{t})) Q(St,At)←average(Return(St,At))
π ( S t ) ← a r g m a x a Q ( S t , a ) \pi (S_{t}) \leftarrow argmax_{a}Q(S_{t},a) π(St)←argmaxaQ(St,a)
五、无试探性出发假设的蒙特卡洛控制
如何避免试探性出发的假设呢?一般性的解决方法就是不断选择所有可能的动作。有两种方法可以保证这一点,分别称为离轨策略和同轨策略。区别在于,同轨策略中,用于生成采样数据的策略和用于实际决策的待评估的策略是相同的,而离轨策略是不同的。
(一)、同轨策略
同轨策略方法中,策略一般是“软性”的。即对于任意的 s ∈ S 和 a ∈ A s \in S 和a \in A s∈S和a∈A都有 π ( s ∣ a ) > 0 \pi (s|a)>0 π(s∣a)>0,但是会渐近地逼近一个确定的策略。比如一种叫 ε − 贪心策略 \varepsilon-贪心策略 ε−贪心策略,意思是在绝大多数情况都采取收益最大的动作价值函数所对应的动作,但每次选择都会以一个较小的概率 ε \varepsilon ε来随机选择一个动作。下面给出基于 ε − 贪心策略 \varepsilon-贪心策略 ε−贪心策略的同轨策略首次访问型MC控制算法:
- 算法参数:很小的 v a r e p s i l o n > 0 varepsilon>0 varepsilon>0
- 初始化:
π ← \pi \leftarrow π←一个任意的 ε − 软性策略 \varepsilon-软性策略 ε−软性策略
对所有 s ∈ S , a ∈ A ( s ) s \in S,a \in A(s) s∈S,a∈A(s),任意初始化 Q ( s , a ) ∈ R Q(s,a) \in R Q(s,a)∈R
对所有 s ∈ S , a ∈ A ( s ) , R e t u r n s ( s , a ) ← 空列表 s\in S,a \in A(s),Returns(s,a) \leftarrow 空列表 s∈S,a∈A(s),Returns(s,a)←空列表 - 无限循环(对每幕):
1.根据 π \pi π生成一幕序列: S 0 , A 0 , R 1 , S 1 , A 1 , R 2 , . . . , S T − 1 , A T − 1 , R T S_{0},A_{0},R_{1},S_{1},A_{1},R_{2},...,S_{T-1},A_{T-1},R_{T} S0,A0,R1,S1,A1,R2,...,ST−1,AT−1,RT
2. G ← 0 G \leftarrow 0 G←0
对幕中的每一步循环, t = T − 1 , T − 2 , . . . , 0 t=T-1,T-2,...,0 t=T−1,T−2,...,0:
G ← γ G + R t + 1 G \leftarrow \gamma G+R_{t+1} G←γG+Rt+1
除非“状态-动作”二元组 S t , A t S_{t},A_{t} St,At在 S 0 , A 0 , R 1 , S 1 , A 1 , R 2 , . . . , S t − 1 , A t − 1 S_{0},A_{0},R_{1},S_{1},A_{1},R_{2},...,S_{t-1},A_{t-1} S0,A0,R1,S1,A1,R2,...,St−1,At−1已出现过:
把 G G G加入 R e t u r n ( S t , A t ) Return(S_{t},A_{t}) Return(St,At)
Q ( S t , A t ) ← a v e r a g e ( R e t u r n s ( S t , A t ) ) Q(S_{t},A_{t}) \leftarrow average(Returns(S_{t},A_{t})) Q(St,At)←average(Returns(St,At))
A ∗ ← a r g m a x a Q ( S t , a ) A* \leftarrow argmax_{a}Q(S_{t},a) A∗←argmaxaQ(St,a)
对于所有 a ∈ A ( S t ) a \in A(S_{t}) a∈A(St):
π ( a ∣ S t ) ← { 1 − ε + ε / ∣ A ( S t ) ∣ i f a = A ∗ ε / ∣ A ( S t ) ∣ a ≠ A ∗ \pi(a|S_{t}) \leftarrow \begin{cases}1-\varepsilon +\varepsilon/|A(S_{t})|& if a=A*\\\varepsilon/|A(S_{t})| & a \neq A*\end{cases} π(a∣St)←{1−ε+ε/∣A(St)∣ε/∣A(St)∣ifa=A∗a=A∗
(二)、离轨策略
所有的学习控制方法都面临一个困境:它们希望学到的动作可以使随后的智能体行为是最优的,但是为了搜索所有的动作(以保证找到最优动作),它们需要采取非最优的行动。对于上述的
ε
−
贪心策略
\varepsilon-贪心策略
ε−贪心策略,我们得到的并不是最优策略,而是近优策略,最后得到的状态价值
v
π
(
s
)
=
(
1
−
ε
)
m
a
x
a
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
v
π
(
s
′
)
]
+
ε
∣
A
(
s
)
∣
∑
a
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
v
π
(
s
′
)
]
v_{\pi}(s)=(1-\varepsilon)max_{a} \sum_{s',r}{p(s',r|s,a)[r+\gamma v_{\pi}(s')]}+\dfrac{\varepsilon}{|A(s)|}\sum_{a}\sum_{s',r}{{p(s',r|s,a)[r+\gamma v_{\pi}(s')]}}
vπ(s)=(1−ε)maxa∑s′,rp(s′,r∣s,a)[r+γvπ(s′)]+∣A(s)∣ε∑a∑s′,rp(s′,r∣s,a)[r+γvπ(s′)]。而离轨策略在数据经验采样和策略优化上完全使用两种策略。用来学习的策略被称为目标策略,用来生成行动样本的策略被称为行动策略。在这种情况下,我们认为学习所用的数据“离开”了待学习的目标策略,因此整个过程被称为离轨策略学习。
1.重要度采样
假设我们希望预测
v
π
v_{\pi}
vπ或者
q
π
q_{\pi}
qπ,但是采样策略要遵循另一个策略
b
b
b。在这种情况下,
π
\pi
π是目标策略,
b
b
b是行动策略。为了使用从
b
b
b得到的多幕样本序列去预测
π
\pi
π,我们需要在
π
\pi
π下发生的每个动作都有一定概率在
b
b
b下发生,即对任意
π
(
a
∣
s
)
>
0
\pi(a|s)>0
π(a∣s)>0,我们要求
b
(
a
∣
s
)
>
0
b(a|s)>0
b(a∣s)>0。我们称其为覆盖假设。
几乎所有离轨策略都会使用重要度采样。重要度采样是一种在给定其他分布的样本的条件下,估计某种分布的期望的通用方法。给定起始状态
S
t
S_{t}
St,后续的状态-动作轨迹为:
A
t
,
S
t
+
1
,
A
t
+
1
,
.
.
.
,
S
T
A_{t},S_{t+1},A_{t+1},...,S_{T}
At,St+1,At+1,...,ST在策略
π
\pi
π下发生的概率是
P
r
A
t
,
S
t
+
1
,
A
t
+
1
,
.
.
.
,
S
T
∣
S
t
,
A
t
:
T
−
1
∼
π
Pr{A_{t},S_{t+1},A_{t+1},...,S_{T}|S_{t},A_{t:T-1}\sim \pi}
PrAt,St+1,At+1,...,ST∣St,At:T−1∼π
=
π
(
A
t
∣
S
t
)
p
(
S
t
+
1
∣
S
t
,
A
t
)
π
(
A
t
+
1
∣
S
t
+
1
.
.
.
p
(
S
T
∣
S
T
−
1
,
A
T
−
1
)
)
=\pi(A_{t}|S_{t})p(S_{t+1}|S_{t},A_{t})\pi(A_{t+1}|S_{t+1}...p(S_{T}|S_{T-1},A_{T-1}))
=π(At∣St)p(St+1∣St,At)π(At+1∣St+1...p(ST∣ST−1,AT−1))
=
∏
k
=
t
T
−
1
π
(
A
k
∣
S
k
)
p
(
S
k
+
1
∣
S
k
,
A
k
)
=\prod\limits_{k=t}^{T-1}{\pi(A_{k}|S_{k})p(S_{k+1}|S_{k},A_{k})}
=k=t∏T−1π(Ak∣Sk)p(Sk+1∣Sk,Ak)。
在目标策略和行动策略轨迹下的相对概率(重要度采样比)是:
p
t
:
T
−
1
=
∏
k
=
t
T
−
1
π
(
A
k
∣
S
k
)
p
(
S
k
+
1
∣
S
k
,
A
k
)
∏
k
=
t
T
−
1
b
(
A
k
∣
S
k
)
p
(
S
k
+
1
∣
S
k
,
A
k
)
=
∏
k
=
t
T
−
1
π
(
A
k
∣
S
k
)
∏
k
=
t
T
−
1
b
(
A
k
∣
S
k
)
p_{t:T-1}=\frac{\prod\limits_{k=t}^{T-1}{\pi(A_{k}|S_{k})p(S_{k+1}|S_{k},A_{k})}}{\prod\limits_{k=t}^{T-1}{b(A_{k}|S_{k})p(S_{k+1}|S_{k},A_{k})}}=\frac{\prod\limits_{k=t}^{T-1}\pi(A_{k}|S_{k})}{\prod\limits_{k=t}^{T-1}b(A_{k}|S_{k})}
pt:T−1=k=t∏T−1b(Ak∣Sk)p(Sk+1∣Sk,Ak)k=t∏T−1π(Ak∣Sk)p(Sk+1∣Sk,Ak)=k=t∏T−1b(Ak∣Sk)k=t∏T−1π(Ak∣Sk)
使用比例系数
p
t
:
T
−
1
p_{t:T-1}
pt:T−1可以调整回报使其有正确的期望值
E
[
p
t
:
T
−
1
G
t
∣
S
t
=
s
]
=
v
π
(
s
)
E[p_{t:T-1}G_{t}|S_{t}=s]=v_{\pi}(s)
E[pt:T−1Gt∣St=s]=vπ(s),这是一幕的策略期望回报。在我们进行了多幕的采样后,需要对状态
s
s
s的策略价值进行评估,就需要根据重要度采样比来调整回报值并对结果进行平均即可:
V
(
s
)
=
∑
t
∈
T
(
s
)
p
t
:
T
(
t
)
−
1
G
t
∣
T
(
s
)
∣
V(s)=\dfrac{\sum_{t \in T(s)}{p_{t:T(t)-1}G_{t}}}{|T(s)|}
V(s)=∣T(s)∣∑t∈T(s)pt:T(t)−1Gt
另外一种重要的方法就是加权重要度采样:
V
(
s
)
=
∑
t
∈
T
(
s
)
p
t
:
T
(
t
)
−
1
G
t
∑
t
∈
T
(
s
)
p
t
:
T
(
t
)
−
1
V(s)=\dfrac{\sum_{t \in T(s)}{p_{t:T(t)-1}G_{t}}}{\sum_{t \in T(s)}{p_{_{t:T(t)-1}}}}
V(s)=∑t∈T(s)pt:T(t)−1∑t∈T(s)pt:T(t)−1Gt
2.增量式实现
假设我们有一个回报序列
G
1
,
G
2
,
.
.
.
,
G
n
−
1
G_{1},G_{2},...,G_{n-1}
G1,G2,...,Gn−1,它们都从相同的状态开始,且每一个回报都对应一个随机权重
W
i
W_{i}
Wi。我们希望得到一下估计,并且在获得了一个额外的回报值
G
n
G_{n}
Gn时能够保持更新。
V
n
=
∑
k
=
1
n
−
1
W
k
G
k
∑
k
=
1
n
=
1
W
k
,
n
≥
2
V_{n}=\frac{\sum_{k=1}^{n-1}W_{k}G_{k}}{\sum_{k=1}^{n=1}{W_{k}}},n \ge 2
Vn=∑k=1n=1Wk∑k=1n−1WkGk,n≥2.为了能不断跟踪
V
n
V_{n}
Vn的变化,必须为每一个状态维护前
n
n
n个回报对应的权值的累加和
C
n
C_{n}
Cn.
V
n
V_{n}
Vn的更新方法是:
V
n
+
1
=
V
n
+
W
n
C
n
[
G
n
−
V
n
]
,
n
≥
1
V_{n+1}=V_{n}+\frac{W_{n}}{C_{n}}[G_{n}-V_{n}],n\ge 1
Vn+1=Vn+CnWn[Gn−Vn],n≥1
以及
C
n
+
1
=
C
n
+
W
n
+
1
C_{n+1}=C_{n}+W_{n+1}
Cn+1=Cn+Wn+1,其中
C
0
=
0
C_{0}=0
C0=0
离轨策略MC预测算法策略评估,用于估计
Q
≈
q
π
Q\approx q_{\pi}
Q≈qπ:
- 输入:一个任意的目标策略 π \pi π
- 初始化,对所有
s
∈
S
,
a
∈
A
(
s
)
s \in S,a \in A(s)
s∈S,a∈A(s):
任意初始化 Q ( s , a ) ∈ R Q(s,a) \in R Q(s,a)∈R
C ( s , a ) ← 0 C(s,a) \leftarrow 0 C(s,a)←0
无限循环(对每幕):
b ← b \leftarrow b←任何能包括 π \pi π的策略
根据 b b b生成一幕序列: S 0 , A 0 , R 1 , S 1 , A 1 , R 2 , . . . , S T − 1 , A T − 1 , R T S_{0},A_{0},R_{1},S_{1},A_{1},R_{2},...,S_{T-1},A_{T-1},R_{T} S0,A0,R1,S1,A1,R2,...,ST−1,AT−1,RT
G ← 0 G \leftarrow 0 G←0
W ← 1 W \leftarrow 1 W←1
对幕中每一步的循环, t = T − 1 , T − 2 , . . . , 0 t=T-1,T-2,...,0 t=T−1,T−2,...,0,当 W ≠ 0 W \neq 0 W=0时:
G ← γ G + R t + 1 G \leftarrow \gamma G+R_{t+1} G←γG+Rt+1
C ( S t , A t ) ← C ( S t , A t ) + W C(S_{t},A_{t}) \leftarrow C(S_{t},A_{t})+W C(St,At)←C(St,At)+W
Q ( S t , A t ) ← Q ( S t , A t ) + W C ( S t , A t ) [ G − Q ( S t , A t ) ] Q(S_{t},A_{t}) \leftarrow Q(S_{t},A_{t})+\frac{W}{C(S_{t},A_{t})}[G-Q(S_{t},A_{t})] Q(St,At)←Q(St,At)+C(St,At)W[G−Q(St,At)]
W ← W π ( A t ∣ S t ) b ( A t ∣ S t ) W \leftarrow W \frac{\pi(A_{t}|S_{t})}{b(A_{t}|S_{t})} W←Wb(At∣St)π(At∣St)
如果 W = 0 W=0 W=0,则推出内循环
3.离轨策略蒙特卡洛控制
离轨策略MC控制算法,用于估计 π ≈ π ∗ \pi \approx \pi* π≈π∗
- 初始化,对所有
s
∈
S
,
a
∈
A
(
s
)
s \in S,a \in A(s)
s∈S,a∈A(s)
任意初始化 Q ( s , a ) ∈ R Q(s,a) \in R Q(s,a)∈R
C ( s , a ) ← 0 C(s,a) \leftarrow 0 C(s,a)←0
π ( s ) ← a r g m a x a Q ( s , a ) \pi(s) \leftarrow argmax_{a}Q(s,a) π(s)←argmaxaQ(s,a)
无限循环(对每幕):
b ← b \leftarrow b←任何能包括 π \pi π的策略
根据 b b b生成一幕序列: S 0 , A 0 , R 1 , S 1 , A 1 , R 2 , . . . , S T − 1 , A T − 1 , R T S_{0},A_{0},R_{1},S_{1},A_{1},R_{2},...,S_{T-1},A_{T-1},R_{T} S0,A0,R1,S1,A1,R2,...,ST−1,AT−1,RT
G ← 0 G \leftarrow 0 G←0
W ← 1 W \leftarrow 1 W←1
对幕中每一步的循环, t = T − 1 , T − 2 , . . . , 0 t=T-1,T-2,...,0 t=T−1,T−2,...,0,当 W ≠ 0 W \neq 0 W=0时:
G ← γ G + R t + 1 G \leftarrow \gamma G+R_{t+1} G←γG+Rt+1
C ( S t , A t ) ← C ( S t , A t ) + W C(S_{t},A_{t}) \leftarrow C(S_{t},A_{t})+W C(St,At)←C(St,At)+W
Q ( S t , A t ) ← Q ( S t , A t ) + W C ( S t , A t ) [ G − Q ( S t , A t ) ] Q(S_{t},A_{t}) \leftarrow Q(S_{t},A_{t})+\frac{W}{C(S_{t},A_{t})}[G-Q(S_{t},A_{t})] Q(St,At)←Q(St,At)+C(St,At)W[G−Q(St,At)]
π ( S t ← a r g m a x a Q ( S t , a ) ) \pi(S_{t} \leftarrow argmax_{a}Q(S_{t},a)) π(St←argmaxaQ(St,a))
如果 A t ≠ π ( S t ) A_{t} \neq \pi(S_{t}) At=π(St)那么退出内层循环
W ← W 1 b ( A t ∣ S t ) W \leftarrow W \frac{1}{b(A_{t}|S_{t})} W←Wb(At∣St)1