最优控制与强化学习是同一个序贯决策问题的两套语言:控制界沿连续、模型已知的路线走到 HJB 与 LQR,RL 沿离散、模型未知的路线走到 Bellman 与 Q-learning。本篇建立两套词汇的逐项映射,并打开三个接口——MPC↔policy、优化器↔控制器、稳定与安全的控制式补课。
历史合流
| 年份 | 事件 |
|---|---|
| 1950s | Bellman 动态规划,并命名维数灾难 curse of dimensionality |
| 1956–60 | Pontryagin 极值原理确立 |
| 1960 | Kalman 提出 LQR,与 Kalman 滤波 组合成 LQG |
| 1989 | Watkins 的 Q-learning:把 Bellman 方程改写为随机逼近更新 |
| 2013– | DQN 及后续:值函数改用神经网络逼近 |
两个社区的分野在假设而非问题:控制假设模型已知,换来解析解与保证;RL 假设模型未知,用采样换一般性。Q-learning 之后边界基本消失——它本就可以读作自适应控制的一种。
概念词典
| RL | 控制 | 备注 |
|---|---|---|
| 状态 | 状态 | 即 状态空间表示 State-Space 中的 |
| 动作 | 控制输入 | 动作空间 ↔ 输入约束集 |
| 转移核 | 过程噪声 | |
| 策略 | 反馈律 | 控制默认确定性,RL 靠随机性探索 |
| 奖励 | 代价 | 符号相反:max 奖励 ⇔ min 代价 |
| 值函数 | cost-to-go | 同一对象 |
| 折扣 | 有限时域 / 平均代价 | 控制少用折扣,多直接约束时域 |
| model-based RL | 系统辨识 + 控制器设计 | 学动力学 = 辨识 |
| 探索噪声 | 持续激励 persistent excitation | 同一现象,两个名字 |
MDP 即在 马尔可夫链 上加决策与奖励;反过来,带输入的马尔可夫链就是随机控制系统。
Bellman 方程与 HJB
离散 Bellman 最优方程(取 min 代价约定):
令 、,取 展开并保留一阶项,得到 HJB 方程:
Bellman 是 HJB 的时间离散化,HJB 是 Bellman 的连续极限;随机系统对应的期望形式同理。两者共享同一障碍—— 定义在整个状态空间上,这正是 Bellman 命名的维数灾难。RL 的全部意义可以概括为一句话:用采样加函数逼近绕开 的表格表示。
线性 、二次 时 HJB 有解析解:, 满足 Riccati 方程,最优策略退化为线性增益 。因此 LQR 是 RL 算法的天然公测集——Q-learning 应当从数据中收敛出同一个 :
import numpy as np
# 同一被控对象:双积分器 x''=u 的离散化(dt=0.1),代价 l = x'Qx + u'Ru
A = np.array([[1.0, 0.1], [0.0, 1.0]])
B = np.array([[0.005], [0.1]])
Qm, R, gamma = np.eye(2), np.array([[0.5]]), 0.95
# ---- 控制路线:折扣 Riccati 迭代,最优增益 K = γ(R+γB'PB)⁻¹B'PA ----
P = np.zeros((2, 2))
for _ in range(5000):
P = Qm + gamma*A.T@P@A - gamma**2*(A.T@P@B) @ np.linalg.solve(R + gamma*B.T@P@B, B.T@P@A)
K = gamma * np.linalg.solve(R + gamma*B.T@P@B, B.T@P@A)
print("LQR gain K:", K.ravel().round(4)) # [0.8599 1.6182]
# ---- RL 路线:Q-learning,二次参数化 Q(x,u) = z'Hz,z = [x1, x2, u] ----
H = np.eye(3)
rng = np.random.default_rng(0)
for ep in range(5000):
alpha = 0.5 - 0.45 * ep / 5000 # 步长退火
x = rng.uniform(-1, 1, 2)
for _ in range(30):
u = rng.normal(0, 0.4) if rng.random() < 0.15 \
else -(H[:2, 2] @ x) / H[2, 2] # ε-greedy;贪心动作形如 u = -K x
xn = A @ x + B.ravel() * u
us = -(H[:2, 2] @ xn) / H[2, 2] # 下一状态的贪心动作
z = np.array([x[0], x[1], u])
q = lambda zz: zz @ H @ zz
target = x @ Qm @ x + R[0, 0]*u**2 + gamma * q([*xn, us])
H += alpha * (target - q(z)) * np.outer(z, z) / (1 + z @ z)**2 # 归一化 TD 更新
x = xn
K_rl = H[:2, 2] / H[2, 2] # 从 Q 函数读出线性增益
print("RL gain K:", K_rl.round(4)) # [0.8599 1.6182] —— 两条路线会合控制路线解方程,RL 路线采样逼近,殊途同归于同一个增益。
两种闭环范式:policy 与 MPC
实现 反馈控制 Feedback 有两条路:
| 显式 policy | MPC | |
|---|---|---|
| 代表 | PID、LQR 增益、策略网络 | 滚动时域优化 |
| 设计 | 离线一次完成 | 每步在线解有限时域问题,只执行首步 |
| 在线计算 | 近似为零 | 每步一次约束优化 |
| 约束处理 | 难,饱和需专门设计 | 状态/输入约束原生支持 |
| 模型依赖 | 弱(PID 控制 可盲调) | 强,依赖预测模型 |
RL 的策略网络可视为 amortized planning:把 MPC 每步的在线优化预先蒸馏进参数。model-based RL 正好落在这两列之间——学出动力学后接 MPC(PETS 类),或再蒸馏成 policy(Dreamer 类)。
优化器即控制器
把 梯度下降 的迭代格式 看作以梯度为观测、以迭代点为状态的离散闭环系统,学习率 就是环路增益:
- 学习率过大 → 迭代振荡发散,即闭环极点越过稳定边界
- 动量 = 阻尼:heavy-ball 把一阶迭代升为二阶系统, 提供惯性并抑制高曲率方向的振荡
- PID 对照:GD 是 P 控制,动量是 D(阻尼),Nesterov 前瞻梯度是相位超前补偿,积分项负责消除常值稳态误差
- 学习率调参与 PID 增益整定本质同构
Lessard–Recht–Packard(2016)用鲁棒控制的积分二次约束(IQC)把各类优化器的收敛速度统一为闭环稳定性分析——优化器设计就是控制器设计。
控制给 RL 补的课:稳定与安全
RL 的最优性不等于稳定性:最大化累积奖励不保证闭环系统在 Lyapunov 意义 下稳定,训练收敛也不代表受控对象收敛。控制视角的对策:
- 控制 Lyapunov 函数(CLF):把 写成对策略的硬约束,稳定从训练的副作用升级为显式规格
- 控制屏障函数(CBF):保证安全集 前向不变,是 safe RL 最常用的形式化
- 鲁棒性:sim-to-real gap 本质是模型失配,鲁棒控制处理扰动与不确定性的整套工具(、扰动抑制)可直接迁移
- 分离原理:LQG 中估计(Kalman 滤波)与控制(LQR)解耦各自最优;belief-state RL 在 POMDP 里重新发明了这一结构
控制与 RL 的合理关系不是替代而是分工:模型结构与先验知识归控制,高维非线性与数据归学习——现代机器人栈里两者已经长在一起。