Differential Dynamic Programming (DDP)
✅ 本章定位:理解 DDP 如何在 iLQR 的基础上引入二阶动力学近似,实现更快的收敛速度;掌握 DDP 与 iLQR 的精确差异和各自的适用场景。
一、DDP 的核心思想
从 iLQR 到 DDP
iLQR 在每轮迭代中将非线性动力学做一阶泰勒展开,然后解一个 LQR 子问题。DDP 的做法几乎完全一样,唯一的区别在于:
对动力学也做二阶泰勒展开。
这意味着 DDP 在构造局部近似时,不仅考虑了动力学的梯度方向(一阶),还考虑了动力学的曲率信息(二阶),因此每步近似更精确,收敛更快。
iLQR: δx_{t+1} ≈ A·δx + B·δu (一阶动力学)
DDP: δx_{t+1} ≈ A·δx + B·δu + ½·[δx,δu]ᵀ·C·[δx,δu] (二阶动力学)
其中 C 是动力学的 Hessian 张量。
二、与 iLQR 的精确差异
构造 LQR 子问题的三个操作
| 操作 | iLQR | DDP |
|---|---|---|
| 线性化动力学 | 一阶泰勒:A = ∂f/∂x,B = ∂f/∂u | 二阶泰勒:额外计算 C = ∂²f/∂(x,u)² |
| 二次化代价 | 二阶泰勒:Q、R | 二阶泰勒:Q、R(与 iLQR 相同) |
| 求解 Riccati 方程 | 标准形式 | 需要额外修正项来吸收二阶动力学项 |
二阶动力学带来的代价
DDP 在逆向传递中需要处理二阶动力学项。将二阶展开代入 Riccati 方程后,会多出一项涉及动力学 Hessian 的修正:
$$V_x'(x) = V_x(f(x,u)) + V_{xx}(f(x,u)) \cdot f_x(x,u)$$
$$V_{xx}'(x) = f_x(x,u)^T V_{xx} f(x,u) + V_{xx}(f(x,u)) \cdot f_{xx}(x,u) + l_{xx}(x,u)$$
其中 f_{xx} 就是动力学的二阶导数——iLQR 完全忽略了这一项。
梯度需求对比
| 导数 | iLQR 是否需要 | DDP 是否需要 | 计算成本 |
|---|---|---|---|
| ∂f/∂x(雅可比) | ✅ | ✅ | 中 |
| ∂f/∂u(雅可比) | ✅ | ✅ | 中 |
| ∂²f/∂x²(Hessian) | ❌ | ✅ | 高 |
| ∂²f/∂u²(Hessian) | ❌ | ✅ | 高 |
| ∂²f/∂x∂u(交叉 Hessian) | ❌ | ✅ | 高 |
三、收敛性差异
理论保证
| 性质 | iLQR | DDP |
|---|---|---|
| 收敛阶数 | 线性收敛(一阶) | 二次收敛(二阶) |
| 每轮计算量 | 较低(只算雅可比) | 较高(需算 Hessian) |
| 总迭代次数 | 较多 | 较少(通常 2-3 倍差距) |
直觉:iLQR 每步走的方向大致正确但步长受限于线性近似的精度;DDP 因为有曲率信息,不仅能走更精确的方向,还能自适应调整步长。
实际选择
问题特征 → 推荐方法
─────────────────────
动力学平滑、二阶导容易算 → DDP(总时间更短)
动力学复杂、二阶导计算昂贵 → iLQR(每轮更快)
对精度要求极高 → DDP
需要鲁棒性(不依赖精确二阶导) → iLQR
四、算法流程
DDP 的算法流程与 iLQR 几乎完全一致,区别仅在于逆向传递:
算法:DDP 轨迹优化
输入/输出:同 iLQR
步骤:
1. 初始化:设定初始轨迹 (x̄, ū)
2. Repeat until convergence:
(a) 前向传递
- 用当前控制 ū 仿真得到状态轨迹 x̄
- 计算当前总代价 J
(b) 计算 Jacobian 和 Hessian
- 一阶:Aₜ = ∂f/∂x, Bₜ = ∂f/∂u ← 与 iLQR 相同
- 二阶:Cₜ = ∂²f/∂(x,u)² ← DDP 额外需要
(c) 逆向传递(含二阶修正)
- 初始化:Vₓ = lₓ, Vₓₓ = lₓₓ
- 对 t = T-1, ..., 0:
· 计算 Qₓ, Qᵤ, Qₓₓ, Qᵤᵤ, Qₓᵤ(含动力学二阶修正项)
· 计算 kₜ(feedforward), Kₜ(feedback gain)
· 更新 Value 函数导数 Vₓ, Vₓₓ(含 fₓₓ 修正项) ← DDP 的关键区别
(d) 线搜索 + 更新控制
- u_new = ū + α·(k + K·δx)
(e) 收敛检查
与 iLQR 逆向传递的唯一区别:Vₓₓ 的更新公式中多了 Vₓₓ · fₓₓ 这一项(动力学 Hessian 对 Value 函数 Hessian 的贡献)。
五、iLQR 与 DDP 的关系总结
LQR(线性系统,一次求解)
│
├─ 加一层迭代 + 一阶线性化 → iLQR(非线性系统,线性收敛)
│
└─ 加一层迭代 + 二阶线性化 → DDP(非线性系统,二次收敛)
两者的关系可以概括为:
| LQR | iLQR | DDP | |
|---|---|---|---|
| 系统类型 | 线性 | 非线性 | 非线性 |
| 动力学近似阶数 | 精确(本身就是线性) | 一阶 | 二阶 |
| 代价近似阶数 | 精确(本身就是二次) | 二阶 | 二阶 |
| 是否需要迭代 | ❌ | ✅ | ✅ |
| 每轮闭式解 | ✅ | ✅ | ✅(修正后) |
| 收敛速度 | N/A | 线性 | 二次 |
| 核心瓶颈 | 仅限线性系统 | 一阶近似的精度 | 二阶导的计算成本 |
六、工程实践
DDP 的常见问题
1. Hessian 计算成本
- 对于解析可微的动力学(如刚体),可以用自动微分或符号推导
- 对于黑箱仿真器,需要用有限差分近似,成本随状态维度平方增长
2. 数值稳定性
- 二阶项可能使 Hessian 不定(非正定),导致下降方向不可靠
- 常用 Levenberg-Marquardt 正则化:在 Hessian 对角线加 λI
3. iLQR 实际上更常用
- 在角色动画领域,iLQR 的使用频率远高于 DDP
- 原因:大多数物理仿真器的二阶导数难以获取,而 iLQR 的一阶近似在大多数场景下已经足够
七、深入学习
前置知识
相关方法
参考资料
- Mayne, D. Q. (1966). A Second-Order Solution of the Optimal Control Problem. (DDP 的原始论文)
- Tassa, Y., Mansard, N., & Todorov, E. (2012). Control-Limited Differential Dynamic Programming. (带控制约束的 DDP)
本文出自 CaterpillarStudyGroup,转载请注明出处。 https://caterpillarstudygroup.github.io/GAMES105_mdbook/