optimal_policy.search();

本文最后更新于 2026年7月22日 下午

赵老师开源的 Github 仓库、赵老师的 B站 课程视频

背景来自 XHS 马大可

Overview

Outline:

  • 值迭代算法(Value iteration algorithm)
  • 策略迭代算法(Policy iteration algorithm)
  • 截断策略迭代算法(Truncated policy iteration algorithm)

Lec 12 值迭代算法

算法来源

回顾上一节,如何求解贝尔曼最优方程?

v=f(v)=max⁡π(rπ+γPπv)v = f(v) = \max_\pi (r_\pi + \gamma P_\pi v)

压缩映射定理给出了一个迭代算法:

vk+1=f(vk)=max⁡π(rπ+γPπvk),k=1,2,3,…v_{k+1} = f(v_k) = \max_\pi (r_\pi + \gamma P_\pi v_k),\quad k = 1,2,3,\ldots

其中,v0v_0 可以任意选取。

该算法最终能找到最优状态值和最优策略。这就是 值迭代算法!

两步分解

算法 vk+1=f(vk)=max⁡π(rπ+γPπvk)v_{k+1} = f(v_k) = \max_\pi (r_\pi + \gamma P_\pi v_k) 可分解为两步:

  • 步骤1:策略更新

    πk+1=arg max⁡π(rπ+γPπvk)\pi_{k+1} = \argmax_\pi (r_\pi + \gamma P_\pi v_k)

    其中 vkv_k 已知。

  • 步骤2:值更新

    vk+1=rπk+1+γPπk+1vkv_{k+1} = r_{\pi_{k+1}} + \gamma P_{\pi_{k+1}} v_k

问题:vkv_k 是一个真实的 state value 吗?

  • 不是,这里的 vkv_k 就只是一个单纯的向量,就是一个值,并不是 state value!因为不能保证 vkv_k 满足贝尔曼方程。

元素形式

步骤1:策略更新

原方程 πk+1=arg max⁡π(rπ+γPπvk)\pi_{k+1} = \argmax_{\pi} \big( r_\pi + \gamma P_\pi v_k \big) 的元素形式为,

πk+1(s)=arg max⁡π∑aπ(a∣s)[∑rp(r∣s,a)r+γ∑s′p(s′∣s,a)vk(s′)]⏟qk(s,a),s∈S\pi_{k+1}(s) = \argmax_\pi \sum_a \pi(a|s) \underbrace{\left[ \sum_r p(r|s,a)r + \gamma \sum_{s^\prime} p(s^\prime|s,a) v_k(s^\prime) \right]}_{q_k(s,a)}, \quad s \in \mathcal{S}

最优策略为

