非线性规划中的自适应差分动态规划(DDP)算法基础题
题目描述
考虑一个离散时间非线性动态系统的最优控制问题,该系统由以下方程描述:
状态方程:\(x_{k+1} = f(x_k, u_k)\),其中 \(x_k \in \mathbb{R}^n\) 是状态向量,\(u_k \in \mathbb{R}^m\) 是控制向量,\(f\) 是一个非线性函数。
代价函数:\(J = \phi(x_N) + \sum_{k=0}^{N-1} L(x_k, u_k)\),其中 \(\phi\) 是终端代价,\(L\) 是阶段代价,\(N\) 是时间总步数。
目标是找到控制序列 \(\{u_0, u_1, ..., u_{N-1}\}\) 来最小化总代价 \(J\)。这是一个典型的非线性规划问题,但由于其动态结构,常使用动态规划求解。差分动态规划(DDP)是一种利用动态规划原理并结合二阶近似的高效算法,特别适用于此类问题。自适应DDP则通过引入信赖域或步长控制机制来增强算法的鲁棒性和收敛性。
解题过程
第一步:问题理解与动态规划背景
- 核心思想:动态规划通过从最终时刻反向递推来求解最优控制。定义价值函数 \(V_k(x)\) 为从时刻 \(k\) 和状态 \(x\) 开始到终点的最小代价。
- 贝尔曼方程:\(V_k(x) = \min_u [ L(x, u) + V_{k+1}(f(x, u)) ]\),边界条件 \(V_N(x) = \phi(x)\)。
- 挑战:对于非线性系统,贝尔曼方程通常无法解析求解。DDP通过局部二次近似来迭代求解。
第二步:DDP算法框架——二次近似
- 初始化:从一个初始控制序列 \(\mathbf{u}^0 = \{u^0_0, ..., u^0_{N-1}\}\) 开始,通过前向仿真得到名义状态轨迹 \(\mathbf{x}^0 = \{x^0_0, ..., x^0_N\}\)。
- 反向递推:从 \(k = N-1\) 到 \(k = 0\),对价值函数 \(V_k(x)\) 和动态方程进行局部二次近似。
- 令 \(Q_k(\delta x, \delta u)\) 为在名义轨迹点 \((x^0_k, u^0_k)\) 处的二阶近似:
\[ Q_k(\delta x, \delta u) = L(x^0_k + \delta x, u^0_k + \delta u) + V_{k+1}(f(x^0_k + \delta x, u^0_k + \delta u)) \]
- 将其泰勒展开到二阶:
\[ Q_k(\delta x, \delta u) \approx Q_k^0 + Q_k^x \delta x + Q_k^u \delta u + \frac{1}{2} \begin{bmatrix} \delta x \\ \delta u \end{bmatrix}^T \begin{bmatrix} Q_k^{xx} & Q_k^{xu} \\ Q_k^{ux} & Q_k^{uu} \end{bmatrix} \begin{bmatrix} \delta x \\ \delta u \end{bmatrix} \]
其中,$ Q_k^x $、$ Q_k^u $ 是梯度向量,$ Q_k^{xx} $、$ Q_k^{uu} $、$ Q_k^{xu} $ 是Hessian矩阵块(通过链式法则计算,涉及 $ f $、$ L $、$ V_{k+1} $ 的导数)。
- 最优控制更新:通过最小化 \(Q_k\) 得到控制修正量 \(\delta u^*_k\)。
- 令 \(\frac{\partial Q_k}{\partial \delta u} = 0\):\(Q_k^u + Q_k^{ux} \delta x + Q_k^{uu} \delta u = 0\)。
- 解得:\(\delta u^*_k = - (Q_k^{uu})^{-1} (Q_k^u + Q_k^{ux} \delta x) = l_k + K_k \delta x\),
其中 \(l_k = - (Q_k^{uu})^{-1} Q_k^u\) 是反馈项,\(K_k = - (Q_k^{uu})^{-1} Q_k^{ux}\) 是增益矩阵。
- 价值函数更新:将 \(\delta u^*_k\) 代入 \(Q_k\),得到价值函数的二次近似更新:
\[ \Delta V_k = -\frac{1}{2} l_k^T Q_k^{uu} l_k, \quad V_k^x = Q_k^x - K_k^T Q_k^{uu} l_k, \quad V_k^{xx} = Q_k^{xx} - K_k^T Q_k^{uu} K_k \]
第三步:自适应机制——信赖域与步长控制
- 问题:二次近似仅在局部有效,过大步长可能导致发散。自适应DDP引入信赖域约束 \(\|\delta u\| \leq \Delta\) 来限制控制更新幅度。
- 实现方式:在反向递推求解 \(\delta u^*_k\) 时,将其转换为带约束的优化问题:
\[ \min_{\delta u} Q_k(\delta x, \delta u) \quad \text{s.t.} \quad \|\delta u\| \leq \Delta_k \]
- 通过调整信赖域半径 \(\Delta_k\) 来保证近似精度:计算实际代价减少量与预测减少量的比值 \(\rho\):
\[ \rho = \frac{J_{\text{old}} - J_{\text{new}}}{\text{predicted decrease}} \]
- 若 \(\rho\) 接近1(近似良好),则扩大 \(\Delta\);若 \(\rho\) 很小(近似差),则缩小 \(\Delta\)。
- 前向仿真与迭代:用更新后的控制序列进行前向仿真,得到新轨迹和代价。根据 \(\rho\) 判断是否接受该次迭代,并调整 \(\Delta\) 用于下一次迭代。
第四步:算法流程总结
- 初始化:初始控制序列 \(\mathbf{u}^0\),初始信赖域半径 \(\Delta^0\)。
- 迭代循环直到收敛:
a. 前向仿真:用当前控制序列计算名义轨迹和代价 \(J_{\text{old}}\)。
b. 反向递推:从 \(k = N-1\) 到 \(0\),计算 \(Q\)-函数的导数和Hessian,在信赖域内求解 \(\delta u^*_k\)。
c. 控制更新:\(u^{\text{new}}_k = u^0_k + \delta u^*_k\)。
d. 新轨迹仿真:用 \(u^{\text{new}}_k\) 前向仿真,计算 \(J_{\text{new}}\)。
e. 自适应调整:计算比值 \(\rho\),根据 \(\rho\) 接受或拒绝更新,并调整 \(\Delta\)。 - 输出:最优控制序列和最小代价。
第五步:关键点与注意事项
- 导数计算:需计算 \(f\) 和 \(L\) 的一阶和二阶导数,通常使用自动微分或数值差分。
- 正定性:确保 \(Q_k^{uu}\) 正定,否则需正则化(如加单位矩阵)。
- 收敛性:自适应机制保障全局收敛,但计算量较大。
- 应用:适用于机器人轨迹规划、航天器控制等非线性动态优化问题。
通过以上步骤,自适应DDP将非线性规划问题转化为一系列局部二次规划问题,并利用信赖域自适应控制逼近精度,从而高效稳定地求解最优控制序列。