最优控制 3:最优控制理论中的极小值原理与动态规划

2023-05-16

最优控制 3:使用极小值原理求解最优控制问题

  • 引言
  • 极小值原理
    • t f t_f tf 固定的情况
    • t f t_f tf 自由的情况
  • 动态规划
    • 连续系统 HJB 方程的推导

引言

经典变分法是一种特别强大的工具,但是它要求控制量必须可导且无界,这在很多问题中都是不成立的。着陆器的软着陆,卫星的姿态控制,等等。从主观上都可以分析出来,着陆器的软着陆控制,肯定是先让着陆器自由落体,然后从某一个高度开始反向喷气,最后落地一瞬间速度刚好为0。卫星的姿态控制肯定是当姿态有偏差时,用最大力矩控制一次,然后让卫星通过惯性 “转” 一段时间再反向最大力矩控制一次。这个过程控制量肯定是不可导的。

因此,有很多最优控制问题,不能用变分法解决。所以,极小值原理和动态规划是比变分法更强大的工具。本文将介绍这两种理论,下一篇博客将给出变分法、极小值原理和动态规划在解决最优控制问题时的等价性推导。(当然,前提是这个最优控制问题本身可以用三种方法去解决才行;如果某个问题不能用变分法,那谈等价性是没有意义的。)

极小值原理

在计算和使用的时候,极小值原理和变分法的公式很相似,只不过在哈密顿函数上做了改变。因为 u u u 可能不可导,所以就没有 ∂ H ∂ u = 0 \frac{\partial H}{\partial u}=0 uH=0 了,而是用别的方程或不等式去约束。下面直接通过一个问题的形式给出极小值原理。

问题:
min ⁡ u ( t ) ∈ Ω J = φ [ x ( t f ) , t f ] + ∫ t 0 t f L [ x ( t ) , u ( t ) , t ] d t s . t . x ˙ ( t ) = f [ x ( t ) , u ( t ) , t ] , x ( t 0 ) = x 0 , ψ [ x ( t f ) , t f ] = 0 \begin{align} \begin{aligned} & \min_{u(t)\in\Omega}{J=\varphi\left[x(t_f),t_f\right]+\int_{t_0}^{t_f}{L\left[x(t), u(t), t\right]}dt}\\ & s.t.\quad \dot{x}(t)=f\left[x(t), u(t), t\right], x(t_0)=x_0,\psi\left[x(t_f), t_ f\right]=0 \end{aligned} \end{align} u(t)ΩminJ=φ[x(tf),tf]+t0tfL[x(t),u(t),t]dts.t.x˙(t)=f[x(t),u(t),t],x(t0)=x0,ψ[x(tf),tf]=0

