先参考一下基本内容;
MPC模型预测控制_tingfenghanlei的博客-CSDN博客_mpc模型预测控制
最优化控制和基本概念
参考链接:
MPC_1_最优化控制和基本概念_知识搬运工阿杰的博客-CSDN博客_mpc优化控制
最优控制的研究动机:在约束条件下达到最优的系统表现
Get the best performance within certain limitation
-
注:
所谓“最优”就是设计“惩罚函数”,把“惩罚函数”映射到“解空间”
最优不是唯一解
误差 e = y − r e=y-r e=y−r
举例:
下图是一个典型的单输入单输出系统(SISO):
假设该系统是一个轨迹跟踪控制系统,其中e为轨迹跟踪误差,u为控制输入,则
- ∫ 0 t e 2 d t \int_{0}^{t} e^{2} dt ∫0te2dt越小,说明轨迹追踪效果越好
- ∫ 0 t u 2 d t \int_{0}^{t} u^{2} dt ∫0tu2dt越小,就表明该控制器的输入越小,能量消耗就越低
基于此,定义一个 Cost Function(目标/代价函数):
J = ∫ 0 t q e 2 + r u 2 d t ⇒ m i n J J = \int_{0}^{t} q e^{2}+r u^{2} dt \Rightarrow minJ J=∫0tqe2+ru2dt⇒minJ
q > > r q >> r q>>r,控制器看重误差
r > > q r>>q r>>q,控制器看重输入
根据现实中不同的控制系统要求调节。而最优控制的目标就是使得代价函数J最小。
拓展到MIMO(多输入多输出)系统中:
d x d t = A x + B u Y = C x \begin{aligned}\frac{d x}{d t} &=A x+B u \\Y &=C x\end{aligned} dtdxY=Ax+Bu=Cx
其代价函数就可以写为:
J = ∫ 0 ∞ E T Q E + U T Q U d t J=\int_{0}^{\infty} E^{T} Q E+U^{T} Q U d t J=∫0∞ETQE+UTQUdt
其中Q、R分别为调节矩阵。
例如:
d x d t [ x 1 x 2 ] = A [ x 1 x 2 ] + B [ u 1 u 2 ] \frac{d x}{d t}\left[\begin{array}{l}x_{1} \\x_{2}\end{array}\right]=A\left[\begin{array}{l}x_{1} \\x_{2}\end{array}\right]+B\left[\begin{array}{l}u_{1} \\u_{2}\end{array}\right] dtdx[x1x2]=A[x1x2]+B[u1u2]
[ y 1 y 2 ] = [ x 1 x 2 ] R = [ r 1 r 2 ] = [ 0 0 ] E = [ x 1 x 2 ] \begin{gathered}{\left[\begin{array}{l}y_{1} \\y_{2}\end{array}\right]=\left[\begin{array}{l}x_{1} \\x_{2}\end{array}\right]} \\R=\left[\begin{array}{l}r_{1} \\r_{2}\end{array}\right]=\left[\begin{array}{l}0 \\0\end{array}\right] \\E=\left[\begin{array}{l}x_{1} \\x_{2}\end{array}\right]\end{gathered} [y1y2]=[x1x2]R=[r1r2]=[00]E=[x1x2]
E T Q E = [ x 1 x 2 ] T [ q 1 0 0 q 2 ] [ x 1 x 2 ] = q 1 x 1 2 + q 2 x 2 2 E^{T} Q E=\left[\begin{array}{l}x_{1} \\x_{2}\end{array}\right]^{T}\left[\begin{array}{cc}q_{1} & 0 \\0 & q_{2}\end{array}\right]\left[\begin{array}{l}x_{1} \\x_{2}\end{array}\right]=q_{1} x_{1}^{2}+q_{2} x_{2}^{2} ETQE=[x1x2]T[q100q2][x1x2]=q1x12+q2x22
U T ′ R U = r 1 u 1 2 + r 2 u 2 2 U^{T^{\prime}} R U=r_{1} u_{1}^{2}+r_{2} u_{2}^{2} UT′RU=r1u12+r2u22
其中 q 1 、 q 2 、 x 1 、 x 2 q_{1}、q_{2}、x_{1}、x_{2} q1、q2、x1、x2为权重系数。
关注哪个变量就把哪个变量对应的权重参数调大,另一个权重参数调小
MPC:模型预测
MPC作用机理描述为:在每一个采用时刻,根据获得的当前测量信息,在线求解一个有限时间开环优化问题,并将得到的控制序列的第一个元素作用于被控对象。在下一个采样时刻,重复上述过程:用新的测量值作为此时预测系统未来动态的初始条件,刷新优化问题并重新求解 。
即MPC算法包括三个步骤:
-
在k时刻估计/测量当前系统状态
-
基于 u k 、 u k + 1 . . . u k + n u_{k}、u_{k+1}...u_{k+n} uk、uk+1...uk+n来进行最优化
先找到曲线对应的控制区间和预测区间
J = ∑ k = 0 N − 1 E k T Q E k + U k T Q U k + E N t F E N d t J=\sum_{k=0}^{N-1} E_{k}^{T} Q E_{k}+U_{k}^{T} Q U_{k}+E_{N}^{t} F E_{N} d t J=k=0∑N−1EkTQEk+UkTQUk+ENtFENdt
上式中第三项为最终代价
对代价函数进行最优化,找到在预测区间内代价函数的最小值
-
只施加 u k u_{k} uk的控制量
该步骤被称为滚动优化控制(Receding Horizon Control):
预测的模型很难完美描述现实的系统,现实的系统可能会有扰动
当时间从k到k+1时,对应的控制区间和预测区间也向右移动一个时刻,然后重复进行第二步
最优化数学建模推导
参考链接
MPC_2_最优化数学建模推导_知识搬运工阿杰的博客-CSDN博客
介绍最常用的一种最优化方法——二次规划
一般形式:
m i n Z T Q Z + C T Z minZ^{T} Q Z+C^{T} Z minZTQZ+CTZ
前面的部分是线性规划——最小二乘法: q 1 z 1 2 + q 2 z 2 2 q_{1} z_{1}^{2}+q_{2}z_{2}^{2} q1z12+q2z22
Q是对角矩阵
Q = [ q 1 q 2 q 3 q 4 ] Q=\begin{bmatrix} q_{1} & & & \\ & q_{2} & & \\ & & q_{3}&\\ & & &q_{4} \end{bmatrix} Q=⎣⎢⎢⎡q1q2q3q4⎦⎥⎥⎤
举例
x ( k + 1 ) = A x ( k ) + B u ( k ) x(k+1)=A x(k)+B u(k) x(k+1)=Ax(k)+Bu(k)
x为状态向量 [ x 1 x 2 x 3 x 4 ] \begin{bmatrix} x_{1} \\ x_{2} \\ x_{3} \\ x_{4}\end{bmatrix} ⎣⎢⎢⎡x1x2x3x4⎦⎥⎥⎤,u为输入向量 [ u 1 u 2 u 3 u 4 ] \begin{bmatrix} u_{1} \\ u_{2} \\ u_{3} \\ u_{4}\end{bmatrix} ⎣⎢⎢⎡u1u2u3u4⎦⎥⎥⎤
在k时刻
X k = [ x ( k ∣ k ) x ( k + 1 ∣ k ) x ( k + 2 ∣ k ) ⋮ x ( k + N ∣ k ) ] X_{k}=\begin{bmatrix} x(k|k) \\ x(k+1|k) \\ x(k+2|k) \\\vdots \\ x(k+N|k)\end{bmatrix} Xk=⎣⎢⎢⎢⎢⎢⎡x(k∣k)x(k+1∣k)x(k+2∣k)⋮x(k+N∣k)⎦⎥⎥⎥⎥⎥⎤
U k = [ u ( k ∣ k ) u ( k + 1 ∣ k ) u ( k + 2 ∣ k ) ⋮ u ( k + i ∣ k ) u ( k + N − 1 ∣ k ) ] U_{k}=\begin{bmatrix} u(k|k) \\ u(k+1|k) \\ u(k+2|k) \\\vdots \\ u(k+i|k) \\ u(k+N-1|k)\end{bmatrix} Uk=⎣⎢⎢⎢⎢⎢⎢⎢⎡u(k∣k)u(k+1∣k)u(k+2∣k)⋮u(k+i∣k)u(k+N−1∣k)⎦⎥⎥⎥⎥⎥⎥⎥⎤
N称为预测空间(Predictive Horizon)
假设系统输出 y = x y=x y=x
参考值 R = 0 R=0 R=0
误差 E = y − R = x − 0 = x E=y-R=x-0=x E=y−R=x−0=x
代价函数
m i n J = ∑ i = 0 N − 1 x ( k + i ∣ k ) ⊤ Q x ( k + i ∣ k ) + u ( k + i ∣ k ) ⊤ Q u ( k + i ∣ k ) + x ( k + N ) ⊤ F x ( k + N ) d t min J=\sum_{i=0}^{N-1} x(k+i|k)^{\top} Q x(k+i|k)+u(k+i|k)^{\top} Q u(k+i|k)+x(k+N)^{\top} F x(k+N) d t minJ=i=0∑N−1x(k+i∣k)⊤Qx(k+i∣k)+u(k+i∣k)⊤Qu(k+i∣k)+x(k+N)⊤Fx(k+N)dt
上式可以理解为:
J=误差加权和+输入加权和+终端误差
系统的初始条件:
x ( k ∣ k ) = x k x(k|k)=x_{k} x(k∣k)=xk
x ( k + 1 ∣ k ) = A x ( k ∣ k ) + B u ( k ∣ k ) = A x k + B u ( k ∣ k ) x ( k + 2 ∣ k ) = A x ( k + 1 ∣ k ) + B u ( k + 1 ∣ k ) = A 2 x k + A B u ( k ∣ k ) + B u ( k + 1 ∣ k ) . . . x ( k + N ∣ k ) = A N x k + A N − 1 B u ( k ∣ k ) + . . . + B u ( k + N − 1 ∣ k ) \begin{aligned} x(k+1|k) &=A x(k|k)+B u(k|k) \\&=A x_{k}+B u(k|k) \\ x(k+2|k) &=A x(k+1|k)+B u(k+1|k) \\&=A^{2} x_{k}+A B u(k|k)+Bu(k+1|k) \\ &... \\ x(k+N|k) &=A^{N} x_{k}+A^{N-1} B u(k|k)+...+B u(k+N-1|k) \\ \end{aligned} x(k+1∣k)x(k+2∣k)x(k+N∣k)=Ax(k∣k)+Bu(k∣k)=Axk+Bu(k∣k)=Ax(k+1∣k)+Bu(k+1∣k)=A2xk+ABu(k∣k)+Bu(k+1∣k)...=ANxk+AN−1Bu(k∣k)+...+Bu(k+N−1∣k)
X k = [ I A A 2 ⋮ A N ] x k + [ 0 0 ⋯ 0 B A B B ⋯ ⋮ ⋯ B A N − 1 B A N − 2 B ] + [ u ( k ∣ k ) u ( k + 1 ∣ k ) u ( k + 2 ∣ k ) ⋮ u ( k + N − 1 ∣ k ) ] X_{k} = \begin{bmatrix} I \\ A \\ A^{2} \\\vdots \\ A^{N} \end{bmatrix} x^{k}+\left[\begin{array}{ccccc} 0 & 0 & \cdots & 0 & \\ B & & & & & \\ A B & B & \cdots & & & \\ \vdots & & \cdots & B & \\ A^{N-1} B & A^{N-2} B & & & \end{array}\right]+\begin{bmatrix} u(k|k) \\ u(k+1|k) \\ u(k+2|k) \\\vdots \\ u(k+N-1|k) \end{bmatrix} Xk=⎣⎢⎢⎢⎢⎢⎡IAA2⋮AN⎦⎥⎥⎥⎥⎥⎤xk+⎣⎢⎢⎢⎢⎢⎡0BAB⋮AN−1B0BAN−2B⋯⋯⋯0B⎦⎥⎥⎥⎥⎥⎤+⎣⎢⎢⎢⎢⎢⎡u(k∣k)u(k+1∣k)u(k+2∣k)⋮u(k+N−1∣k)⎦⎥⎥⎥⎥⎥⎤
上述矩阵化为:
x k = M x k + C u k x_{k}=M x_{k}+C u_{k} xk=Mxk+Cuk
将代价函数展开
J = ∑ i = 0 N − 1 x ( k + i ∣ k ) ⊤ Q x ( k + i ∣ k ) + u ( k + i ∣ k ) ⊤ Q u ( k + i ∣ k ) + x ( k + N ) ⊤ F x ( k + N ) d t = x ( k ∣ k ) ⊤ Q x ( k ∣ k ) + x ( k + 1 ∣ k ) ⊤ Q x ( k + 1 ∣ k ) + ⋯ + x ( k + m − 1 ∣ k ) ⊤ Q x ( k + N − 1 ∣ k ) + x ( k + N ) ⊤ E x ( k + N ) \begin{aligned} J &= \sum_{i=0}^{N-1} x(k+i|k)^{\top} Q x(k+i|k)+u(k+i|k)^{\top} Q u(k+i|k)+x(k+N)^{\top} F x(k+N) d t \\&= x(k \mid k)^{\top} Q x(k \mid k)+x(k+1 \mid k)^{\top} Q x(k+1 \mid k)+\cdots+x(k+m-1 \mid k)^{\top} Q x(k+N-1 \mid k)+x(k+N)^{\top} E x(k+N) \end{aligned} J=i=0∑N−1x(k+i∣k)⊤Qx(k+i∣k)+u(k+i∣k)⊤Qu(k+i∣k)+x(k+N)⊤Fx(k+N)dt=x(k∣k)⊤Qx(k∣k)+x(k+1∣k)⊤Qx(k+1∣k)+⋯+x(k+m−1∣k)⊤Qx(k+N−1∣k)+x(k+N)⊤Ex(k+N)
J = [ x ( k ∣ k ) x ( k + 1 ∣ k ) ⋮ x ( k + N ∣ k ) ] ⊤ [ Q Q . . . F ] [ x ( k ∣ k ) ⋮ λ ( k + N ∣ k ) ] = X k ⊤ Q ˉ X k J=\left[\begin{array}{c}x(k \mid k) \\x(k+1 \mid k) \\\vdots\\x(k+N|k) \end{array}\right]^{\top}\left[\begin{array}{llll}Q & & & \\& Q & & \\& & ... & \\& & & F\end{array}\right]\left[\begin{array}{c}x(k \mid k) \\\vdots \\\lambda(k+N| k)\end{array}\right]=X_{k}^{\top} \bar{Q} X_{k} J=⎣⎢⎢⎢⎡x(k∣k)x(k+1∣k)⋮x(k+N∣k)⎦⎥⎥⎥⎤⊤⎣⎢⎢⎡QQ...F⎦⎥⎥⎤⎣⎢⎡x(k∣k)⋮λ(k+N∣k)⎦⎥⎤=Xk⊤QˉXk
J = X k ⊤ Q ˉ X k + U k ⊤ R ˉ U k = ( x k ⊤ M ⊤ + u R ⊤ C ⊤ + C U k ) Q ˉ ( M x k + C U k ) + U k ⊤ R U k \begin{aligned} J &=X_{k}^{\top} \bar{Q} X_{k}+U_{k}^{\top} \bar{R} U_{k} \\&=\left(x_{k}^{\top} M^{\top}+u_{R}^{\top} C^{\top}+C U_{k}\right) \bar{Q}\left(M x_{k}+C U_{k}\right)+U_{k}^{\top} R U_{k} \end{aligned} J=Xk⊤QˉXk+Uk⊤RˉUk=(xk⊤M⊤+uR⊤C⊤+CUk)Qˉ(Mxk+CUk)+Uk⊤RUk
设 G = M ⊤ Q ˉ M E = C ⊤ Q ˉ M H = C ⊤ R ˉ C + R G=M^{\top} \bar{Q} M \quad E=C^{\top} \bar{Q} M \quad H=C^{\top} \bar{R} C+R G=M⊤QˉME=C⊤QˉMH=C⊤RˉC+R
将上式展开之后合并可得
m i n J = x k ⊤ G x k + 2 x k ⊤ E U k + U k ⊤ H U k min J=x_{k}^{\top} G x_{k}+2 x_{k}^{\top} E U_{k}+U_{k}^{\top} H U_{k} minJ=xk⊤Gxk+2xk⊤EUk+Uk⊤HUk
上式为新的代价函数