- 目录
- 回顾:基于离轨策略的蒙特卡洛策略评估
- 蒙特卡洛中的增量式计算
- 全量更新方式的问题
- 经典增量更新计算
- 基于蒙特卡洛方法的增量更新计算
- 基于离轨策略的蒙特卡洛控制
- 离轨策略蒙特卡洛控制算法的弊端
上一节介绍了离轨策略使用重要性采样方法对价值函数的求解过程,本节将介绍使用离轨策略方法求解蒙特卡洛控制过程。
回顾:基于离轨策略的蒙特卡洛策略评估针对离轨策略行为策略 b ( a ∣ s ) b(a \mid s) b(a∣s)与目标策略 π ( a ∣ s ) \pi(a \mid s) π(a∣s)无必然联系——使用重要性采样方法将两种策略的期望关联起来。这里以加权重要性采样 为例,近似求解状态价值函数 V π ( s ) V_\pi(s) Vπ(s)结果如下: V π ( s ) = E π [ G t ∣ S t = s ] = E b [ ρ t : T − 1 G t ∣ S t = s ] ≈ ∑ i = 1 N ρ t : T − 1 G t ( i ) ∑ i = 1 N ρ t : T − 1 \begin{aligned} V_\pi(s) & = \mathbb E_\pi[G_t \mid S_t = s] \\ & = \mathbb E_b[\rho_{t:T-1}G_t \mid S_t = s] \\ & \approx \frac{\sum_{i=1}^N \rho_{t:T-1}G_t^{(i)}}{\sum_{i=1}^N \rho_{t:T-1}} \end{aligned} Vπ(s)=Eπ[Gt∣St=s]=Eb[ρt:T−1Gt∣St=s]≈∑i=1Nρt:T−1∑i=1Nρt:T−1Gt(i) 其中: ρ t : T − 1 = ∏ k = t T − 1 π ( A k ∣ S k ) b ( A k ∣ S k ) \rho_{t:T-1} = \prod_{k = t}^{T-1}\frac{\pi(A_k \mid S_k)}{b(A_k \mid S_k)} ρt:T−1=k=t∏T−1b(Ak∣Sk)π(Ak∣Sk)
并且在基于离轨策略的蒙特卡洛策略评估中介绍了采样的具体流程:
- 基于给定的行为策略 b ( a ∣ s ) b(a \mid s) b(a∣s)和目标策略 π ( a ∣ s ) \pi(a \mid s) π(a∣s),(对应矩阵元素相除)求出 π ( a ∣ s ) b ( a ∣ s ) \frac{\pi(a \mid s)}{b(a \mid s)} b(a∣s)π(a∣s)(也是矩阵形式);
- 针对某一完整情节(已达到终结状态 S T S_T ST),从 t t t时刻开始,根据各时刻的状态-动作二元组在 π ( a ∣ s ) b ( a ∣ s ) \frac{\pi(a \mid s)}{b(a \mid s)} b(a∣s)π(a∣s)矩阵中进行查找——求出各时刻的 π ( A k ∣ S k ) b ( A k ∣ S k ) \frac{\pi(A_k \mid S_k)}{b(A_k \mid S_k)} b(Ak∣Sk)π(Ak∣Sk)结果; π ( A t ∣ S t ) b ( A t ∣ S t ) , π ( A t + 1 ∣ S t + 1 ) b ( A t + 1 ∣ S t + 1 ) , . . . , π ( A T − 1 ∣ S T − 1 ) b ( A T − 1 ∣ S T − 1 ) \frac{\pi(A_t \mid S_t)}{b(A_t \mid S_t)},\frac{\pi(A_{t+1} \mid S_{t+1})}{b(A_{t+1} \mid S_{t+1})},...,\frac{\pi(A_{T-1} \mid S_{T-1})}{b(A_{T-1} \mid S_{T-1})} b(At∣St)π(At∣St),b(At+1∣St+1)π(At+1∣St+1),...,b(AT−1∣ST−1)π(AT−1∣ST−1)
- 根据上一步骤的结果,求出重要度系数 ρ t : T − 1 \rho_{t:T-1} ρt:T−1: ρ t : T − 1 = ∏ k = t T − 1 π ( A k ∣ S k ) b ( A k ∣ S k ) = π ( A t ∣ S t ) b ( A t ∣ S t ) ⋅ π ( A t + 1 ∣ S t + 1 ) b ( A t + 1 ∣ S t + 1 ) ⋅ . . . ⋅ π ( A T − 1 ∣ S T − 1 ) b ( A T − 1 ∣ S T − 1 ) \begin{aligned} \rho_{t:T-1} & = \prod_{k = t}^{T-1}\frac{\pi(A_k \mid S_k)}{b(A_k \mid S_k)} \\ & = \frac{\pi(A_t \mid S_t)}{b(A_t \mid S_t)}\cdot \frac{\pi(A_{t+1} \mid S_{t+1})}{b(A_{t+1} \mid S_{t+1})}\cdot...\cdot \frac{\pi(A_{T-1} \mid S_{T-1})}{b(A_{T-1} \mid S_{T-1})} \end{aligned} ρt:T−1=k=t∏T−1b(Ak∣Sk)π(Ak∣Sk)=b(At∣St)π(At∣St)⋅b(At+1∣St+1)π(At+1∣St+1)⋅...⋅b(AT−1∣ST−1)π(AT−1∣ST−1)
- 根据完整情节计算 t t t时刻的回报结果 G t G_t Gt,并计算 ρ t : T − 1 G t \rho_{t:T-1}G_t ρt:T−1Gt,该结果即该情节中 t t t时刻状态 S t = s S_t = s St=s的一个样本;
以首次访问型为例,每个情节只能选择 0-1个样本(有的情节可能不存在某时刻状态为 s s s的情况),只要攒够足够多的样本(比样本量更多的情节)即可使用蒙特卡洛方法获取状态 s s s的价值函数。
蒙特卡洛中的增量式计算 全量更新方式的问题根据回顾中对某一状态 s s s的样本收集过程中发现,如果想要得到某一状态的价值函数结果,使用常规方式(全量更新方式)需要攒够足够多的样本求平均值。这种做法存在很多问题;
- 策略评估中的每次迭代过程都需要足够多的情节来获取各状态对应的样本,这使得 更新过程效率极慢;
- 针对每一个情节计算 ρ t : T − 1 G t \rho_{t:T-1}G_t ρt:T−1Gt后,需要将计算结果存储在内存当中(类似哈希表形式) → \to → 中间过程占用存储空间;
- 即便已经获得足够多的 ρ t : T − 1 G t \rho_{t:T-1}G_t ρt:T−1Gt作为 S t S_t St的样本,但使用全量更新方式求解均值,无法了解该结果是否是准确的(无法得到 均值的变化过程)。
在强化学习之SARSA中使用举例的方式简单介绍了全量更新和增量更新的比对过程: 已知一个数列 [ 3 , 4 , 5 ] [3,4,5] [3,4,5],计算该数列的平均值:
- 全量更新方式(常规均值求解方法): m e a n = 3 + 4 + 5 3 = 4 mean = \frac{3+4+5}{3} = 4 mean=33+4+5=4
- 增量更新方式(迭代求解均值方法): u 1 = 3 u 2 = u 1 + 1 2 ( 4 − u 1 ) = 3.5 u 3 = u 2 + 1 3 ( 5 − u 2 ) = 4 \begin{aligned} u_1 & = 3 \\ u_2 & = u_1 + \frac{1}{2}(4 - u_1) = 3.5 \\ u_3 & = u_2 + \frac{1}{3}(5 - u_2) = 4 \end{aligned} u1u2u3=3=u1+21(4−u1)=3.5=u2+31(5−u2)=4
相比于全量更新方法,增量更新方法更关注每个新加入元素对当前均值结果的变化情况。
- 增量更新可看作是从全量更新 分解出的若干个步骤 组成的 变化过程——每个步骤相当于一个情节的 ρ t : T − 1 G t \rho_{t:T-1}G_t ρt:T−1Gt输入后的均值结果;
- 当这个变化过程趋于稳定,意味着状态价值函数 V π ( s ) V_\pi(s) Vπ(s)收敛到最优结果。
- 每个步骤的计算结束后,可以将该步骤的 ρ t : T − 1 G t \rho_{t:T-1}G_t ρt:T−1Gt直接释放 → \to → 节约 存储空间。
增量式更新推导过程如下所示: u k = 1 k ∑ i = 1 k x i = 1 k ( x k + ∑ i = 1 k − 1 x i ) = 1 k ( x k + ( k − 1 ) u k − 1 ) = u k − 1 + 1 k ( x k − u k − 1 ) \begin{aligned} u_k & = \frac{1}{k} \sum_{i = 1}^kx_i \\ & = \frac{1}{k}(x_k + \sum_{i = 1}^{k-1}x_i) \\ & = \frac{1}{k}(x_k + (k - 1)u_{k-1}) \\ & = u_{k-1} + \frac{1}{k}(x_k - u_{k-1}) \end{aligned} uk=k1i=1∑kxi=k1(xk+i=1∑k−1xi)=k1(xk+(k−1)uk−1)=uk−1+k1(xk−uk−1) 根据增量更新公式的规律,可以构建经典增量更新公式。公式框架如下: N e w E s t i m a t e ← O l d E s t i m a t e + S t e p ( T a r g e t − O l d E s t i m a t e ) NewEstimate \gets OldEstimate + Step(Target - OldEstimate) NewEstimate←OldEstimate+Step(Target−OldEstimate) 经典增量更新的思想:
- 在给出目标值( T a r g e t Target Target)后,原始估计值( O l d E s t i m a t e OldEstimate OldEstimate)随着 T a r g e t Target Target影响而 向该方向移动,得到新的估计值( N e w E s t i m a t e NewEstimate NewEstimate);
- 随着目标值( T a r g e t Target Target)增多, N e w E s t i m a t e NewEstimate NewEstimate逐步稳定在某一位置/范围,称该位置为 真实目标值。
- 这种方法拆分了均值的求解过程,减少了存储消耗,并简化了计算过程。
这里想到一个词——递归,做一个小程序模拟一下~(返回结果5.5)
def lal(num):
if num == 1:
return 1
else:
return lal(num - 1) + (1 / num) * (num - lal(num - 1))
print(lal(10))
基于蒙特卡洛方法的增量更新计算
用一个示例描述带权重的增量式计算过程: 假设一组数列: X = [ 3 , 4 , 5 ] X = [3,4,5] X=[3,4,5],各元素对应权重: W = [ 1 , 5 , 4 ] W = [1,5,4] W=[1,5,4]; 计算该数列的加权平均结果(直接使用全量更新): m e a n = 3 × 1 + 4 × 5 + 5 × 4 1 + 5 + 4 = 4.3 mean = \frac{3 \times 1 + 4 \times 5 + 5 \times 4}{1 + 5 + 4} = 4.3 mean=1+5+43×1+4×5+5×4=4.3 此时,数列 X X X获取了一个新的元素:10,对应 W W W也相应得到一个新的权重:10;
- 使用全量更新计算过程: m e a n ′ = 3 × 1 + 4 × 5 + 5 × 4 + 10 × 10 1 + 5 + 4 + 10 = 7.15 mean' = \frac{3 \times 1 + 4 \times 5 + 5 \times 4 + 10 \times 10}{1 + 5 + 4 + 10} = 7.15 mean′=1+5+4+103×1+4×5+5×4+10×10=7.15
- 使用增量更新(最后一步)计算过程: 已知获取新元素之前的权重和: w ′ = 1 + 5 + 4 = 10 w' = 1 + 5 + 4 = 10 w′=1+5+4=10 计算获取新元素之后的均值结果: m e a n ′ = m e a n + 10 10 + w ′ ( 10 − m e a n ) = 4.3 + 10 10 + 10 ( 10 − 4.3 ) = 7.15 \begin{aligned} mean' & = mean + \frac{10}{10 + w'}(10 - mean) \\ & = 4.3 + \frac{10}{10 + 10}(10 - 4.3) \\ & = 7.15 \end{aligned} mean′=mean+10+w′10(10−mean)=4.3+10+1010(10−4.3)=7.15
蒙特卡洛方法的增量更新计算表示如下:
- 普通重要性采样——由于不涉及权重变化,普通重要性采样的增量更新公式和经典增量式计算公式基本一致: V ( s ) ← V ( s ) + α [ W G − V ( s ) ] V(s) \gets V(s) + \alpha[WG - V(s)] V(s)←V(s)+α[WG−V(s)]
- 加权重要性采样——基于上述示例,首先计算前 n n n次迭代过程中回报的累积权重 C n C_n Cn: C n = ∑ k = 1 n W k C_n = \sum_{k=1}^nW_k Cn=k=1∑nWk 每次迭代,添加新样本对应的权重: C n + 1 ← C n + W n + 1 ( C 0 = 0 ) C_{n+1} \gets C_n + W_{n+1} (C_0 = 0) Cn+1←Cn+Wn+1(C0=0) 由此得到状态价值函数 V n + 1 V_{n+1} Vn+1的更新递归公式为: V n + 1 ← V n + W n + 1 C n + 1 ( G n + 1 − V n ) ( n ≥ 1 ) V_{n+1} \gets V_{n} + \frac{W_{n+1}}{C_{n+1}}(G_{n+1} - V_n)(n \geq 1) Vn+1←Vn+Cn+1Wn+1(Gn+1−Vn)(n≥1)
基于上述结论,状态-动作价值函数 Q Q Q使用如下方式表示: Q n + 1 ← Q n + W n + 1 C n + 1 ( G n + 1 − Q n ) ( n ≥ 1 ) Q_{n+1} \gets Q_n + \frac{W_{n+1}}{C_{n+1}}(G_{n+1} - Q_n)(n \geq 1) Qn+1←Qn+Cn+1Wn+1(Gn+1−Qn)(n≥1)
观察算法,如何使用增量式更新方法实现基于离轨策略的蒙特卡洛控制。
算法基于离轨策略的蒙特卡洛控制算法初始化操作(Initialization operation)1. 对 ∀ s ∈ S , a ∈ A ( s ) \forall s \in \mathcal S,a \in \mathcal A(s) ∀s∈S,a∈A(s),初始化 Q ( s , a ) ∈ R Q(s,a) \in\mathbb R Q(s,a)∈R; 2. C ( s , a ) → 0 C(s,a) \to 0 C(s,a)→0 3. π ( s ) ← arg max a Q ( s , a ) \pi(s) \gets \mathop{\arg\max}\limits_{a}Q(s,a) π(s)←aargmaxQ(s,a)算法过程(Algorithmic Process)1. repeat 对每一个情节: k = 0 , 1 , 2 , . . . k=0,1,2,... k=0,1,2,... 2. b → b \to b→ 任意软性策略;3. 根据策略 π ( s ) \pi(s) π(s),从初始二元组( S 0 , A 0 S_0,A_0 S0,A0)开始,生成一个情节序列: S 0 , A 0 , R 1 , S 1 , A 1 , R 2 , . . . , S T − 1 , A T − 1 , R T , S T S_0,A_0,R_1,S_1,A_1,R_2,...,S_{T-1},A_{T-1},R_T,S_T S0,A0,R1,S1,A1,R2,...,ST−1,AT−1,RT,ST4. G ← 0 \gets 0 ←0 5. W ← 1 \gets 1 ←1 初始化权重; 6. for 情节中的每一步(时刻) t = T − 1 → 0 t = T - 1 \to 0 t=T−1→0 do: 7. G ← γ G + R t + 1 G \gets\gamma G + R_{t+1} G←γG+Rt+1 8. C ( S t , A t ) ← C ( S t , A t ) + W C(S_t,A_t) \gets C(S_t,A_t) + W C(St,At)←C(St,At)+W 9. Q ( S t , A t ) ← Q ( S t , A t ) + 1 C ( S t , A t ) ( G − Q ( S t , A t ) ) Q(S_t,A_t) \gets Q(S_t,A_t) + \frac{1}{C(S_t,A_t)}(G - Q(S_t,A_t)) Q(St,At)←Q(St,At)+C(St,At)1(G−Q(St,At))11. π ( S t ) ← arg max a Q ( S t , a ) \pi(S_t) \gets \mathop{\arg\max}\limits_{a} Q(S_t,a) π(St)←aargmaxQ(St,a)12. if A t = π ( S t ) A_t = \pi(S_t) At=π(St) then W ← W ⋅ 1 b ( A t ∣ S t ) W \gets W \cdot \frac{1}{b(A_t \mid S_t)} W←W⋅b(At∣St)1 13. else break14. end for输出结果 π ∗ = π \pi_* = \pi π∗=π我们发现,策略 b ( a ∣ s ) b(a \mid s) b(a∣s)一直都是任意软性策略,仅用于生成情节;在蒙特卡洛评估部分使用动量更新方式直接更新状态-动作价值函数 Q ( s , a ) Q(s,a) Q(s,a);并且在策略改进过程也不必担心确定性策略的影响。
离轨策略蒙特卡洛控制算法的弊端观察算法第12行:
i
f
A
t
≠
π
(
S
t
)
→
b
r
e
a
k
if A_t \neq \pi(S_t) \to break
ifAt=π(St)→break 其中
A
t
A_t
At是使用任意软性策略
b
(
a
∣
s
)
b(a \mid s)
b(a∣s)产生的情节在
t
t
t时刻
S
t
S_t
St条件下的动作;根据该描述,将
A
t
A_t
At进行如下表示: At是b策略在St状态下从所有‘有意义的’动作中按照对应概率随机选择出的1个
A
t
=
b
(
S
t
)
A_t = b(S_t)
At=b(St) 回归算法本身,对
A
t
A_t
At进行修改:
i
f
b
(
S
t
)
≠
π
(
S
t
)
→
b
r
e
a
k
if b(S_t) \neq \pi(S_t) \to break
ifb(St)=π(St)→break 翻译一下:在
t
t
t时刻状态
S
t
S_t
St确定的条件下,如果
b
(
S
t
)
b(S_t)
b(St)和刚执行策略改进后的目标策略
π
\pi
π在
S
t
S_t
St时刻选择的动作
π
(
S
t
)
\pi(S_t)
π(St)不一致
→
\to
→该次情节循环停止。
为什么会使用该条件作为判断条件?
回溯到蒙特卡洛方法求解强化学习任务——基于离轨策略的蒙特卡洛策略评估中状态价值函数的推导部分: E π [ G t ∣ S t = s ] = ∑ G t ⋅ P ( A t , R t + 1 , S t + 1 , A t + 1 , . . . , S T ∣ S t = s , A t : T − 1 ∼ π ) = ∑ G t ⋅ π ( A t ∣ S t = s ) ⋅ p ( R t + 1 , S t + 1 ∣ S t = s , A t ) ⋅ π ( A t + 1 ∣ S t + 1 ) ⋅ . . . ⋅ p ( R T , S T ∣ S T − 1 , A T − 1 ) = ∑ G t ⋅ ∏ k = t T − 1 π ( A k ∣ S k ) ⋅ p ( S k + 1 ∣ S k , A k ) = ∑ G t ⋅ ∏ k = t T − 1 π ( A k ∣ S k ) ⋅ p ( S k + 1 ∣ S k , A k ) = ∑ G t ⋅ ∏ k = t T − 1 [ π ( A k ∣ S k ) b ( A k ∣ S k ) ] ⋅ b ( A k ∣ S k ) ⋅ p ( S k + 1 ∣ S k , A k ) = ∑ ∏ k = t T − 1 [ π ( A k ∣ S k ) b ( A k ∣ S k ) ] ⋅ G t ∏ k = t T − 1 [ b ( A k ∣ S k ) ⋅ p ( S k + 1 ∣ S k , A k ) ] \begin{aligned} \mathbb E_\pi[G_t \mid S_t = s] & = \sum G_t \cdot P(A_t,R_{t+1},S_{t+1},A_{t+1},...,S_T \mid S_t=s,A_{t:T-1}\sim \pi) \\ & = \sum G_t \cdot \pi(A_t \mid S_t =s)\cdot p(R_{t+1},S_{t+1}\mid S_t=s,A_t) \cdot \pi(A_{t+1} \mid S_{t+1}) \cdot ... \cdot p(R_T,S_T \mid S_{T-1},A_{T-1}) \\ & = \sum G_t \cdot \prod_{k=t}^{T-1}\pi(A_k \mid S_k)\cdot p(S_{k+1} \mid S_k,A_k) & = \sum G_t \cdot \prod_{k=t}^{T-1}\pi(A_k \mid S_k)\cdot p(S_{k+1} \mid S_k,A_k) \\ & = \sum G_t \cdot \prod_{k=t}^{T-1}[\frac{\pi(A_k \mid S_k)}{b(A_k \mid S_k)}] \cdot b(A_k \mid S_k) \cdot p(S_{k+1} \mid S_k,A_k) \\ & = \sum \prod_{k=t}^{T-1}[\frac{\pi(A_k \mid S_k)}{b(A_k \mid S_k)}] \cdot G_t\prod_{k=t}^{T-1}[b(A_k \mid S_k) \cdot p(S_{k+1} \mid S_k,A_k)] \end{aligned} Eπ[Gt∣St=s]=∑Gt⋅P(At,Rt+1,St+1,At+1,...,ST∣St=s,At:T−1∼π)=∑Gt⋅π(At∣St=s)⋅p(Rt+1,St+1∣St=s,At)⋅π(At+1∣St+1)⋅...⋅p(RT,ST∣ST−1,AT−1)=∑Gt⋅k=t∏T−1π(Ak∣Sk)⋅p(Sk+1∣Sk,Ak)=∑Gt⋅k=t∏T−1[b(Ak∣Sk)π(Ak∣Sk)]⋅b(Ak∣Sk)⋅p(Sk+1∣Sk,Ak)=∑k=t∏T−1[b(Ak∣Sk)π(Ak∣Sk)]⋅Gtk=t∏T−1[b(Ak∣Sk)⋅p(Sk+1∣Sk,Ak)]=∑Gt⋅k=t∏T−1π(Ak∣Sk)⋅p(Sk+1∣Sk,Ak)
并且提出等式右半部分将策略 π \pi π替换成策略 b b b: ∏ k = t T − 1 [ b ( A k ∣ S k ) ⋅ p ( S k + 1 ∣ S k , A k ) ] = P ( A t , R t + 1 , S t + 1 , A t + 1 , . . . , S T ∣ S t = s , A t : T − 1 ∼ b ) \prod_{k=t}^{T-1}[b(A_k \mid S_k) \cdot p(S_{k+1} \mid S_k,A_k)] = P(A_t,R_{t+1},S_{t+1},A_{t+1},...,S_T \mid S_t=s,A_{t:T-1}\sim b) k=t∏T−1[b(Ak∣Sk)⋅p(Sk+1∣Sk,Ak)]=P(At,Rt+1,St+1,At+1,...,ST∣St=s,At:T−1∼b)
但是,实际上这个替换是存在约束条件的 → \to → 这个条件就是:在某一时刻状态 S t S_t St确定的条件下,通过策略 π \pi π产生的动作 π ( S t ) \pi(S_t) π(St)和策略 b b b产生的动作 b ( S t ) b(S_t) b(St)必须是相同的。
从算法步骤角度考虑: 如果迭代到某个时刻,两个策略指向的是不同的动作 → \to → 没有办法更新对应权重 W W W; 从公式推导角度考虑: E π [ G t ∣ S t = s ] = ∑ G t ⋅ P ( A t , R t + 1 , S t + 1 , A t + 1 , . . . , S T ∣ S t = s , A t : T − 1 ∼ π ) \mathbb E_\pi[G_t \mid S_t = s] = \sum G_t \cdot P(A_t,R_{t+1},S_{t+1},A_{t+1},...,S_T \mid S_t=s,A_{t:T-1}\sim \pi) Eπ[Gt∣St=s]=∑Gt⋅P(At,Rt+1,St+1,At+1,...,ST∣St=s,At:T−1∼π) 不能平白无故,随随便便地将动作服从的策略由 π \pi π修改成 b b b → \to → 若行为策略 b b b生成的动作序列和 A t : T − 1 ∼ π A_{t:T-1}\sim \pi At:T−1∼π不相同,那么该结果不是真正的 E π [ G t ∣ S t = s ] \mathbb E_\pi[G_t \mid S_t = s] Eπ[Gt∣St=s]。
该过程在算法中有明显体现: 沿着迭代过程中的遍历顺序: t = T − 1 → 0 t = T-1 \to 0 t=T−1→0,如果存在当前时刻行为策略 b b b和策略改进后的目标策略 π \pi π选择的动作 相同 → \to → 该时刻不影响,正常更新相应权重; 但凡某时刻行为策略 b b b和策略改进后的目标策略 π \pi π选择的动作 不相同 → \to → 该情节的遍历停止,该时刻后续所有的动作相应权重全部没有更新机会;
从实际情况看,每一次迭代但凡发现不相同 → \to → 停止该情节,遍历下一情节,能够完整遍历下来的情节 极少 (不要忘记,行为策略 b b b是 任意软性策略)。效率也不会很高,这一点也是离轨策略蒙特卡洛控制的应用性不强的原因之一。
至此,蒙特卡洛方法求解强化学习任务系列介绍全部结束。后续会继续介绍时序差分方法求解强化学习任务系列。
相关参考: 【强化学习】 蒙特卡洛方法-离轨策略评估与控制 深度强化学习原理、算法pytorch实战 —— 刘全,黄志刚编著