由极小值原理,该问题实现最优控制的必要条件是:

  1. 最优状态 x ∗ ( t ) x^*(t) x(t) 和最优协状态 λ ∗ ( t ) \lambda^*(t) λ(t) 满足正则方程 (这里与变分法是一样的)
    λ ˙ ∗ ( t ) = − ∂ H ( x ∗ , u ∗ , λ ∗ , t ) ∂ x x ˙ ( t ) = ∂ H ( x ∗ , u ∗ , λ ∗ , t ) ∂ λ = f [ x ∗ ( t ) , u ∗ ( t ) , t ] \begin{align} \begin{aligned} \dot{\lambda}^*(t)&=-\frac{\partial H(x^*,u^*,\lambda^*,t)}{\partial x}\\ \dot{x}(t)&=\frac{\partial H(x^*,u^*,\lambda^*,t)}{\partial \lambda}=f\left[x^*(t),u^*(t), t\right] \end{aligned} \end{align} λ˙(t)x˙(t)=xH(x,u,λ,t)=λH(x,u,λ,t)=f[x(t),u(t),t]
    其中, H ( x , u , λ , t ) = L [ x ( t ) , u ( t ) , t ] + λ T ( t ) f [ x ( t ) , u ( t ) , t ] H(x,u,\lambda,t)=L\left[x(t), u(t), t\right]+\lambda^T(t)f\left[x(t), u(t), t\right] H(x,u,λ,t)=L[x(t),u(t),t]+λT(t)f[x(t),u(t),t] 为哈密顿函数。
  2. 在最优状态 最优控制 以及最优协变量上,对应的哈密顿函数取得最小值
    Tips: 这里与变分法不一样了,因为 ∂ H ∂ u = 0 \frac{\partial H}{\partial u}=0 uH=0 不一定成立。一方面,导数不一定存在;另一方面,极值点对应的 u u u 不一定在容许控制范围内。
    H ( x ∗ ( t ) , u ∗ ( t ) , λ ∗ ( t ) , t ) = min ⁡ u ( t ) ∈ Ω H ( x ∗ ( t ) , u ( t ) , λ ∗ ( t ) , t ) \begin{align} \begin{aligned} H(x^*(t), u^*(t), \lambda^*(t) ,t)=\min_{u(t)\in\Omega}{H(x^*(t), u(t), \lambda^*(t) ,t)} \end{aligned} \end{align} H(x(t),u(t),λ(t),t)=u(t)ΩminH(x(t),u(t),λ(t),t)
  3. 边界条件与横截条件
    x ∗ ( t 0 ) = x 0 ψ [ x ∗ ( t f ) , t f ] = 0 λ ∗ ( t f ) = ∂ φ ∂ x ( t f ) + ∂ ψ T ∂ x ( t f ) ⋅ γ \begin{align} \begin{aligned} x^*(t_0) &= x_0\\ \psi\left[x^*(t_f), t_f\right] &= 0\\ \lambda^*(t_f) &= \frac{\partial \varphi}{\partial x(t_f)} + \frac{\partial \psi^T}{\partial x(t_f)}\cdot\gamma \end{aligned} \end{align} x(t0)ψ[x(tf),tf]λ(tf)=x0=0=x(tf)φ+x(tf)ψTγ
  4. t f t_f tf 自由时,哈密顿函数还要满足终端时刻的横截条件
    H ( t f ∗ ) = − ∂ φ ∂ t f − γ T ∂ ψ ∂ t f \begin{align} \begin{aligned} H(t_f^*)=-\frac{\partial \varphi}{\partial t_f} - \gamma^T\frac{\partial \psi}{\partial t_f} \end{aligned} \end{align} H(tf)=tfφγTtfψ

下边直接给出不同条件下的极小值原理的必要条件的表格:

t f t_f tf 固定的情况

在这里插入图片描述

t f t_f tf 自由的情况

在这里插入图片描述

动态规划

动态规划也可以用来解决最优控制问题,但是它最初是被设计用来解决多级决策问题的。比如一个地图,好多节点,研究怎么走代价最小的问题。它的公式看起来其实并不是像是控制领域的算法,更像是计算机领域的。它后来被扩展到离散系统的最优控制问题,每一个时间步就是一次决策。比如一共 10 秒,每秒钟 100 次,那么一共就是 1000 次决策,如果这1000次都是最优的,那么最后结果一定是最优的。

更进一步地,如果已知从 960 步到 1000 步的最优决策 u 960 − 1000 ∗ u^*_{960-1000} u9601000,那么不论前边 959 步怎么控制,只要到第 960 步的时候,从 960 步到 1000 步的最优决策一定是 u 960 − 1000 ∗ u^*_{960-1000} u9601000。这便是动态规划的核心:寻找最优子问题和重叠的子结构。很多计算机领域的经典问题都可以用动态规划建模和解决。(汉诺塔,走台阶等等,不搞计算机,不懂)

所以,一般情况下,基于动态规划的控制方法都是从后往前逆序求解的。先算第 1000 个最优决策是啥,然后算第 999 个,最后一步一步反推回第 1 个。仿真或者应用的时候再从第 1 个到第 1000 个顺序执行。典型的例子就是线性二次型最优控制 (LQR),这种问题是有解析解的。

当然动态规划也有连续系统的版本,它就是大名鼎鼎的 HJB 方程。HJB 方程揭示了所有最优控制问题的本质,并且只要解出 HJB 方程,最优控制问题就解决了 (当然前提是有解)。问题就在于有很多非线性的最优控制问题,或者模型不确定的最优控制问题,我们明知道 HJB 方程的解存在且唯一,但就是找不到。由此也衍生出一个新兴的控制方法 (理论):自适应动态规划 (Adaptive Dynamic Programming),也叫近似动态规划 (Approximate Dynamic Programming)。它的另外一个名字比较接地气:强化学习控制。只不过说强化学习控制一般是从计算机的角度看这个问题,说 ADP 一般是从控制理论的角度看这个问题。扯远了…

连续系统 HJB 方程的推导