πk+1(a∣s)={1a=ak⋆(s)0a≠ak⋆(s)\color{lightblue}{\pi_{k+1}(a|s) = \begin{cases} 1 & a = a_k^\star(s) \\ 0 & a \neq a_k^\star(s) \end{cases}}

其中,ak⋆(s)=arg max⁡aqk(s,a).\color{lightblue}{a_k^\star(s) = \argmax_a q_k(s,a)}. πk+1\pi_{k+1} 称为 贪心策略(greedy policy),因为它简单地选择最大的 qq 值。

步骤2:值更新

原方程 vk+1=f(vk)=max⁡π(rπ+γPπvk)v_{k+1} = f(v_k) = \max_\pi (r_\pi + \gamma P_\pi v_k) 的元素形式为,

vk+1(s)=∑aπk+1(a∣s)[∑rp(r∣s,a)r+γ∑s′p(s′∣s,a)vk(s′)]⏟qk(s,a),s∈S=max⁡aqk(s,a)\begin{align*} v_{k+1}(s) &= \sum_a \pi_{k+1}(a|s) \underbrace{\left[ \sum_r p(r|s,a)r + \gamma \sum_{s^\prime} p(s^\prime|s,a) v_k(s^\prime) \right]}_{q_k(s,a)}, \quad s \in \mathcal{S} \\ &= \max_a q_k(s,a) \end{align*}

最后一个等号是因为我们选取的 πk+1\pi_{k+1} 是 贪心 的!

伪代码

整体过程:

vk(s)→qk(s,a)→贪心策略 πk+1(a∣s)→更新值 vk+1=max⁡aqk(s,a)\begin{align*} v_k(s) \rightarrow q_k(s,a) \rightarrow \text{贪心策略} \ \pi_{k+1}(a|s) \rightarrow \text{更新值} \ v_{k+1} = \max_a q_k(s,a) \end{align*}

值迭代算法

  • 初始化:已知概率模型 p(r∣s,a)p(r|s,a) 和 p(s′∣s,a)p(s^\prime|s,a),初始猜测 v0v_0。

  • 目标:搜索求解贝尔曼最优方程的最优状态值和最优策略。

  • 当 vkv_k 未收敛时(∥vk−vk−1∥>ϵ\|v_k - v_{k-1}\|>\epsilon,ϵ\epsilon 是预设阈值),
    执行第 kk 次迭代:

    • 对每个状态 s∈Ss \in \mathcal{S}:
      • 对每个动作 a∈A(s)a \in \mathcal{A}(s):
        • 计算 q-value:qk(s,a)=∑rp(r∣s,a)r+γ∑s′p(s′∣s,a)vk(s′)q_k(s,a) = \sum_r p(r|s,a)r + \gamma \sum_{s^\prime} p(s^\prime|s,a) v_k(s^\prime)
      • 贪心策略:ak⋆(s)=arg max⁡aqk(s,a)a^\star_k(s) = \argmax_a q_k(s,a)
      • 策略更新:πk+1(a∣s)=1\pi_{k+1}(a|s) = 1 若 a=ak⋆a = a^\star_k,否则为 0
      • 值更新:vk+1(s)=max⁡aqk(s,a)v_{k+1}(s) = \max_a q_k(s,a)

例子

继续沿用 rboundary=rforbidden=−1r_{\text{boundary}} = r_{\text{forbidden}} = -1,rtarget=1r_{\text{target}} = 1,折扣率为 γ=0.9\gamma = 0.9。

Example Example
(a) 策略;(b) 第一次迭代得到的策略;(c) 第二次迭代得到的策略

可以列出 Q-表: q(s,a)q(s, a) 的表达式。

q-value a1a_1 a2a_2 a3a_3 a4a_4 a5a_5
s1s_1 −1+γv(s1)-1 + \gamma v(s_1) −1+γv(s2)-1 + \gamma v(s_2) 0+γv(s3)0 + \gamma v(s_3) −1+γv(s1)-1 + \gamma v(s_1) 0+γv(s1)0 + \gamma v(s_1)
s2s_2 −1+γv(s2)-1 + \gamma v(s_2) −1+γv(s2)-1 + \gamma v(s_2) 1+γv(s4)1 + \gamma v(s_4) 0+γv(s1)0 + \gamma v(s_1) −1+γv(s2)-1 + \gamma v(s_2)
s3s_3 0+γv(s1)0 + \gamma v(s_1) 1+γv(s4)1 + \gamma v(s_4) −1+γv(s3)-1 + \gamma v(s_3) −1+γv(s3)-1 + \gamma v(s_3) 0+γv(s3)0 + \gamma v(s_3)
s4s_4 −1+γv(s2)-1 + \gamma v(s_2) −1+γv(s4)-1 + \gamma v(s_4) −1+γv(s4)-1 + \gamma v(s_4) 0+γv(s3)0 + \gamma v(s_3) 1+γv(s4)1 + \gamma v(s_4)

当 k=0k = 0 时

令 v0(s1)=v0(s2)=v0(s3)=v0(s4)=0v_0(s_1) = v_0(s_2) = v_0(s_3) = v_0(s_4) = 0

q-value a1a_1 a2a_2 a3a_3 a4a_4 a5a_5
s1s_1 −1-1 −1-1 0\color{red}0 −1-1 0\color{red}0
s2s_2 −1-1 −1-1 1\color{red}1 00 −1-1
s3s_3 00 1\color{red}1 −1-1 −1-1 00
s4s_4 −1-1 −1-1 −1-1 00 1\color{red}1

k=0k=0 时,对应的 q(s1,a)q(s_1,a) 在 a3a_3、a5a_5 处同时取到最大,随便选取一个即可,此处取 s5s_5

步骤 1:策略更新

π1(a5∣s1)=1,π1(a3∣s2)=1,π1(a2∣s3)=1,π1(a5∣s4)=1\pi_1(a_5|s_1) = 1, \quad \pi_1(a_3|s_2) = 1, \quad \pi_1(a_2|s_3) = 1, \quad \pi_1(a_5|s_4) = 1

步骤 2:值更新

v1(s1)=0,v1(s2)=1,v1(s3)=1,v1(s4)=1v_1(s_1) = 0, \quad v_1(s_2) = 1, \quad v_1(s_3) = 1, \quad v_1(s_4) = 1

当 k=1k = 1 时

由于 v1(s1)=0,v1(s2)=1,v1(s3)=1,v1(s4)=1v_1(s_1) = 0, v_1(s_2) = 1, v_1(s_3) = 1, v_1(s_4) = 1,我们有:

q-table a1a_1 a2a_2 a3a_3 a4a_4 a5a_5
s1s_1 −1+γ⋅0-1 + \gamma \cdot 0 −1+γ⋅1-1 + \gamma \cdot 1 0+γ⋅1\color{red}0 + \gamma \cdot 1 −1+γ⋅0-1 + \gamma \cdot 0 0+γ⋅00 + \gamma \cdot 0
s2s_2 −1+γ⋅1-1 + \gamma \cdot 1 −1+γ⋅1-1 + \gamma \cdot 1 1+γ⋅1\color{red}1 + \gamma \cdot 1 0+γ⋅00 + \gamma \cdot 0 −1+γ⋅1-1 + \gamma \cdot 1
s3s_3 0+γ⋅00 + \gamma \cdot 0 1+γ⋅1\color{red}1 + \gamma \cdot 1 −1+γ⋅1-1 + \gamma \cdot 1 −1+γ⋅1-1 + \gamma \cdot 1 0+γ⋅10 + \gamma \cdot 1
s4s_4 −1+γ⋅1-1 + \gamma \cdot 1 −1+γ⋅1-1 + \gamma \cdot 1 −1+γ⋅1-1 + \gamma \cdot 1 0+γ⋅10 + \gamma \cdot 1 1+γ⋅1\color{red}1 + \gamma \cdot 1

步骤 1:策略更新

π2(a3∣s1)=1,π2(a3∣s2)=1,π2(a2∣s3)=1,π2(a5∣s4)=1\pi_2(a_3|s_1) = 1, \quad \pi_2(a_3|s_2) = 1, \quad \pi_2(a_2|s_3) = 1, \quad \pi_2(a_5|s_4) = 1

步骤 2:值更新

v2(s1)=γ⋅1,v2(s2)=1+γ⋅1,v2(s3)=1+γ⋅1,v2(s4)=1+γ⋅1v_2(s_1) = \gamma \cdot 1, \quad v_2(s_2) = 1 + \gamma \cdot 1, \quad v_2(s_3) = 1 + \gamma \cdot 1, \quad v_2(s_4) = 1 + \gamma \cdot 1

该策略已经是最优策略!!

  • k=2,3,…k = 2, 3, \dots: 当 ∥vk−vk+1∥\|v_k - v_{k+1}\| 小于预设阈值时停止。

Lec 13 策略迭代算法

算法描述

给定一个随机初始策略 π0\pi_0:

  • 步骤 1:策略评估(Policy Evaluation,PE)

    计算 πk\pi_k 的状态值:

    vπk=rπk+γPπkvπkv_{\pi_k} = r_{\pi_k} + \gamma P_{\pi_k} v_{\pi_k}

    注:这里的 vπkv_{\pi_k} 是一个 state value!

  • 步骤 2:策略改进(Policy Improvement,PI)

    πk+1=arg max⁡π(rπ+γPπvπk)\pi_{k+1} = \argmax_{\pi} (r_{\pi} + \gamma P_{\pi} v_{\pi_k})

    该最大化是逐分量进行的!

整体算法按照如下序列进行,

π0→PEvπ0→PIπ1→PEvπ1→PIπ2→PEvπ2→PI⋯\pi_0 \xrightarrow{\text{PE}} v_{\pi_0} \xrightarrow{\text{PI}} \pi_1 \xrightarrow{\text{PE}} v_{\pi_1} \xrightarrow{\text{PI}} \pi_2 \xrightarrow{\text{PE}} v_{\pi_2} \xrightarrow{\text{PI}} \cdots

关键问题

Q1:策略评估步骤中,如何通过求解贝尔曼方程得到状态值 vπkv_{\pi_k}?

  • 闭式解:

    vπk=(I−γPπk)−1rπkv_{\pi_k} = (I - \gamma P_{\pi_k})^{-1} r_{\pi_k}

  • 迭代解:

    vπk(j+1)=rπk+γPπkvπk(j),j=0,1,2,…v_{\pi_k}^{(j+1)} = r_{\pi_k} + \gamma P_{\pi_k} v_{\pi_k}^{(j)}, \quad j = 0, 1, 2, \ldots

  • 策略评估中嵌入了另一个迭代算法!

Q2:策略改进步骤中,为什么新策略 πk+1\pi_{k+1} 比 πk\pi_k 更好?

引理(策略改进): 若 πk+1=arg max⁡π(rπ+γPπvπk)\pi_{k+1} = \argmax_{\pi} (r_{\pi} + \gamma P_{\pi} v_{\pi_k}),则 vπk+1⩾vπkv_{\pi_{k+1}} \geqslant v_{\pi_k} 对任意 kk 成立。

证明: 由于 vπk+1v_{\pi_{k+1}} 和 vπkv_{\pi_k} 都是状态值,它们分别满足下面的贝尔曼方程:

vπk+1=rπk+1+γPπk+1vπk+1,vπk=rπk+γPπkvπk.\begin{align*} v_{\pi_{k+1}} &= r_{\pi_{k+1}} + \gamma P_{\pi_{k+1}} v_{\pi_{k+1}}, \\ v_{\pi_k} &= r_{\pi_k} + \gamma P_{\pi_k} v_{\pi_k}. \end{align*}

由于 πk+1=arg max⁡π(rπ+γPπvπk)\pi_{k+1} = \argmax_{\pi}(r_{\pi} + \gamma P_{\pi} v_{\pi_k}),因此

rπk+1+γPπk+1vπk⩾rπk+γPπkvπk.r_{\pi_{k+1}} + \gamma P_{\pi_{k+1}} v_{\pi_k} \geqslant r_{\pi_k} + \gamma P_{\pi_k} v_{\pi_k}.

因此

vπk−vπk+1=(rπk+γPπkvπk)−(rπk+1+γPπk+1vπk+1)⩽(rπk+1+γPπk+1vπk)−(rπk+1+γPπk+1vπk+1)⩽γPπk+1(vπk−vπk+1).\begin{aligned} v_{\pi_k} - v_{\pi_{k+1}} &= (r_{\pi_k} + \gamma P_{\pi_k} v_{\pi_k}) - (r_{\pi_{k+1}} + \gamma P_{\pi_{k+1}} v_{\pi_{k+1}}) \\ &\leqslant (r_{\pi_{k+1}} + \gamma P_{\pi_{k+1}} v_{\pi_k}) - (r_{\pi_{k+1}} + \gamma P_{\pi_{k+1}} v_{\pi_{k+1}}) \\ &\leqslant \gamma P_{\pi_{k+1}} (v_{\pi_k} - v_{\pi_{k+1}}). \end{aligned}

反复调用上式可得

vπk−vπk+1⩽γ2Pπk+12(vπk−vπk+1)⩽⋯⩽γnPπk+1n(vπk−vπk+1)⩽lim⁡n→∞γnPπk+1n(vπk−vπk+1)=0.\begin{aligned} v_{\pi_k} - v_{\pi_{k+1}} &\leqslant \gamma^2 P_{\pi_{k+1}}^2 (v_{\pi_k} - v_{\pi_{k+1}}) \leqslant \cdots \leqslant \gamma^n P_{\pi_{k+1}}^n (v_{\pi_k} - v_{\pi_{k+1}}) \\ &\leqslant \lim_{n \to \infty} \gamma^n P_{\pi_{k+1}}^n (v_{\pi_k} - v_{\pi_{k+1}}) = 0. \end{aligned}

上式最右端极限等于 00 是因为 γn→0\gamma^n \to 0 且 Pπk+1nP_{\pi_{k+1}}^n 的每一个元素都在 [0,1][0,1] 区间。

因此,πk+1\pi_{k+1} 比 πk\pi_k 更优。

Q3:为什么这样的迭代算法最终能到达最优策略?

  • 由于每次迭代都会改进策略,所以

    vπ0⩽vπ1⩽vπ2⩽⋯⩽vπk⩽⋯⩽v⋆v_{\pi_0} \leqslant v_{\pi_1} \leqslant v_{\pi_2} \leqslant \cdots \leqslant v_{\pi_k} \leqslant \cdots \leqslant v^\star

  • 定理(策略迭代收敛性): 策略迭代算法生成的序列 {vπk}k=0∞\{v_{\pi_k}\}_{k=0}^{\infty} 收敛到最优状态值 v⋆v^\star,从而策略序列 {πk}k=0∞\{\pi_k\}_{k=0}^{\infty} 收敛到最优策略。

证明: 为了证明 {vπk}k=0∞\{v_{\pi_k}\}_{k=0}^{\infty} 的收敛性,我们引入另一个序列 {vk}k=0∞\{v_k\}_{k=0}^{\infty},该序列由下面的迭代算法产生:

vk+1=f(vk)=max⁡π(rπ+γPπvk).v_{k+1} = f(v_k) = \max_{\pi}(r_{\pi} + \gamma P_{\pi} v_k).

这个迭代算法实际上就是值迭代算法。我们已经知道,给定任意的初始值 v0v_0,vkv_k 会收敛到 v⋆v^\star。

对任意的 π0\pi_0,总是能找到 v0v_0 使得 v0≤vπ0v_0 \leq v_{\pi_0}。下面用递归法证明 vk≤vπk≤v⋆v_k \leq v_{\pi_k} \leq v^\star 对任意 k⩾1k \geqslant 1 都成立。

假设 vπk⩾vkv_{\pi_k} \geqslant v_k 对某一个 kk 成立,那么对于 k+1k+1 有,

vπk+1−vk+1=(rπk+1+γPπk+1vπk+1)−max⁡π(rπ+γPπvk)⩾(rπk+1+γPπk+1vπk)−max⁡π(rπ+γPπvk)(因为 vπk+1⩾vπk 并且 Pπk+1⩾0)=(rπk+1+γPπk+1vπk)−(rπk′+γPπk′vk)(令 πk′=arg max⁡π(rπ+γPπvk))⩾(rπk′+γPπk′vπk)−(rπk′+γPπk′vk)(因为 πk+1=arg max⁡π(rπ+γPπvπk))=γPπk′(vπk−vk).\begin{align*} v_{\pi_{k+1}} - v_{k+1} &= (r_{\pi_{k+1}} + \gamma P_{\pi_{k+1}} v_{\pi_{k+1}}) - \max_{\pi}(r_{\pi} + \gamma P_{\pi} v_k) \\ &\geqslant (r_{\pi_{k+1}} + \gamma P_{\pi_{k+1}} v_{\pi_k}) - \max_{\pi}(r_{\pi} + \gamma P_{\pi} v_k) \\ &\qquad\qquad\qquad\qquad (\text{因为 } v_{\pi_{k+1}} \geqslant v_{\pi_k} \text{ 并且 } P_{\pi_{k+1}} \geqslant 0) \\ &= (r_{\pi_{k+1}} + \gamma P_{\pi_{k+1}} v_{\pi_k}) - (r_{\pi_k^\prime} + \gamma P_{\pi_k^\prime} v_k) \\ &\qquad\qquad\qquad\qquad (\text{令 } \pi_k^\prime = \argmax_{\pi}(r_{\pi} + \gamma P_{\pi} v_k)) \\ &\geqslant (r_{\pi_k^\prime} + \gamma P_{\pi_k^\prime} v_{\pi_k}) - (r_{\pi_k^\prime} + \gamma P_{\pi_k^\prime} v_k) \\ &\qquad\qquad\qquad\qquad (\text{因为 } \pi_{k+1} = \argmax_{\pi}(r_{\pi} + \gamma P_{\pi} v_{\pi_k})) \\ &= \gamma P_{\pi_k^\prime} (v_{\pi_k} - v_k). \end{align*}

由于 vπk−vk⩾0v_{\pi_k} - v_k \geqslant 0 并且 Pπk′P_{\pi_k^\prime} 非负,我们有 Pπk′(vπk−vk)⩾0P_{\pi_k^\prime}(v_{\pi_k} - v_k) \geqslant 0,因此 vπk+1−vk+1⩾0v_{\pi_{k+1}} - v_{k+1} \geqslant 0。

由于 vπk⩾vkv_{\pi_k} \geqslant v_k 对于 k=0k = 0 成立,那么通过递归可知 vπk⩾vkv_{\pi_k} \geqslant v_k 对任意 k⩾0k \geqslant 0 成立。最后,因为 vkv_k 能收敛到 v⋆v^\star,所以 vπkv_{\pi_k} 也必定能收敛到 v⋆v^\star。

Q4:值迭代和策略迭代算法之间有什么关系?

  • 实际上二者都是截断策略迭代算法的特殊情况!(后面会讲到)

元素形式

步骤 1:策略评估

  • Matrix-vector 形式:vπk(j+1)=rπk+γPπkvπk(j),j=0,1,2,…v_{\pi_k}^{(j+1)} = r_{\pi_k} + \gamma P_{\pi_k} v_{\pi_k}^{(j)}, \quad j = 0, 1, 2, \ldots
  • 元素形式:

    vπk(j+1)(s)=∑aπk(a∣s)[∑rp(r∣s,a)r+γ∑s′p(s′∣s,a)vπk(j)(s′)],s∈Sv_{\pi_k}^{(j+1)}(s) = \sum_{a} \pi_k(a|s) \left[ \sum_{r} p(r|s,a) r + \gamma \sum_{s^\prime} p(s^\prime|s,a) v_{\pi_k}^{(j)}(s^\prime) \right], \quad s \in \mathcal{S}

当 j→∞j \to \infty 或 jj 足够大或 ∥vπk(j+1)−vπk(j)∥\|v_{\pi_k}^{(j+1)} - v_{\pi_k}^{(j)}\| 足够小时停止。

步骤 2:策略改进

  • Matrix-vector 形式:πk+1=arg max⁡π(rπ+γPπvπk)\pi_{k+1} = \argmax_{\pi} (r_{\pi} + \gamma P_{\pi} v_{\pi_k})
  • 元素形式:

πk+1(s)=arg max⁡π∑aπ(a∣s)[∑rp(r∣s,a)r+γ∑s′p(s′∣s,a)vπk(s′)]⏟qπk(s,a),s∈S\pi_{k+1}(s) = \argmax_{\pi} \sum_{a} \pi(a|s) \underbrace{\left[ \sum_{r} p(r|s,a) r + \gamma \sum_{s^\prime} p(s^\prime|s,a) v_{\pi_k}(s^\prime) \right]}_{q_{\pi_k}(s,a)}, \quad s \in \mathcal{S}

其中,qπk(s,a)q_{\pi_k}(s,a) 是策略 πk\pi_k 下的动作值。令 ak⋆(s)=arg max⁡aqπk(s,a)a_k^\star(s) = \argmax_{a} q_{\pi_k}(s,a),则贪心策略为

πk+1(a∣s)={1a=ak⋆(s)0a≠ak⋆(s)\pi_{k+1}(a|s) = \begin{cases} 1 & a = a_k^\star(s) \\ 0 & a \neq a_k^\star(s) \end{cases}

伪代码

策略迭代算法

  • 初始化:已知概率模型 p(r∣s,a)p(r|s,a) 和 p(s′∣s,a)p(s^\prime|s,a),初始策略 π0\pi_0。
  • 目标:搜索最优状态值和最优策略。
  • 当策略未收敛时,执行第 kk 次迭代:
    • 策略评估:
      • 初始化:任意初始猜测 vπk(0)v_{\pi_k}^{(0)}
      • 当 vπk(j)v_{\pi_k}^{(j)} 未收敛时,执行第 jj 次迭代:
        • 对每个状态 s∈Ss \in \mathcal{S}:

          vπk(j+1)(s)=∑aπk(a∣s)[∑rp(r∣s,a)r+γ∑s′p(s′∣s,a)vπk(j)(s′)]v_{\pi_k}^{(j+1)}(s) = \sum_{a} \pi_k(a|s) \left[ \sum_{r} p(r|s,a) r + \gamma \sum_{s^\prime} p(s^\prime|s,a) v_{\pi_k}^{(j)}(s^\prime) \right]

    • 策略改进:
      • 对每个状态 s∈Ss \in \mathcal{S}:
        • 对每个动作 a∈A(s)a \in \mathcal{A}(s):

          qπk(s,a)=∑rp(r∣s,a)r+γ∑s′p(s′∣s,a)vπk(s′)q_{\pi_k}(s,a) = \sum_{r} p(r|s,a) r + \gamma \sum_{s^\prime} p(s^\prime|s,a) v_{\pi_k}(s^\prime)

        • ak⋆(s)=arg max⁡aqπk(s,a)a_k^\star(s) = \argmax_{a} q_{\pi_k}(s,a)
        • πk+1(a∣s)=1\pi_{k+1}(a|s) = 1 若 a=ak⋆(s)a = a_k^\star(s),否则为 00

例 1

Example
策略迭代 例子1 之示意图
  • 奖励设置为 rboundary=−1r_{\text{boundary}} = -1 且 rtarget=1r_{\text{target}} = 1。折扣率为 γ=0.9\gamma = 0.9。
  • 动作:aℓ,a0,ara_\ell, a_0, a_r 分别表示向左、保持不变和向右。
  • 目标:使用策略迭代找出最优策略。

迭代 k=0k = 0:

步骤 1:策略评估

π0\pi_0 被选为图 (a) 中的策略。贝尔曼方程为

vπ0(s1)=−1+γvπ0(s1),vπ0(s2)=0+γvπ0(s1).\begin{align*} v_{\pi_0}(s_1) &= -1 + \gamma v_{\pi_0}(s_1), \\ v_{\pi_0}(s_2) &= 0 + \gamma v_{\pi_0}(s_1). \end{align*}

  • 直接求解方程:

vπ0(s1)=−10,vπ0(s2)=−9.v_{\pi_0}(s_1) = -10, \quad v_{\pi_0}(s_2) = -9.

  • 迭代求解方程。选取初始猜测 vπ0(0)(s1)=vπ0(0)(s2)=0v_{\pi_0}^{(0)}(s_1) = v_{\pi_0}^{(0)}(s_2) = 0:

{vπ0(1)(s1)=−1+γvπ0(0)(s1)=−1,vπ0(1)(s2)=0+γvπ0(0)(s1)=0,{vπ0(2)(s1)=−1+γvπ0(1)(s1)=−1.9,vπ0(2)(s2)=0+γvπ0(1)(s1)=−0.9,{vπ0(3)(s1)=−1+γvπ0(2)(s1)=−2.71,vπ0(3)(s2)=0+γvπ0(2)(s1)=−1.71,\begin{align*} &\begin{cases} v_{\pi_0}^{(1)}(s_1) = -1 + \gamma v_{\pi_0}^{(0)}(s_1) = -1, \\ v_{\pi_0}^{(1)}(s_2) = 0 + \gamma v_{\pi_0}^{(0)}(s_1) = 0, \end{cases} \\ &\begin{cases} v_{\pi_0}^{(2)}(s_1) = -1 + \gamma v_{\pi_0}^{(1)}(s_1) = -1.9, \\ v_{\pi_0}^{(2)}(s_2) = 0 + \gamma v_{\pi_0}^{(1)}(s_1) = -0.9, \end{cases} \\ &\begin{cases} v_{\pi_0}^{(3)}(s_1) = -1 + \gamma v_{\pi_0}^{(2)}(s_1) = -2.71, \\ v_{\pi_0}^{(3)}(s_2) = 0 + \gamma v_{\pi_0}^{(2)}(s_1) = -1.71, \end{cases} \end{align*}

步骤 2:策略改进

qπk(s,a)q_{\pi_k}(s, a) 的表达式:

qπk(s,a)q_{\pi_k}(s, a) aℓa_\ell a0a_0 ara_r
s1s_1 −1+γvπk(s1)-1 + \gamma v_{\pi_k}(s_1) 0+γvπk(s1)0 + \gamma v_{\pi_k}(s_1) 1+γvπk(s2)1 + \gamma v_{\pi_k}(s_2)
s2s_2 0+γvπk(s1)0 + \gamma v_{\pi_k}(s_1) 1+γvπk(s2)1 + \gamma v_{\pi_k}(s_2) −1+γvπk(s2)-1 + \gamma v_{\pi_k}(s_2)

代入 vπ0(s1)=−10,vπ0(s2)=−9v_{\pi_0}(s_1) = -10, v_{\pi_0}(s_2) = -9 和 γ=0.9\gamma = 0.9 得到

qπ0(s,a)q_{\pi_0}(s, a) aℓa_\ell a0a_0 ara_r
s1s_1 −10-10 −9-9 −7.1\color{red}{-7.1}
s2s_2 −9-9 −7.1\color{red}{-7.1} −9.1-9.1

通过寻找 qπ0q_{\pi_0} 的最大值,改进后的策略为:

π1(ar∣s1)=1,π1(a0∣s2)=1.\pi_1(a_r|s_1) = 1, \quad \pi_1(a_0|s_2) = 1.

该策略在一次迭代后即达到最优!在编程中,应继续迭代直到满足停止准则。

例 2

Example Example
策略迭代 例子2 之示意图
  • 奖励设置为 rboundary=−1r_{\text{boundary}} = -1 且 rtarget=1r_{\text{target}} = 1。折扣率为 γ=0.9\gamma = 0.9。

我们可以注意到:越靠近目标的策略,越先变好!

  • π0\pi_0:所有策略都很差
  • π1\pi_1:target 的上下左右策略都变好!
  • π2\pi_2:target 周围一圈的策略都变好!
  • π3\pi_3:右下角附近的策略变好!
  • ⋯\cdots
  • π9\pi_9:只有起点附近的还差
  • π10\pi_{10}:全部变好!

直观上的理解:

  • 我在某状态 ss 下选择其 greedy action 严重依赖于其他状态的策略。如果其他状态 s′s^\prime 有能够到达目标区域的策略,那我只需要让 ss 到 s′s^\prime 就能到达目标区域,得到正的 reward。

Lec 14 截断策略迭代算法

比较值迭代与策略迭代

策略迭代:从 π0\pi_0 开始

  • 策略评估(PE):vπk=rπk+γPπkvπkv_{\pi_k} = r_{\pi_k} + \gamma P_{\pi_k} v_{\pi_k}
  • 策略改进(PI):πk+1=arg max⁡π(rπ+γPπvπk)\pi_{k+1} = \argmax_\pi (r_\pi + \gamma P_\pi v_{\pi_k})

值迭代:从 v0v_0 开始

  • 策略更新(PU):πk+1=arg max⁡π(rπ+γPπvk)\pi_{k+1} = \argmax_\pi (r_\pi + \gamma P_\pi v_k)
  • 值更新(VU):vk+1=rπk+1+γPπk+1vkv_{k+1} = r_{\pi_{k+1}} + \gamma P_{\pi_{k+1}} v_k

两个算法非常相似。

Policy iteration:π0→PEvπ0→PIπ1→PEvπ1→PIπ2→PEvπ2→PI⋯Value iteration:u0→PUπ1′→VUu1→PUπ2′→VUu2→PU⋯\begin{align*} \text{Policy iteration:} \pi_0 \xrightarrow{\text{PE}} &v_{\pi_0} \xrightarrow{\text{PI}} \pi_1 \xrightarrow{\text{PE}} v_{\pi_1} \xrightarrow{\text{PI}} \pi_2 \xrightarrow{\text{PE}} v_{\pi_2} \xrightarrow{\text{PI}} \cdots \\ \text{Value iteration:} \quad \qquad &u_0 \xrightarrow{\text{PU}} \pi_1^\prime \xrightarrow{\text{VU}} u_1 \xrightarrow{\text{PU}} \pi_2^\prime \xrightarrow{\text{VU}} u_2 \xrightarrow{\text{PU}} \cdots \end{align*}

我们详细比较每一步骤:

策略迭代算法 值迭代算法 备注
1) 策略: π0\pi_0 N/A
2) 值: vπ0=rπ0+γPπ0vπ0v_{\pi_0} = r_{\pi_0} + \gamma P_{\pi_0} v_{\pi_0} v0≔vπ0\color{red}{v_0 \coloneqq v_{\pi_0}}
3) 策略: π1=arg max⁡π(rπ+γPπvπ0)\pi_1 = \argmax_{\pi}(r_{\pi} + \gamma P_{\pi} v_{\pi_0}) π1=arg max⁡π(rπ+γPπv0)\pi_1 = \argmax_{\pi}(r_{\pi} + \gamma P_{\pi} v_0) 两个策略相同
4) 值: vπ1=rπ1+γPπ1vπ1\color{lightblue}{v_{\pi_1} = r_{\pi_1} + \gamma P_{\pi_1} v_{\pi_1}} v1=rπ1+γPπ1v0\color{lightblue}{v_1 = r_{\pi_1} + \gamma P_{\pi_1} v_0} vπ1≥v1v_{\pi_1} \geq v_1,因为 vπ1≥vπ0v_{\pi_1} \geq v_{\pi_0}
5) 策略: π2=arg max⁡π(rπ+γPπvπ1)\pi_2 = \argmax_{\pi}(r_{\pi} + \gamma P_{\pi} v_{\pi_1}) π2′=arg max⁡π(rπ+γPπv1)\pi_2^\prime = \argmax_{\pi}(r_{\pi} + \gamma P_{\pi} v_1)
⋮\vdots ⋮\vdots ⋮\vdots ⋮\vdots
  • 它们从相同的初始条件出发。
  • 前三步是相同的。
  • 第四步开始变得不同:
    • 在策略迭代中,求解 vπ1=rπ1+γPπ1vπ1v_{\pi_1} = r_{\pi_1} + \gamma P_{\pi_1} v_{\pi_1} 需要一个迭代算法(无限次迭代)
    • 在值迭代中,v1=rπ1+γPπ1v0v_1 = r_{\pi_1} + \gamma P_{\pi_1} v_0 是一步迭代

