• 【DR_CAN-MPC学习笔记】2.最优化数学建模推导


    上一篇博客:【DR_CAN-MPC学习笔记】1.最优化控制和MPC基本概念

    介绍了MPC的3个步骤:

    Step1:估计/测量读取当前系统状态(可测量则测量,不可测量则估计)

    Step2:基于 u_k, u_{k+1},u_{k+2} ...u_{k+N} 进行最优化

    Step3:只取 u_k (只选取 k 时刻作为预测结果,因为预测存在局限性)

    以及代价函数、预测区间等相关概念。

    这一篇开始推导MPC数学模型,公式比较多。

    DR_CAN的视频:【MPC模型预测控制器】2_最优化数学建模推导

    【MPC模型预测控制器】2


    1.最优化的方法之一:二次规划 Quadratic Programming

    一般形式:

    \min J =\min Z^{T} Q Z+C^{T} Z

    (包含两部分:Z^{T} Q Z——二次型,C^{T} Z——线性)

    若 𝑄 为对角矩阵,即  \left[\begin{array}{ccc} q_{1} & \cdots & 0 \\ \vdots & \ddots & \vdots \\ 0 & \cdots & q_{n} \end{array}\right] ,则转为最小二乘问题

    Z^{T}=\left[\begin{array}{c} z_{1} \\ z_{2} \\ \vdots \\ z_{n} \end{array}\right] \quad Z^{T} Q Z=q_{1} z_{1}^{2}+q_{2} z_{2}^{2}+\cdots q_{n} z_{n}^{2}

    如想了解更多有关二次规划的问题,可以参考这篇博客:

    二次规划问题和MATLAB函数quadprog的使用

    2.最优化建模数学推导

    2.1系统的状态空间表达式

    一个离散系统的状态方程

    x(k+1)=A x(k)+B u(k)

     其中 X=[x_1,x_2...x_N]状态向量U=[u_1,u_2...u_N]输入向量

    在 k 时刻:

    X_k=\left[\begin{array}{c} x(k \mid k) \\ x(k+1 \mid k) \\ \vdots \\ x(k+i \mid k) \\ \vdots \\ x(k+N \mid k) \end{array}\right], U_k=\left[\begin{array}{c} u(k \mid k) \\ u(k+1 \mid k) \\ \vdots \\ u(k+i \mid k) \\ \vdots \\ u(k+N \mid k) \end{array}\right]

     x(k\mid k) 表示在k时刻预测 k 时刻的系统状态,

    x(k+1 \mid k) 表示在k时刻预测 k+1 时刻的系统状态,

    ... x(k+i \mid k)

    x(k+N \mid k) 表示在k时刻预测 k+N 时刻的系统状态。

    u(k\mid k) 表示在k时刻预测 k 时刻的输入,

    u(k+1\mid k) 表示在k时刻预测 k+1 时刻的输入,

    ... u(k+i \mid k)

    u(k+N\mid k) 表示在k时刻预测 k+N 时刻的输入。

    即前面的 k 表示预测对象,后面的 k 表示在 k 时刻的预测。

    为简化分析,假设系统输出方程y=x ,参考值 R'=0 ,则误差 E'=y-R'=x-0=x

    2.2代价函数

    依据上一篇博客给出的代价函数表达式

    J=\sum_{k}^{N-1} E_{k}^{T} Q E_{k}+U_{k}^{T} R U_{k}+E_{N}^{T} F E_{N}

    可得:

    J=\sum_{i=0}^{N-1}\left(x(k+i \mid k)^{T} Q x(k+i \mid k)+u(k+i \mid k)^{T} R u(k+i \mid k)+x(k+N \mid k)^{T} F x(k+N \mid k)\right)

    即:代价函数 = x(k+i \mid k)^{T} Q x(k+i \mid k) 误差加权和 + u(k+i \mid k)^{T} R u(k+i \mid k) 输入加权和 + x(k+N \mid k)^{T} F x(k+N \mid k) 终端误差

    其中 QR 为权重系数矩阵且均为对角矩阵,最优化的目标是最小化代价,即 min J.
    J 的表达式中有两个变量(输入 u 和状态 x),相比于二次规划一般形式多了一个变量。由于控制目标为控制输入u,因此要消去变量 x.

    2.3MPC数学模型推导

    (个人理解:MPC目标为实现最优,也就是代价最小,数学形式即为代价函数的最小化,因此MPC公式推导主要是代价函数的推导和化简)

    将状态变量用输入变量表示:

    x(k \mid k)=x_k 为初始条件

    \begin{array}{l} x(k+1 \mid k)=A x(k \mid k)+B u(k \mid k)=A x_{k}+B u(k \mid k) \\ x(k+2 \mid k)=A x(k+1 \mid k)+B u(k+1 \mid k)=A^{2} x_{k}+A B u(k \mid k)+B u(k+1 \mid k) \\ x(k+N \mid k)=A^{N} x_{k}+A^{N-1} B u(k \mid k)+\cdots+B u(k+N-1 \mid k) \end{array}

    将上式整理后可得:

    X_{k}=\left[\begin{array}{c} I \\ A \\ A^{2} \\ \vdots \\ A^{N} \end{array}\right] x_{k}+\left[\begin{array}{ccccc} 0 & 0 & \cdots & 0 \\ B & & & \vdots \\ AB & B & \ddots & \\ \vdots & & & \\ A^{N-1}B & A^{N-2}B & \cdots & B \end{array}\right]\left[\begin{array}{c} u(k\mid k)\\ u(k+1\mid k)\\ u(k+2\mid k)\\ \vdots\\ u(k+N-1\mid k)\\ \end{array}\right]

    M=\left[\begin{array}{c} I \\ A \\ A^{2} \\ \vdots \\ A^{N} \end{array}\right]C=\left[\begin{array}{ccccc} 0 & 0 & \cdots & 0 \\ B & & & \vdots \\ AB & B & \ddots & \\ \vdots & & & \\ A^{N-1}B & A^{N-2}B & \cdots & B \end{array}\right] 

    注意 X_k 为向量,x_k 为初始状态。C 中的0代表零矩阵,而非数值0。

    X_{k}=Mx_{k}+CU_{k}

    将代价函数展开:

    J=\sum_{i=0}^{N-1}\left(x(k+i \mid k)^{T} Q x(k+i \mid k)+u(k+i \mid k)^{T} R u(k+i \mid k)+x(k+N \mid k)^{T} F x(k+N \mid k)\right)\\ =\left[\begin{array}{c} x(k \mid k) \\ x(k+1 \mid k) \\ x(k+2 \mid k) \\ \vdots \\ x(k+N \mid k) \end{array}\right]^{T}\left[\begin{array}{ccccc} Q & 0 & \cdots & 0 \\ 0 & Q & \cdots & 0\\ \vdots & & \ddots & \vdots\\ 0 & 0 & \cdots & F \end{array}\right]\left[\begin{array}{c} x(k \mid k) \\ x(k+1 \mid k) \\ x(k+2 \mid k) \\ \vdots \\ x(k+N \mid k) \end{array}\right]\\+\left[\begin{array}{c} u(k \mid k) \\ u(k+1 \mid k) \\ u(k+2 \mid k) \\ \vdots \\ u(k+N \mid k) \end{array}\right]^T \left[\begin{array}{ccccc} R & 0 & \cdots & 0 \\ 0 & R & \cdots & 0\\ \vdots & & \ddots & \vdots\\ 0 & 0 & \cdots & R \end{array}\right] \left[\begin{array}{c} u(k \mid k) \\ u(k+1 \mid k) \\ u(k+2 \mid k) \\ \vdots \\ u(k+N \mid k) \end{array}\right]

     令

    \bar{Q}=\left[\begin{array}{ccccc} Q & 0 & \cdots & 0 \\ 0 & Q & \cdots & 0\\ \vdots & & \ddots & \vdots\\ 0 & 0 & \cdots & F \end{array}\right],\bar{R}=\left[\begin{array}{ccccc} R & 0 & \cdots & 0 \\ 0 & R & \cdots & 0\\ \vdots & & \ddots & \vdots\\ 0 & 0 & \cdots & R \end{array}\right]

     则

    J=X_{k}^T\bar{Q}X_k+U_{k}^T\bar{R}U_k

    X_{k}=Mx_{k}+CU_{k} 代入上式,消去变量 X_k 并化简:

    J=X_{k}^{T} \bar{Q} X_{k}+U_{k}^{T} \bar{R} U_{k}\\ =\left(M x_{k}+C U_{k}\right)^{T} \bar{Q}\left(M x_{k}+C U_{k}\right)+U_{k}^{T} \bar{R} U_{k}\\ =(x_{k}^{T} M ^{T}+ U_{k}^{T} C^{T})\bar{Q}\left(M x_{k}+C U_{k}\right)+U_{k}^{T} \bar{R} U_{k}\\ =x_{k}^{T} M ^{T}\bar{Q}M x_{k}+x_{k}^{T} M ^{T}\bar{Q}C U_{k}+U_{k}^{T} C^{T}\bar{Q}M x_{k}+U_{k}^{T} C^{T}\bar{Q}C U_{k}+U_{k}^{T} \bar{R} U_{k}

    因为 J 是一个 1×1 矩阵(X_kU_k 均为 n×1 矩阵,\bar{Q}\bar{R} 均为 n×n 矩阵),因此实际上是一个数(至于为什么,可以参考线性代数中矩阵相乘相关内容),则 J^T=J .

    由于矩阵 x_{k}^{T} M ^{T}\bar{Q}C U_{k}U_{k}^{T} C^{T}\bar{Q}M x_{k} 互为转置且均为数值,则数值相等,即:

    x_{k}^{T} M ^{T}\bar{Q}C U_{k}=U_{k}^{T} C^{T}\bar{Q}M x_{k}

    G=M ^{T}\bar{Q}M,E=M^T \bar{Q} C,H=C^T \bar{R} C+R

    J=x_k^TGx_k+2x_k^TEU_k+U_k^THU_k

    上式就是最终推导结果,符合二次规划的一般形式。其中 2x_k^TEU_k 为线性部分,U_k^THU_k 为二次型部分, x_k^TGx_k 表示初始状态,不影响最优化。

    以上就是MPC数学模型推导过程,利用这个模型可以对系统进行最优化和模型预测控制设计。

    (码了那么多公式,对 Latex 也越来越熟了...)

  • 相关阅读:
    微信小程序 typescript 开发日历界面
    matplotlib详细教学
    嵌入式属于人工智能吗?
    Java项目:基于jsp+mysql+Spring+mybatis的SSM在线网络图书商城
    仿游戏热血江湖游戏类22(得到物品方法2)
    iPhone设备中查看应用程序崩溃日志的最佳实践与经验分享
    实现字符串反转函数
    ICCV2023 Tracking paper汇总(二)(多目标跟随、单目标跟随等)
    2023年开发语言和数据库排行
    不看后悔,appium自动化环境完美搭建
  • 原文地址:https://blog.csdn.net/weixin_43470383/article/details/125883441