最优控制问题与 (1) 中所描述的相同。考虑到动态规划中的 “时序逆推” 的概念,取
J [ x ( t ) , t ] = φ [ x ( t f ) , t f ] + ∫ t t f L [ x ( τ ) , u ( τ ) , τ ] d τ \begin{align} \begin{aligned} J\left[x(t), t\right] = \varphi\left[x(t_f), t_f\right] + \int_{t}^{t_f}{L\left[x(\tau), u(\tau), \tau\right]}d\tau \end{aligned} \end{align} J[x(t),t]=φ[x(tf),tf]+ttfL[x(τ),u(τ),τ]dτ
记为从 t t t 时刻到 t f t_f tf 时刻的代价函数,这个问题最终的目的是要求出 J [ x 0 , t 0 ] J\left[x_0, t_0\right] J[x0,t0]

改写 (6),得到
J [ x ( t ) , t ] = ∫ t t + δ t L [ x ( τ ) , u ( τ ) , τ ] d τ + φ [ x ( t f ) , t f ] + ∫ t + δ t t f L [ x ( τ ) , u ( τ ) , τ ] d τ = ∫ t t + δ t L [ x ( τ ) , u ( τ ) , τ ] d τ + J [ x ( t + δ t , t + δ t ) ] \begin{align} \begin{aligned} J\left[x(t), t\right] &= \int_{t}^{t+\delta t}{L\left[x(\tau), u(\tau), \tau\right]}d\tau+\varphi\left[x(t_f), t_f\right] + \int_{t+\delta t}^{t_f}{L\left[x(\tau), u(\tau), \tau\right]}d\tau\\ &=\int_{t}^{t+\delta t}{L\left[x(\tau), u(\tau), \tau\right]}d\tau+J\left[x(t+\delta t, t+\delta t)\right] \end{aligned} \end{align} J[x(t),t]=tt+δtL[x(τ),u(τ),τ]dτ+φ[x(tf),tf]+t+δttfL[x(τ),u(τ),τ]dτ=tt+δtL[x(τ),u(τ),τ]dτ+J[x(t+δt,t+δt)]

上式右边第一项应用积分中值定理,第二项应用 Taylor 展开,得到
J [ x ( t ) , t ] = ∫ t t + δ t L [ x ( τ ) , u ( τ ) , τ ] d τ + J [ x ( t + δ t , t + δ t ) ] = L [ x ( t + α δ t ) , u ( t + α δ t ) , t + α δ t ] δ t + J [ x ( t ) , t ] + ∂ J T ∂ x δ x + ∂ J ∂ t δ t = L [ x ( t + α δ t ) , u ( t + α δ t ) , t + α δ t ] δ t + J [ x ( t ) , t ] + ∂ J T ∂ x d x ( t ) d t δ t + ∂ J ∂ t δ t \begin{align} \begin{aligned} J\left[x(t), t\right] &=\int_{t}^{t+\delta t}{L\left[x(\tau), u(\tau), \tau\right]}d\tau+J\left[x(t+\delta t, t+\delta t)\right]\\ &=L\left[x(t+\alpha\delta t), u(t+\alpha\delta t), t+\alpha\delta t\right]\delta t+J\left[x(t), t\right]\\ & + \frac{\partial J^T}{\partial x}\delta x + \frac{\partial J}{\partial t}\delta t\\ &=L\left[x(t+\alpha\delta t), u(t+\alpha\delta t), t+\alpha\delta t\right]\delta t+J\left[x(t), t\right]\\ &+ \frac{\partial J^T}{\partial x}\frac{dx(t)}{dt}\delta t + \frac{\partial J}{\partial t}\delta t \end{aligned} \end{align} J[x(t),t]=tt+δtL[x(τ),u(τ),τ]dτ+J[x(t+δt,t+δt)]=L[x(t+αδt),u(t+αδt),t+αδt]δt+J[x(t),t]+xJTδx+tJδt=L[x(t+αδt),u(t+αδt),t+αδt]δt+J[x(t),t]+xJTdtdx(t)δt+tJδt
整理,得
L [ x ( t + α δ t ) , u ( t + α δ t ) , t + α δ t ] + ∂ J T ∂ x d x ( t ) d t + ∂ J ∂ t = 0 \begin{align} \begin{aligned} L\left[x(t+\alpha\delta t), u(t+\alpha\delta t), t+\alpha\delta t\right] + \frac{\partial J^T}{\partial x}\frac{dx(t)}{dt}+ \frac{\partial J}{\partial t}=0 \end{aligned} \end{align} L[x(t+αδt),u(t+αδt),t+αδt]+xJTdtdx(t)+tJ=0
δ t → 0 \delta t\rightarrow0 δt0,并应用最优性原理,有
∂ J ∗ [ x ( t ) , t ] ∂ t = − min ⁡ u ∈ Ω { L [ x ( t ) , u ( t ) , t ] + [ ∂ J ∗ ∂ x ] T f [ x , u , t ] } \begin{align} \begin{aligned} \frac{\partial J^*\left[x(t), t \right]}{\partial t}=-\min_{u\in\Omega}{\left\{L\left[x(t), u(t), t\right] + \left[\frac{\partial J^*}{\partial x}\right]^Tf\left[x,u,t\right]\right\}} \end{aligned} \end{align} tJ[x(t),t]=uΩmin{L[x(t),u(t),t]+[xJ]Tf[x,u,t]}
此时,定义哈密顿函数
H [ x ( t ) , u ∗ [ x ( t ) , ∂ J ∗ ∂ x , t ] , ∂ J ∗ ∂ x , t ] = min ⁡ u ∈ Ω H [ x ( t ) , u ( t ) , ∂ J ∗ ∂ x , t ] H\left[x(t), u^*\left[x(t), \frac{\partial J^*}{\partial x}, t\right], \frac{\partial J^*}{\partial x}, t\right]=\min_{u\in\Omega}{H\left[x(t), u(t), \frac{\partial J^*}{\partial x}, t\right]} H[x(t),u[x(t),xJ,t],xJ,t]=uΩminH[x(t),u(t),xJ,t]