截断策略迭代

考虑上面第四步求解 vπ1=rπ1+γPπ1vπ1\color{lightblue}{v_{\pi_1} = r_{\pi_1} + \gamma P_{\pi_1} v_{\pi_1}} 的过程,

截断策略迭代
截断策略(truncated policy iteration)迭代示意图

我们可以发现:

  • 值迭代计算一次
  • 策略迭代计算无穷次
  • 截断策略迭代计算有限次(jj 次)

伪代码

截断策略迭代算法

  • 初始化: 概率模型 p(r∣s,a)p(r|s,a) 和 p(s′∣s,a)p(s^\prime|s,a) 对所有 (s,a)(s,a) 均已知。初始猜测 π0\pi_0。
  • 目标: 搜索最优状态值和最优策略。
  • 当策略尚未收敛时,执行第 kk 次迭代:
    • 策略评估:(PE)
      • 初始化: 选取初始猜测为 vk(0)=vk−1v_k^{(0)} = v_{k-1}。最大迭代次数设为 jtruncatej_{\text{truncate}}。
      • 当 j<jtruncatej < j_{\text{truncate}} 时,执行:
        • 对每个状态 s∈Ss \in \mathcal{S},执行:

          vk(j+1)(s)=∑aπk(a∣s)[∑rp(r∣s,a)r+γ∑s′p(s′∣s,a)vk(j)(s′)]v_k^{(j+1)}(s) = \sum_{a} \pi_k(a|s) \left[ \sum_{r} p(r|s,a) r + \gamma \sum_{s^\prime} p(s^\prime|s,a) v_k^{(j)}(s^\prime) \right]

      • 令 vk=vk(jtruncate)v_k = v_k^{(j_{\text{truncate}})}
    • 策略改进:(PI)
      • 对每个状态 s∈Ss \in \mathcal{S},执行:
        • 对每个动作 a∈A(s)a \in \mathcal{A}(s),执行:

          qk(s,a)=∑rp(r∣s,a)r+γ∑s′p(s′∣s,a)vk(s′)q_k(s,a) = \sum_{r} p(r|s,a) r + \gamma \sum_{s^\prime} p(s^\prime|s,a) v_k(s^\prime)

        • ak∗(s)=arg⁡max⁡aqk(s,a)a_k^*(s) = \arg\max_{a} q_k(s,a)
        • πk+1(a∣s)=1\pi_{k+1}(a|s) = 1 若 a=ak∗a = a_k^*,否则 πk+1(a∣s)=0\pi_{k+1}(a|s) = 0

