直接法
本文作者:天疆说
定义
直接法是轨迹优化的一大类数值方法:将无限维的最优控制问题中的状态 与控制 同时在离散网格上参数化,把动力学方程 替换为一组代数约束,连同边界条件、路径约束和性能指标一起,构成有限维的非线性规划(NLP)问题,再用 SQP、内点法等通用 NLP 算法求解[200][260][371][198][642][195]。
与间接法相对:间接法先解析推导庞特里亚金极大值原理得到包含协态变量的两点边值问题(TPBVP),再数值求解。直接法跳过协态方程,直接对状态/控制做优化。两种路线最终都收敛到 KKT 条件,因此当离散网格趋于精细时,直接法 NLP 的拉格朗日乘子与间接法的协态变量之间存在明确的对应关系,见 Hager 1976 与 Benson 2005。
一般数学形式
考虑 Bolza 形式的连续最优控制问题
s.t. (动力学)、边界条件 、路径约束 、盒形上下界。
直接法把这个无限维问题按下式离散化
其中 称为缺陷约束(defect constraint),用以近似满足动力学方程。最终求解的 NLP 为
直接法分支之间的差别,主要是用什么样的离散策略构造 。
主要分支
按离散策略,直接法可分为:
- 直接打靶(direct shooting):只参数化有限个控制参数(如 pitch 角的多项式系数),动力学用显式 ODE 积分器前向积分,将终端约束作为非线性约束交给 NLP。变量少,但误差沿轨迹迅速累积,对参数初值敏感。早期 POST、GTS 等发射轨道优化程序属此类。
- 多重打靶(multiple shooting):将区间分段,每段独立积分,在分段点施加状态连续性约束。改善了误差累积,但变量规模扩大。
- 直接配点(direct collocation):在每个子区间用低阶分段多项式(如 Hermite-Simpson 三次、五次 Gauss-Lobatto)插值状态,在配点处强制满足动力学,得到稀疏的缺陷约束。详见 直接配点法。
- 伪谱法(pseudospectral method):在整个区间用单一高阶全局 Lagrange 多项式插值,配点取 Legendre-Gauss / Legendre-Gauss-Radau / Legendre-Gauss-Lobatto 正交节点。具有谱收敛性,详见 伪谱法。
- 序列凸规划(sequential convex programming, SCP):在每个参考解处线性化非凸动力学,配合信赖域,逐次求解二阶锥规划(SOCP)子问题。可实时收敛,详见 序列凸规划。
- 离散力学与最优控制(DMOC):不离散 ODE,而直接离散变分原理(Lagrange-d'Alembert),约束为离散 Euler-Lagrange 方程。保辛、保动量,详见 离散力学与最优控制。
NLP 求解器
直接法最终都要解一个大尺度 NLP。航天领域常用的求解器有:
- SNOPT:稀疏 SQP,适合约束与梯度稀疏、变量数千至百万级的问题[335]。
- Ipopt:原对偶内点法,开源,对大规模非凸 NLP 鲁棒,见 Wächter 与 Biegler 2006。
- CasADi:符号计算 + 自动微分框架,可调用上述求解器。在伪谱配点中广泛使用[194]。
伪谱配点常用 Patterson 与 Rao 2014 的 GPOPS-II、DIDO(Ross)、SOCS(Betts)、OTIS(Hargraves & Paris)等专门的轨迹优化软件作为前端,内部再调用上述求解器[531]。
KKT 与协态的对应
直接法的最大理论魅力在于:当配点网格趋于精细时,NLP 问题的 KKT 乘子 在已知线性变换下收敛到连续 OCP 的协态变量,见 Hager 1976、Benson 2005 与 Elnagar 等 1995。这意味着:
- 可以从直接法解里反推出协态时间历程,从而计算 Hamiltonian 是否守恒,作为解的精度校核。
- 可以用直接法解为间接法提供初值,做直接-间接混合求解。
伪谱法因配点正交,这种映射最干净,称为 covector mapping theorem,见 Benson 等 2006。这也是 伪谱法 在工程中受欢迎的关键原因之一。
应用要点
直接法相对于间接法的工程优势主要在三点:
- 不需要解析推导协态方程。复杂非线性的航天器动力学(如 CR3BP、星历模型 + 各种摄动)下,解析推导极大值原理极费力。直接法把这件事交给 NLP 求解器内部的有限差分或自动微分。
- 收敛域宽。间接法对协态初值极敏感,直接法对状态/控制初值则宽容得多。
- 路径约束处理简单。盒形上下界、避障、安全锥等直接作为 NLP 约束,无需事先猜测 constrained/unconstrained 弧段结构。
代价:NLP 规模大(变量数 ,配点法典型 ,伪谱法 每段),且只收敛到局部极小,无全局最优保证。低推力、长时间、多圈任务里,需要良好的初值(如 同伦法、不变流形 拼接、强化学习)才能收敛到有意义的局部最优。
