04 · 价值迭代与策略迭代¶
对照:原书第 4 章,印刷页 57–76(PDF 第 70–89 页)。本章顺序为 value iteration、policy iteration、truncated policy iteration。
4.1 · 价值迭代¶
原书把一次价值迭代拆成两步:
合并两步就是上一章的 \(\boldsymbol v_{k+1}=f(\boldsymbol v_k)\)。第一步产生当前估计下的贪心策略,第二步只做一次价值备份。它并没有把这个策略完整评估到 \(\boldsymbol v_{\pi_{k+1}}\)。
4.2 · 策略迭代¶
策略迭代先评估给定策略,再做贪心改进:
改进策略满足 \(T_{\pi_{k+1}}\boldsymbol v_{\pi_k}\geq\boldsymbol v_{\pi_k}\),反复应用单调算子并取极限,得到 \(\boldsymbol v_{\pi_{k+1}}\geq\boldsymbol v_{\pi_k}\)。这里 \(T_\pi\boldsymbol v\) 只是对 \(\boldsymbol r_\pi+\gamma P_\pi\boldsymbol v\) 的简写。
如果只是近似评估,不能把精确策略改进结论原封不动搬过来。实现也需要固定平局处理,避免在等价动作之间反复切换。
4.3 · 截断策略迭代把两者连接起来¶
固定本轮策略后,以当前价值为初值做 \(m\) 次评估:
最后取 \(\boldsymbol v_{k+1}=\boldsymbol v^{(m)}\)。\(m=1\) 对应价值迭代;把评估做充分,或直接解线性方程,就得到策略迭代的评估步骤。不能仅比较外层轮数就断言哪个方法更快,因为每轮计算量不同。
交互实验:切换一次评估、三次评估和精确评估,观察同一个环境中的价值传播。
运行与核对¶
python3 -m examples.textbook --chapter 4 --steps 120 --output outputs/book-ch04.json
from examples.textbook.core import planning
vi = planning(iterations=240)
pi = planning(exact=True)
assert max(abs(x-y) for x, y in zip(vi["values"], pi["values"])) < 1e-7
print(vi["values"][8]) # The continuing target value is 10 when gamma=0.9.
公共实现从 \(\boldsymbol v_0=0\) 诱导初始贪心策略,再进入评估与改进循环;精确评估使用带主元选择的线性方程求解。它属于原书模型设定下的教学实现,不复刻书中所有大地图实验。
下一章:Monte Carlo 方法,用采样回报替代模型期望。