但我们只计算有限步,是否会导致算法不再收敛?

从直观上看,截断策略迭代应介于值迭代和策略迭代之间。不用担心,收敛性从数学上可由以下定理保证!

命题(值改进):考虑求解策略评估步骤的迭代算法:

vπk(j+1)=rπk+γPπkvπk(j)v_{\pi_k}^{(j+1)} = r_{\pi_k} + \gamma P_{\pi_k} v_{\pi_k}^{(j)}

若初始猜测选为 vπk(0)=vπk−1v_{\pi_k}^{(0)} = v_{\pi_{k-1}},则有

vπk(j+1)≥vπk(j),j=0,1,2,…v_{\pi_k}^{(j+1)} \geq v_{\pi_k}^{(j)}, \quad j=0,1,2,\ldots

证明: 一方面,因为 vπk(j)=rπk+γPπkvπk(j−1)v_{\pi_k}^{(j)} = r_{\pi_k} + \gamma P_{\pi_k} v_{\pi_k}^{(j-1)} 且 vπk(j+1)=rπk+γPπkvπk(j)v_{\pi_k}^{(j+1)} = r_{\pi_k} + \gamma P_{\pi_k} v_{\pi_k}^{(j)},所以有

vπk(j+1)−vπk(j)=γPπk(vπk(j)−vπk(j−1))=⋯=γjPπkj(vπk(1)−vπk(0)).(4.5)v_{\pi_k}^{(j+1)} - v_{\pi_k}^{(j)} = \gamma P_{\pi_k}(v_{\pi_k}^{(j)} - v_{\pi_k}^{(j-1)}) = \cdots = \gamma^j P_{\pi_k}^j(v_{\pi_k}^{(1)} - v_{\pi_k}^{(0)}). \tag{4.5}

