1. 项目概述
西湖大学的强化学习第四讲聚焦于值迭代(Value Iteration)和策略迭代(Policy Iteration)这两个经典算法。作为强化学习领域的核心内容,这两种方法在机器人控制、游戏AI、自动驾驶等场景都有广泛应用。本讲将从原理推导到代码实现,带大家彻底掌握这两种算法的本质区别和适用场景。
我在工业界实践中发现,很多工程师虽然会调用现成的RL库,但对这些基础算法的理解往往停留在表面。这会导致参数调优不得要领,算法选择缺乏依据。本文将结合我参与过的仓储机器人路径规划项目,还原这两种算法在实际问题中的应用细节。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心算法原理对比
2.1 值迭代的数学本质
值迭代的核心思想是直接优化状态价值函数V(s)。其更新公式为:
V_{k+1}(s) = max_a [R(s,a) + γΣP(s'|s,a)V_k(s')]
其中γ是折扣因子,P是状态转移概率。这个公式的直观理解是:当前状态的价值等于即时奖励加上未来可能状态的价值期望。
我在教学时常用迷宫游戏举例:假设机器人每走一步消耗1点能量(R=-1),找到出口获得100点奖励。值迭代会先计算离出口最近格子的价值,然后逐步向外传播这个价值信息。
2.2 策略迭代的双阶段特性
策略迭代分为两个交替进行的阶段:
- 策略评估:固定当前策略π,计算V^π(s)
- 策略改进:根据V^π更新策略π'=argmax_a Q^π(s,a)
这种交替进行的方式往往收敛更快。在无人机路径规划项目中,我们实测发现策略迭代通常比值迭代快3-5倍收敛。
关键区别:值迭代在每次更新时都采取贪心策略,而策略迭代会先完整评估当前策略的价值。
3. 算法实现细节
3.1 值迭代的Python实现
python复制def value_iteration(env, theta=0.0001, gamma=0.99):
V = np.zeros(env.nS)
while True:
delta = 0
for s in range(env.nS):
v = V[s]
V[s] = max([sum([p*(r + gamma*V[s_])
for p, s_, r, _ in env.P[s][a]])
for a in range(env.nA)])
delta = max(delta, abs(v - V[s]))
if delta < theta:
break
return V
这段代码有几个易错点:
- 折扣因子γ不宜过大(建议0.9-0.99),否则会导致数值不稳定
- 收敛阈值θ需要根据奖励尺度调整
- env.P[s][a]的结构需要理解清楚(每个元素是(概率, 新状态, 奖励, 终止标志)元组)
3.2 策略迭代的工程优化
在实际项目中,我们可以对经典策略迭代做两点改进:
- 异步更新:不必等所有状态都评估完才更新策略
- 提前终止:当策略连续N次不变时提前结束循环
python复制def policy_iteration(env, gamma=0.99):
policy = np.random.choice(env.nA, size=(env.nS))
while True:
# 策略评估(简化版)
V = evaluate_policy(env, policy, gamma)
# 策略改进
policy_stable = True
for s in range(env.nS):
old_action = policy[s]
policy[s] = np.argmax([sum([p*(r + gamma*V[s_])
for p,s_,r,_ in env.P[s][a]])
for a in range(env.nA)])
if old_action != policy[s]:
policy_stable = False
if policy_stable:
return policy
4. 实战应用对比
4.1 算法选择指南
根据我们的项目经验,给出以下选择建议:
| 考量因素 | 值迭代 | 策略迭代 |
|---|---|---|
| 状态空间大 | ✓更优 | 内存消耗高 |
| 需要快速原型 | 收敛慢 | ✓更快得到可用策略 |
| 最终精度要求高 | ✓更精确 | 可能早熟 |
| 转移模型复杂 | 每次迭代成本高 | ✓评估阶段可并行 |
4.2 典型问题表现
在标准的FrozenLake环境中(4x4网格世界):
- 值迭代需要约100次迭代收敛
- 策略迭代通常20次外循环即可
- 但策略迭代每次内循环需要完整策略评估
实测技巧:当状态转移具有明显局部性时(如网格世界),可以限制策略评估的迭代次数来加速。
5. 常见问题排查
5.1 算法不收敛
可能原因及解决方案:
- 折扣因子γ≥1:会导致无限回报,必须保证γ∈[0,1)
- 奖励设计不合理:建议归一化到合理区间
- 环境有吸收态但未正确处理:需要显式标记终止状态
5.2 策略振荡
表现为策略在几个动作间来回切换。解决方法:
- 引入策略惯性:新策略=αargmax(Q)+(1-α)旧策略
- 对Q值添加小的随机扰动
- 改用软性策略(如ε-greedy)
5.3 维度灾难
当状态空间过大时:
- 改用函数逼近(如DQN)
- 使用状态抽象/聚合
- 采用分层强化学习架构
6. 前沿扩展方向
现代强化学习虽然以深度RL为主流,但这些经典算法仍有其价值:
- 作为新算法的baseline
- 在小规模问题上快速验证idea
- 理解RL的本质特性
最近我们在多智能体仓库调度系统中,就结合了策略迭代和博弈论思想,设计出高效的分布式决策方案。具体做法是将其他智能体的策略视为环境动态的一部分,在每次策略评估时进行对手建模。
