跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言AI算法

微分动态规划 DDP 与迭代线性二次型调节器 iLQR 理论推导

对非线性轨迹优化问题,分析了线性二次型调节器 (LQR) 的局限性,指出其在非线性系统和大范围机动中的不足。基于贝尔曼最优性原理,介绍了微分动态规划 (DDP) 算法的核心思想,即在每个轨迹点进行二阶泰勒展开以逼近非线性动力学。通过推导值函数与动作值函数的梯度及海森矩阵,给出了 DDP 及退化的迭代线性二次型调节器 (iLQR) 的前向传播与反向更新公式,完成了算法的理论推导。

ByteFlow发布于 2026/2/8更新于 2026/10/245.6K 浏览
微分动态规划 DDP 与迭代线性二次型调节器 iLQR 理论推导

1 LQR 算法的局限性

若系统动力学特性可以用一组线性微分方程表示,且性能指标为状态变量和控制变量的二次型函数,则此类最优控制问题称为线性二次型问题。线性二次调节器 (Linear Quadratic Regulator, LQR) 是求解线性二次型问题常用的求解方法之一,其数学形式优美且求解解析性强。然而,LQR 固有的局限性也相当显著,主要体现在两个方面:

  • LQR 的核心理论建立在线性系统模型与二次型代价函数的基础之上,对非线性的被控对象应用 LQR 必须首先在工作点附近进行线性化,这种近似处理在状态偏离工作点较大或期望优化的轨迹远离线性化区域时,控制器性能会急剧下降甚至导致不稳定;
  • LQR 本质上是一种无限时间域的静态状态反馈策略,它求解的是一个全局统一的、固定的反馈增益矩阵,通常用于初解生成。静态反馈难以处理具有复杂约束、时变目标或需要在状态空间中进行大范围机动的优化问题。

图片

从 LQR 的线性化局限可以看出,对于轨迹优化问题

$$J(\boldsymbol{u}) = \ell_f(\boldsymbol{x}N) + \sum{k=0}^{N-1}{\ell(\boldsymbol{x}_k, \boldsymbol{u}k)}$$ $$s.t. \quad \boldsymbol{x}{k+1}=\boldsymbol{f}(\boldsymbol{x}_k, \boldsymbol{u}_k), k=0,1,\cdots ,N-1$$

其中系统动力学和损失函数均为非线性函数。若仅在 $x_0$ 处线性化,那么在给定轨迹的其他位置 $x_i$ 都不容易满足该局部线性假设。自然地,如果在每个轨迹点都进行线性化,就能避免单一线性模型带来的误差,同时当轨迹点足够稠密时能取得接近非线性模型的精度。本节介绍应用该思想处理非线性轨迹优化问题的微分动态规划 (Differential Dynamic Programming, DDP) 算法及其特例迭代线性二次型调节器 iLQR 算法。

2 贝尔曼最优性原理