另一方面,因为 vπk(0)=vπk−1v_{\pi_k}^{(0)} = v_{\pi_{k-1}},所以有

vπk(1)=rπk+γPπkvπk(0)=rπk+γPπkvπk−1≥rπk−1+γPπk−1vπk−1=vπk−1=vπk(0),v_{\pi_k}^{(1)} = r_{\pi_k} + \gamma P_{\pi_k} v_{\pi_k}^{(0)} = r_{\pi_k} + \gamma P_{\pi_k} v_{\pi_{k-1}} \geq r_{\pi_{k-1}} + \gamma P_{\pi_{k-1}} v_{\pi_{k-1}} = v_{\pi_{k-1}} = v_{\pi_k}^{(0)},

上式不等号是因为 πk=arg⁡max⁡π(rπ+γPπvπk−1)\pi_k = \arg\max_{\pi}(r_{\pi} + \gamma P_{\pi} v_{\pi_{k-1}})。

将 vπk(1)≥vπk(0)v_{\pi_k}^{(1)} \geq v_{\pi_k}^{(0)} 代入 式(4.5),可得 vπk(j+1)≥vπk(j)v_{\pi_k}^{(j+1)} \geq v_{\pi_k}^{(j)}。

Example
值迭代、策略迭代、截断策略迭代三种算法的收敛速度示意图

