【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

一般形式:

(包含两部分: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)

即:代价函数 = 误差加权和 + u(k+i \mid k)^{T} R u(k+i \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 也越来越熟了...)

你可能感兴趣的:(最优化,MPC,模型预测,数学推导,DR_CAN,最优化)