离散时间系统的控制问题本质上是基于迭代的多级决策问题,求解的核心是贝尔曼最优性原理 (Bellman's Principle of Optimality),表述为:若

$$\boldsymbol{x}(1), \boldsymbol{x}(2), \cdots , \boldsymbol{x}(N)$$

是 0 时刻起,以 $\boldsymbol{x}(0)$ 为初始状态的控制问题最优解,则对 $\forall k=0,1,\cdots ,N-1$,决策序列

$$\boldsymbol{x}(k+1), \boldsymbol{x}(k+2), \cdots , \boldsymbol{x}(N)$$

是 $k$ 为初始时刻,$x_k$ 为初始状态的子问题的最优解。贝尔曼最优性原理体现了动态规划在控制理论中的应用。

为了应用贝尔曼最优性原理,定义最优控制下最小化的性能指标

$$V(\boldsymbol{x}(k),k) \stackrel{\mathrm{def}}{=}\min _{\boldsymbol{u}\in \mathcal{U}}J(\boldsymbol{u}; \boldsymbol{x}(k),k), k=0,1,\cdots$$

为最优控制问题的值函数 (Value Function)。离散时间最优控制问题的最优控制满足以下关于值函数的贝尔曼方程 (Bellman Equation)

$$\begin{cases} V(\boldsymbol{x}(N),N)=h_D(\boldsymbol{x}(N), N)\ V(\boldsymbol{x}(k),k)=\underset{\boldsymbol{u}\in \mathcal{U}}{\min}\left{ g_D(\boldsymbol{x}(k),\boldsymbol{u}(k),k)+V(\boldsymbol{x}(k+1), k+1) \right} ,,k=N-1,\cdots ,0\\end{cases}$$

本质上是一个反向动态规划过程。若能解得贝尔曼方程的唯一解,即对 $\forall k=0,1,\cdots ,N-1$ 都有已知的函数 $V(\boldsymbol{x}(k),k)$,则对于任意时刻 $k$ 和任意可能状态 $x_k$,可得闭环最优控制

$$\boldsymbol{u}(k)=\mathrm{arg}\min _{\boldsymbol{u}\in \mathcal{U}}\left{ g_D(\boldsymbol{x}(k),\boldsymbol{u}(k),k)+V(f_D(\boldsymbol{x}(k),\boldsymbol{u}(k), k), k+1) \right}$$

3 微分动态规划 DDP 原理

对于第 $k$ 个轨迹点,将系统状态方程 $\boldsymbol{f}$ 在 $\boldsymbol{x}=\boldsymbol{x}_k$、$\boldsymbol{u}=\boldsymbol{u}_k$ 处二阶展开

$$\boldsymbol{f}(\boldsymbol{x}_k+\delta \boldsymbol{x}, \boldsymbol{u}k+\delta \boldsymbol{u}) =\boldsymbol{f}(\boldsymbol{x}k, \boldsymbol{u}k) +\boldsymbol{F}{\boldsymbol{x}}\delta \boldsymbol{x}+\boldsymbol{F}{\boldsymbol{u}}\delta \boldsymbol{u}\,, +\frac{1}{2}\boldsymbol{F}{\boldsymbol{xx}}(\delta \boldsymbol{x}\otimes \boldsymbol{I}n) \delta \boldsymbol{x}+\frac{1}{2}\boldsymbol{F}{\boldsymbol{uu}}(\delta \boldsymbol{u}\otimes \boldsymbol{I}m) \delta \boldsymbol{u}+\frac{1}{2}\boldsymbol{F}{\boldsymbol{xu}}(\delta \boldsymbol{x}\otimes \boldsymbol{I}m) \delta \boldsymbol{u}+\frac{1}{2}\boldsymbol{F}{\boldsymbol{ux}}(\delta \boldsymbol{u}\otimes \boldsymbol{I}_n) \delta \boldsymbol{x}$$

同样地,将损失函数在 $\boldsymbol{x}=\boldsymbol{x}_k$、$\boldsymbol{u}=\boldsymbol{u}_k$ 处二阶展开

$$J(\boldsymbol{u}) =\boldsymbol{\ell }{f, \boldsymbol{x}}^{T}\delta \boldsymbol{x}N+\frac{1}{2}\delta \boldsymbol{x}{N}^{T}\boldsymbol{\ell }{f, \boldsymbol{xx}}\delta \boldsymbol{x}N+\\sum{k=0}^{N-1}{\left( \boldsymbol{\ell }{\boldsymbol{x}}^{T}\delta \boldsymbol{x}k+\boldsymbol{\ell }{\boldsymbol{u}}^{T}\delta \boldsymbol{u}k+\frac{1}{2}\delta \boldsymbol{x}{k}^{T}\boldsymbol{\ell }{\boldsymbol{xx}}\delta \boldsymbol{x}k+\frac{1}{2}\delta \boldsymbol{u}{k}^{T}\boldsymbol{\ell }{\boldsymbol{uu}}\delta \boldsymbol{u}k+\frac{1}{2}\delta \boldsymbol{x}{k}^{T}\boldsymbol{\ell }{\boldsymbol{xu}}\delta \boldsymbol{u}k+\frac{1}{2}\delta \boldsymbol{u}{k}^{T}\boldsymbol{\ell }_{\boldsymbol{ux}}\delta \boldsymbol{x}_k \right)}$$

根据贝尔曼最优性原理可得

$$\begin{cases} V_N(\boldsymbol{x}_N) =\ell _f(\boldsymbol{x}_N)\ V_k(\boldsymbol{x}_k) =\min _{\boldsymbol{u}_k}\left{ \ell (\boldsymbol{x}k, \boldsymbol{u}k) +V{k+1}(\boldsymbol{x}{k+1}) \right}\\end{cases}$$

对值函数在 $\boldsymbol{x}=\boldsymbol{x}_k$ 处二阶泰勒展开

$$V_k(\boldsymbol{x}_k+\delta \boldsymbol{x}) =V_k(\boldsymbol{x}k) +\boldsymbol{s}{k}^{T}\delta \boldsymbol{x}+\frac{1}{2}\delta \boldsymbol{x}^T\boldsymbol{S}_k\delta \boldsymbol{x}$$

设动作值函数

$$Q_k(\boldsymbol{x}_k, \boldsymbol{u}_k) =\ell (\boldsymbol{x}k, \boldsymbol{u}k) +V{k+1}(\boldsymbol{x}{k+1}) =\ell (\boldsymbol{x}_k, \boldsymbol{u}k) +V{k+1}(\boldsymbol{f}(\boldsymbol{x}_k, \boldsymbol{u}_k))$$

对动作 - 值函数在 $\boldsymbol{x}=\boldsymbol{x}_k$、$\boldsymbol{u}=\boldsymbol{u}_k$ 处二阶泰勒展开

$$Q_k(\boldsymbol{x}k+\delta \boldsymbol{x}, \boldsymbol{u}k+\delta \boldsymbol{u}) =Q_k(\boldsymbol{x}k, \boldsymbol{u}k) +\boldsymbol{Q}{k,\boldsymbol{x}}^{T}\delta \boldsymbol{x}+\boldsymbol{Q}{k,\boldsymbol{u}}^{T}\delta \boldsymbol{u}\+\frac{1}{2}\delta \boldsymbol{x}^T\boldsymbol{Q}{k,\boldsymbol{xx}}\delta \boldsymbol{x}+\frac{1}{2}\delta \boldsymbol{u}^T\boldsymbol{Q}{k,\boldsymbol{uu}}\delta \boldsymbol{u}+\frac{1}{2}\delta \boldsymbol{x}^T\boldsymbol{Q}{k,\boldsymbol{xu}}\delta \boldsymbol{u}+\frac{1}{2}\delta \boldsymbol{u}^T\boldsymbol{Q}{k,\boldsymbol{ux}}\delta \boldsymbol{x}$$

求导利用链式法则和乘法原理

$$\boldsymbol{Q}{k,\boldsymbol{u}}=\boldsymbol{\ell }{\boldsymbol{u}}+\boldsymbol{F}{\boldsymbol{u}}^{T}\boldsymbol{s}{k+1} $$ $$\boldsymbol{Q}{k,\boldsymbol{xx}}=\mathcal{L }{\boldsymbol{xx}}+\boldsymbol{F}{\boldsymbol{x}}^{T}\boldsymbol{S}{k+1}\boldsymbol{F}{\boldsymbol{x}}+\underbrace{T(\boldsymbol{F}{\boldsymbol{xx}})(\boldsymbol{s}{k+1}^{}\otimes \boldsymbol{I}n)}{\text{二阶部分}} $$ $$\boldsymbol{Q}{k,\boldsymbol{uu}}=\mathcal{L }{\boldsymbol{uu}}+\boldsymbol{F}{\boldsymbol{u}}^{T}\boldsymbol{S}{k+1}\boldsymbol{F}{\boldsymbol{u}}+\underbrace{T(\boldsymbol{F}{\boldsymbol{uu}})(\boldsymbol{s}{k+1}^{}\otimes \boldsymbol{I}m)}{\text{二阶部分}} $$ $$\boldsymbol{Q}{k,\boldsymbol{ux}}=\mathcal{L }{\boldsymbol{ux}}+\boldsymbol{F}{\boldsymbol{u}}^{T}\boldsymbol{S}{k+1}\boldsymbol{F}{\boldsymbol{x}}+\underbrace{T(\boldsymbol{F}{\boldsymbol{ux}})(\boldsymbol{s}_{k+1}^{}\otimes \boldsymbol{I}n)}{\text{二阶部分}} $$

当不考虑环境的二阶属性时,DDP 退化为迭代 LQR 算法 (Iterative Linear Quadratic Regulator, iLQR)。

对泛函增量 $\varDelta V_k(\boldsymbol{x}_k+\delta \boldsymbol{x}) =\min _{\delta \boldsymbol{u}}\left{ \varDelta Q_k(\boldsymbol{x}_k+\delta \boldsymbol{x}, \boldsymbol{u}_k+\delta \boldsymbol{u}) \right}$ 求最优扰动 ${{\partial \varDelta Q_k(\boldsymbol{x}_k+\delta \boldsymbol{x}, \boldsymbol{u}_k+\delta \boldsymbol{u})}/{\partial \delta \boldsymbol{u}}}=\mathbf{0}$ 可得

$$\delta \boldsymbol{u}^*=\boldsymbol{K}_k\delta \boldsymbol{x}+\boldsymbol{d}_k$$

其中 $\boldsymbol{K}k=-\boldsymbol{Q}{k,\boldsymbol{uu}}^{-1}\boldsymbol{Q}{k,\boldsymbol{ux}}$、$\boldsymbol{d}k=-\boldsymbol{Q}{k,\boldsymbol{uu}}^{-1}\boldsymbol{Q}{k,\boldsymbol{u}}$

将 $\delta \boldsymbol{u}^*$ 代回 $\varDelta Q_k(\boldsymbol{x}_k+\delta \boldsymbol{x}, \boldsymbol{u}_k+\delta \boldsymbol{u})$ 对比 $\varDelta V_k(\boldsymbol{x}k+\delta \boldsymbol{x}) =\boldsymbol{s}{k}^{T}\delta \boldsymbol{x}+{{\delta \boldsymbol{x}^T\boldsymbol{S}_k\delta \boldsymbol{x}}/{2}}$ 可得

$$\begin{cases} \boldsymbol{s}k=\boldsymbol{Q}{k,\boldsymbol{x}}+\boldsymbol{K}{k}^{T}\boldsymbol{Q}{k,\boldsymbol{uu}}\boldsymbol{d}k+\boldsymbol{Q}{k,\boldsymbol{ux}}^{T}\boldsymbol{d}k+\boldsymbol{K}{k}^{T}\boldsymbol{Q}{k,\boldsymbol{u}}\ \boldsymbol{S}k=\boldsymbol{Q}{k,\boldsymbol{xx}}+\boldsymbol{K}{k}^{T}\boldsymbol{Q}{k,\boldsymbol{uu}}\boldsymbol{K}k+\boldsymbol{Q}{k,\boldsymbol{xu}}^{T}\boldsymbol{K}k+\boldsymbol{K}{k}^{T}\boldsymbol{Q}{k,\boldsymbol{ux}}\\end{cases}$$

至此,DDP 与 iLQR 算法的核心原理推导完成

4 算法流程与图示

图片

图片

目录

  1. 1 LQR 算法的局限性
  2. 2 贝尔曼最优性原理
  3. 3 微分动态规划 DDP 原理
  4. 4 算法流程与图示

更多推荐文章

查看全部
  • Flutter 组件 tavily_dart 在鸿蒙系统的适配与进阶应用
  • Google Stitch 工具简介、安装使用与案例应用指南
  • 在飞书中接入 OpenClaw 打造专属 AI 助手
  • 通义万相 2.1 文生视频模型部署与硬件性能实测
  • Python 实现 2025 中秋月相计算与月球数据可视化
  • Apache IoTDB 结果集排序与查询对齐模式:ORDER BY 与 ALIGN BY DEVICE 使用
  • MySQL 权限撤销(REVOKE)机制与语法安全实践
  • OpenClaw Skills 框架解析与开发实战
  • Flutter pathfinding 库的 OpenHarmony 适配实战
  • 大模型落地应用:企业智能化转型的策略与实践
  • 解决 AnythingLLM 文件定位问题:从错误分析到 Whisper 模型路径优化
  • Trae、Cursor、Copilot、Windsurf 深度对比评测
  • Flutter 组件 tavily_dart 适配鸿蒙系统:AI 聚合搜索与语义降噪方案
  • RV1106开发板实战:环境搭建与系统编译指南
  • 国产数据库新机遇:电科金仓以融合技术同步全球竞争
  • 微软 Excel 原生支持 Python 功能详解与机器学习应用
  • Ubuntu 20.04 安装 Ollama 与 Open WebUI 部署大模型指南
  • Linux C/C++ 调试器 gdb/cgdb 实战指南
  • JavaScript 性能优化实战:核心技巧与最佳实践
  • 利用 AI 辅助开发高性能贪吃蛇游戏实战

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online