可以看到:

  • 策略迭代收敛最快;
  • 值迭代收敛最慢;
  • 截断策略迭代介于两者之间。

例子

在下图(左)的情境下使用截断策略迭代算法。

定义 ∥vk−v∗∥\|v_k - v^*\| 为时刻 kk 的状态值误差。停止准则为 ∥vk−v∗∥<0.01\|v_k - v^*\| < 0.01。

  • 横轴:迭代次数(iteration num)
  • 纵轴:状态值误差(state value error)
Example Example
截断策略迭代示例

可以发现:对 truncated policy iteration-x 算法:

  • xx 值越大(策略评估中迭代次数越多),值估计收敛越快。
  • 但当 xx 很大时,增加 xx 的收益迅速下降。
  • 实践中,在策略评估步骤执行少量的迭代次数即可。

总结

  • 值迭代:求解贝尔曼最优方程的迭代算法。给定初始值 v0v_0,

    vk+1=max⁡π(rπ+γPπvk)v_{k+1} = \max_\pi (r_\pi + \gamma P_\pi v_k)

    等价于两步:{策略更新(PU):πk+1=arg max⁡π(rπ+γPπvk)值更新(VU):vk+1=rπk+1+γPπk+1vk\begin{cases} \text{策略更新(PU):} \pi_{k+1} = \argmax_\pi (r_\pi + \gamma P_\pi v_k) \\ \text{值更新(VU):} v_{k+1} = r_{\pi_{k+1}} + \gamma P_{\pi_{k+1}} v_k \end{cases}

  • 策略迭代:给定初始策略 π0\pi_0,

    由两步实现:{策略评估(PE):vπk=rπk+γPπkvπk策略改进(PI):πk+1=arg max⁡π(rπ+γPπvπk)\begin{cases} \text{策略评估(PE):} v_{\pi_k} = r_{\pi_k} + \gamma P_{\pi_k} v_{\pi_k} \\ \text{策略改进(PI):} \pi_{k+1} = \argmax_\pi (r_\pi + \gamma P_\pi v_{\pi_k}) \end{cases}

  • 截断策略迭代:策略评估中执行有限步迭代


强化学习的数学基础 - Chapter 4
http://dbqdss.github.io/2026/07/22/个人学习笔记/AI Notes/Reinforcement Learning/强化学习的数学原理/MathFoundationRL-Ch04/
作者
失去理想的獾
发布于
2026年7月22日
许可协议