则,HJB 方程可以简写如下:
H [ x ( t ) , u ∗ [ x ( t ) , ∂ J ∗ ∂ x , t ] , ∂ J ∗ ∂ x , t ] + ∂ J ∗ ∂ t = 0 \begin{align} \begin{aligned} H\left[x(t), u^*\left[x(t), \frac{\partial J^*}{\partial x}, t\right], \frac{\partial J^*}{\partial x}, t\right]+\frac{\partial J^*}{\partial t}=0 \end{aligned} \end{align} H[x(t),u[x(t),xJ,t],xJ,t]+tJ=0
同时满足边界条件:
J ∗ [ x ( t f ) , t ) f ] = φ [ x ( t f ) , t f ] J^*\left[x(t_f), t)f\right]=\varphi\left[x(t_f), t_f\right] J[x(tf),t)f]=φ[x(tf),tf]

至此,极小值原理与动态规划基本理论的学习笔记就结束了 (不放例题了,敲公式太麻烦了)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最优控制 3:最优控制理论中的极小值原理与动态规划 的相关文章

  • 毕业了,投入的工作

    2012年7月1日 xff0c 一个全新的开始 大学毕业了 xff0c 结束了学生时代 xff0c 走向社会 xff0c 开始工作 开始挣钱 xff0c 在一个熟悉的城市里 xff0c 面对陌生的面孔 使用未曾听过见过的语言 xff0c 技
  • vscode配置git

    首先下载git 下载完成后复制git路径 xff0c 如 xff1a D Software Git cmd git exe 也可以打开cmd窗口输入 where git 然后打开vscode xff0c 打开设置 xff0c 搜索git p
  • STM32的printf函数重定向

    在前面学习了STM32的串口编程 xff0c 通过USART1向计算机的串口调试助手打印数据 xff0c 或者接收计算机串口调试助手的数据 xff0c 接下来我们可以实现STM32工程上的printf 函数了 xff0c 方便用于程序开发中
  • 【opencv学习】【轮廓检测】

    今天学习轮廓检测方法 span class token keyword import span cv2 span class token keyword import span numpy span class token keyword
  • Jetson Xavier NX下读取RTSP视频流

    现有一个网络摄像机 xff0c 需要在Jetson Xavier NX平台上读取它的视频流进行图像处理 xff0c 最基本的使用Opencv读取RTSP视频流代码如下 xff1a span class token keyword impor
  • 化繁为简,一张图看懂梯度、散度、旋度、Jacobian、Hessian和Laplacian

    点击上方 计算机视觉工坊 xff0c 选择 星标 干货第一时间送达 作者 xff5c 王赟 Maigo 64 知乎 xff08 已授权 xff09 来源 xff5c https zhuanlan zhihu com p 35323714 编
  • 一文详解PnP算法原理

    PnP Perspective n Point 问题的几何结构如图1所示 xff0c 给定3D点的坐标 对应2D点坐标以及内参矩阵 xff0c 求解相机的位姿 数学语言描述如下 xff1a 图1 PnP几何结构 1 直接线性变换法 Dire
  • 多传感器数据标定融合完整教程:时间同步+空间同步(Camera+Lidar+IMU+Radar)

    多传感器融合是一项结合多传感器数据的综合性前沿内容 xff0c 主要包括Camera 激光雷达 IMU 毫米波雷达等传感器的融合 xff0c 在自动驾驶 移动机器人的感知和定位领域中占有非常重要的地位 xff1b 随着AI技术的大规模落地
  • 机器人抓取—— 相机参数与标定 camera_calibration

    点击上方 计算机视觉工坊 xff0c 选择 星标 干货第一时间送达 整理丨古月居 相机的参数 参考 xff1a https blog csdn net weixin 43206570 article details 84797361 摄像机
  • ROS下面调用自定义的头文件和.cpp/.so文件(亲测有效)

    前言 ROS下面使用已经编译好的ROS package是很方便的 xff0c 但是大多数我们可能自己定义了一些头文件 xff0c 想去直接引用 xff0c 那么如何在ROS下面调用自己的定义的函数呢 xff1f ROS下调用自定义的头文件
  • catkin_make和cmake

    catkin make是ROS下面的一种编译方式 xff0c 基于cmake xff0c 但是又不同于cmake cmake只能编译指定的package xff0c 但是不同package之间的关系没办法链接 xff0c 而且cmake只能
  • UNIX date命令简介

    date 命令 参数含义 xff1a a xff1a 显示星期简写 Sun Sat A xff1a 显示完整星期 Sunday Saturday b xff1a 显示月份简写 Jan Dec B xff1a 显示完整月份 January D
  • NVIDIA JETSON XAVIER NX烧录(emmc版本)

    目录 0 前言 1 安装虚拟机 2 安装SDKManager 3 使用SDK Manager开始烧录 4 配置系统 5 开发环境的安装 xff08 CUDA xff09 6 遇到问题记录 xff08 如果有其它问题可以留言我补充 xff09
  • NVIDIA JETSON XAVIER NX烧录(sd版本)

    0 前言 本文主要补充上文提到的sd卡版本烧录Jetson Xavier Nx系统的 xff0c 需要准备的东西 一张空白SD卡balenaEtcher工具 JETSON XAVIER NX 开发者套件的SD镜像 xff08 官网下载 xf
  • NVIDIA JETSON XAVIER NX 从SSD盘启动

    0 前言 本文主要补充上文提到的Jetson Xavier Nx系统从ssd盘启动 xff0c 需要准备的东西 xff1a 提前把ssd卡装上Jetson Xavier Nx套件上 xff0c 如下图 1 格式化为GPT 打开ubuntu的
  • 在linux虚拟机上安装docker

    1 简介 Docker是一个开源的应用容器引擎 xff1b 是一个轻量级容器技术 xff1b Docker支持将软件编译成一个镜像 xff1b 然后在镜像中各种软件做好配置 xff0c 将镜像发布出去 xff0c 其他使用者可以直接使用这个
  • win11虚拟机如何安装 Windows11虚拟机安装步骤教程

    想要体验下最新的win11系统 但是又不想在实体机上安装 担心出现系统故障问题怎么办 我们可以通过虚拟机安装win11系统实现 下面小编就教下大家虚拟机如何安装win11系统 更多Windows11系统教程可以参考小白一键网 1 下载安装好
  • Win11如何开启移动热点?Win11开启移动热点的方法

    在Win10系统之后就有了一个移动热点功能 xff0c 这在Win11系统也不例外 xff0c 不过很多小伙伴并不清楚Win11系统中的移动热点功能如何开启 xff0c 那么下面就和小编一起来看看Win11开启移动热点的方法 xff0c 有
  • 交换机组建局域网

    说来惭愧 xff0c 今天才搞明白用交换机组建局域网的原理 xff0c 这里介绍方法 xff1a 平时使用的路由器有交换机的功能 xff0c 单纯使用交换机还是第一次 xff1a 1 将所有电bai脑连到同一台交换机上 xff0c du即将
  • mavros 使用经验记录

    我用的飞控硬件板是pixhawk xff0c 用missionplanner刷的fight stack是apm的最新版本3 4 amp对mavros支持不是特别好 xff0c 如果合适还是用px4的flight stack 比较好 xff0

随机推荐