如何理解MPC模型预测控制理论

MPC的基本原理与特点

基本原理

其实MPC的思想很直白也很简单:在每个采样时刻,用测量到的信息和一个模型,求解一个优化问题,并将优化出来的结果的第一个量作用到系统中,之后如此反复。总的来说分为三步:

  • 预测系统未来动态
  • (数值)求解优化问题
  • 将优化解的第一个元素作用于系统

同时这里有几个点需要思考:

  • 模型的形式是什么
  • 模型为什么会有预测功能,如何体现的
  • 优化问题如何建立以及怎么求解

这些问题在推导过程中会一一体现。

特点

1.基于模型

在MPC中,需要一个描述对象动态行为的模型,作用是用来根据当前的测量值预测未来的动态。但是需要注意的是,我们更注重模型的作用,即预测,而不是模型的具体形式。至于这个模型是如何构建的并不重要,只要它具有根据当前状态和未来控制输入预测未来输出的能力就可以。比如可以使用状态空间模型,传递函数模型,模糊模型等等。

2.滚动优化

简单来说就是如下的表格:

时刻预测时间区间
k [ k + 1 , k + p ] 系 统 动 态 [k+1,k+p]系统动态 [k+1k+p]
k+1 [ k + 2 , k + p + 1 ] 系 统 动 态 [k+2,k+p+1]系统动态 [k+2k+p+1]
k+2 [ k + 3 , k + p + 2 ] 系 统 动 态 [k+3,k+p+2]系统动态 [k+3k+p+2]

可以看出,这种优化是在线进行的,虽然不是全局最优,但是这种滚动的处理,可以将模型失配、时变、干扰等不确定考虑在里面,进行实时的弥补。

3.前馈-反馈结构

  • 模型中的预测作用考虑到了来自未来参考输入和可测干扰的前馈补偿
  • 作用在系统中的控制量考虑到了当前测量的状态值的反馈补偿

从无约束模型预测控制出发理解推导过程

这里我们使用控制里面常见的状态空间模型,并且在不考虑约束的情况下进行一个详细的公式推导。主要分为三个步骤:使用模型预测系统未来动态,求解优化问题,解的第一个元素作用到系统

1.使用状态空间模型

这里直接给出离散情况下系统的状态空间模型:
x ( k + 1 ) = A x ( k ) + B ( k ) u ( k ) y c ( k ) = C x ( k ) \begin{aligned} x(k+1) &= Ax(k)+B(k)u(k)\\[2mm] y_c(k)&=Cx(k) \end{aligned} x(k+1)yc(k)=Ax(k)+B(k)u(k)=Cx(k)
这里为了引入积分以减少或消除静态误差,将模型改写成增量形式,设:
Δ x ( k ) = x ( k ) − x ( k − 1 ) Δ u ( k ) = u ( k ) − u ( k − 1 ) Δx(k)=x(k)-x(k-1)\\[2mm] Δu(k)=u(k)-u(k-1) Δx(k)=x(k)x(k1)Δu(k)=u(k)u(k1)
这样状态空间模型就可以改写成:
Δ x ( k + 1 ) = A Δ x ( k ) + B Δ u ( k ) y ( k ) = C Δ x ( k ) + y ( k − 1 ) \begin{aligned} Δx(k+1) &= AΔx(k) + BΔu(k)\\[2mm] y(k) &= CΔx(k)+y(k-1) \end{aligned} Δx(k+1)y(k)=AΔx(k)+BΔu(k)=CΔx(k)+y(k1)

2.模型的预测功能

这是MPC求解的第一步:使用模型预测。
我们可以观察状态方程,其实它表达的是:给定一个当前状态和输入,就能计算出下一时刻的状态,那么这里的预测就是计算出的下一时刻状态。而有了下一时刻的状态和输入,就可以计算下下时刻的状态,以此类推,想预测之后多久的都可以。当前状态是测量出来的,而各个时间的输入是需要优化的变量,根据这个思路进行公式推导(这就是使用模型进行预测的体现)。这里设置预测时域为 p p p,控制时域为 m m m。并且 m ≤ p m≤p mp
首先根据当前时刻 k k k拿到的数据和优化变量控制对下一时刻进行预测:
Δ x ( k + 1 ∣ k ) = A Δ x ( k ) + B Δ u ( k ) Δx(k+1|k) = AΔx(k)+BΔu(k) Δx(k+1k)=AΔx(k)+BΔu(k)
现在进行一步预测之后,就拥有了当前状态和下一时刻状态,同理,用 k + 1 k+1 k+1时刻状态也可以对 k + 2 k+2 k+2进行预测。
Δ x ( k + 2 ∣ k ) = A Δ x ( k + 1 ∣ k ) + B Δ u ( k + 1 ) Δx(k+2|k) = AΔx(k+1|k)+BΔu(k+1) Δx(k+2k)=AΔx(k+1k)+BΔu(k+1)
进一步,使用 k k k时刻测量的量表示 k + 2 k+2 k+2时刻的预测值为:
Δ x ( k + 2 ∣ k ) = A Δ x ( k + 1 ∣ k ) + B Δ u ( k + 1 ) = A ( A Δ x ( k ) + B Δ u ( k ) ) + B Δ u ( k + 1 ) = A 2 Δ x ( k ) + A B Δ u ( k ) + B Δ u ( k + 1 ) \begin{aligned} Δx(k+2|k) &= AΔx(k+1|k)+BΔu(k+1)\\[2mm] &= A( AΔx(k)+BΔu(k))+BΔu(k+1)\\[2mm] &=A^2Δx(k)+ABΔu(k)+BΔu(k+1) \end{aligned} Δx(k+2k)=AΔx(k+1k)+BΔu(k+1)=A(AΔx(k)+BΔu(k))+BΔu(k+1)=A2Δx(k)+ABΔu(k)+BΔu(k+1)
以此类推,如果我们希望预测控制步长结束之前最后的第 m m m步,那么有:
Δ x ( k + m ∣ k ) = A m Δ x ( k ) + A m − 1 B Δ u ( k ) + A m − 2 B Δ u ( k + 1 ) + . . . + B Δ u ( k + m − 1 ) Δx(k+m|k) = A^mΔx(k)+A^{m-1}BΔu(k)+A^{m-2}BΔu(k+1)+...+BΔu(k+m-1) Δx(k+mk)=AmΔx(k)+Am1BΔu(k)+Am2BΔu(k+1)+...+BΔu(k+m1)
当控制步长结束之后,我们假设控制量不变,也就是 Δ u = 0 Δu=0 Δu=0,那么有:
Δ x ( k + p ∣ k ) = A p Δ x ( k ) + A p − 1 B Δ u ( k ) + A p − 2 B Δ u ( k + 1 ) + . . . + A p − m B Δ u ( k + m − 1 ) Δx(k+p|k) = A^pΔx(k)+A^{p-1}BΔu(k)+A^{p-2}BΔu(k+1)+...+A^{p-m}BΔu(k+m-1) Δx(k+pk)=ApΔx(k)+Ap1BΔu(k)+Ap2BΔu(k+1)+...+ApmBΔu(k+m1)
同样的思路,对于输出方程在控制步长没有结束之前有:
y ( k + m ∣ k ) = ∑ i = 1 m C A i Δ x ( k ) + ∑ i = 1 m C A i − 1 B Δ u ( k ) + ∑ i = 1 m − 1 C A i − 1 B Δ u ( k + 1 ) + . . . + C B Δ u ( k + m − 1 ) + y ( k ) y(k+m|k)=\sum_{i=1}^mCA^iΔx(k)+\sum_{i=1}^mCA^{i-1}BΔu(k)+\sum_{i=1}^{m-1}CA^{i-1}BΔu(k+1)+...+CBΔu(k+m-1)+y(k)\\ y(k+mk)=i=1mCAiΔx(k)+i=1mCAi1BΔu(k)+i=1m1CAi1BΔu(k+1)+...+CBΔu(k+m1)+y(k)
在控制步长结束之后:
y ( k + p ∣ k ) = ∑ i = 1 p C A i Δ x ( k ) + ∑ i = 1 p C A i − 1 B Δ u ( k ) + ∑ i = 1 p − 1 C A i − 1 B Δ u ( k + 1 ) + . . . + ∑ i = 1 p − m + 1 C A i − 1 B Δ u ( k + m − 1 ) + y ( k ) y(k+p|k)=\sum_{i=1}^pCA^iΔx(k)+\sum_{i=1}^pCA^{i-1}BΔu(k)+\sum_{i=1}^{p-1}CA^{i-1}BΔu(k+1)+...+\sum_{i=1}^{p-m+1}CA^{i-1}BΔu(k+m-1)+y(k) y(k+pk)=i=1pCAiΔx(k)+i=1pCAi1BΔu(k)+i=1p1CAi1BΔu(k+1)+...+i=1pm+1CAi1BΔu(k+m1)+y(k)
以上就完成了预测。虽然写成这样就可以,但是为了方便计算和之后的推导,我们把它写成矩阵的形式(其实就是一个简单的列排列)。
为了方便理解这里先用 p = 2 p=2 p=2举个例子:
y ( k + 1 ∣ k ) = C A Δ x ( k ) + C B Δ u ( k ) + y ( k ) y ( k + 2 ∣ k ) = ( C A 2 + C A ) Δ x ( k ) + ( C A B + C B ) Δ u ( k ) + C B Δ u ( k + 1 ) + y ( k ) \begin{aligned} y(k+1|k) &= CAΔx(k)+CBΔu(k)+y(k)\\ y(k+2|k) &= (CA^2+CA)Δx(k)+(CAB+CB)Δu(k)+CBΔu(k+1)+y(k) \end{aligned} y(k+1k)y(k+2k)=CAΔx(k)+CBΔu(k)+y(k)=(CA2+CA)Δx(k)+(CAB+CB)Δu(k)+CBΔu(k+1)+y(k)
这两个式子并列之后,可以整理成矩阵的形式:
( y ( k + 1 ∣ k ) y ( k + 2 ∣ k ) ) = ( C A ( C A 2 + C A ) ) Δ x ( k ) + ( C B 0 C A B C B ) ( Δ u ( k ) Δ u ( k + 1 ) ) + ( I n y × n y I n y × n y ) y ( k ) \left( \begin{array}{c} y(k+1|k)\\ y(k+2|k) \end{array} \right)= \left( \begin{array}{c} CA\\ (CA^2+CA) \end{array} \right)Δx(k)+ \left( \begin{array}{ccc} CB &0\\ CAB &CB \end{array} \right) \left( \begin{array}{c} Δu(k)\\ Δu(k+1) \end{array} \right)+ \left( \begin{array}{c} I_{n_y×n_y}\\ I_{n_y×n_y} \end{array} \right)y(k) (y(k+1k)y(k+2k))=(CA(CA2+CA))Δx(k)+(CBCAB0CB)(Δu(k)Δu(k+1))+(Iny×nyIny×ny)y(k)
这里需要说明一些, Δ x , Δ u , y Δx,Δu,y Δx,Δu,y一般都是一个向量,所以后面的 y y y前面的系数是一个个单位矩阵。在明白矩阵构成方式之后,将其扩展到 k = p k=p k=p时刻,可以写成如下形式:
Y ( k + 1 ∣ k ) = S x Δ x ( k ) + S u Δ U ( k ) + I y ( k ) Y(k+1|k)=S_xΔx(k)+S_uΔU(k)+Iy(k) Y(k+1k)=SxΔx(k)+SuΔU(k)+Iy(k)
其中:
Y ( k + 1 ∣ k ) = ( y ( k + 1 ∣ k ) y ( k + 2 ∣ k ) ⋮ y ( k + p ∣ k ) ) p × 1 Y(k+1|k)= \left( \begin{array}{c} y(k+1|k)\\ y(k+2|k)\\ \vdots\\ y(k+p|k) \end{array} \right)_{p×1} Y(k+1k)=y(k+1k)y(k+2k)y(k+pk)p×1
Δ U ( k ) = ( Δ u ( k ) Δ u ( k + 1 ) ⋮ Δ u ( k + m − 1 ) ) m × 1 ΔU(k)= \left( \begin{array}{c} Δu(k)\\ Δu(k+1)\\ \vdots\\ Δu(k+m-1) \end{array} \right)_{m×1} ΔU(k)=Δu(k)Δu(k+1)Δu(k+m1)m×1
S x = ( C A ∑ i = 1 2 C A i ⋮ ∑ i = 1 p C A i ) p × 1 S_x= \left( \begin{array}{c} CA\\ \sum_{i=1}^2CA^i\\ \vdots\\ \sum_{i=1}^pCA^i \end{array} \right)_{p×1} Sx=CAi=12CAii=1pCAip×1
I = ( I n y × n y I n y × n y ⋮ I n y × n y ) p × 1 I= \left( \begin{array}{c} I_{n_y×n_y}\\ I_{n_y×n_y}\\ \vdots\\ I_{n_y×n_y} \end{array} \right)_{p×1} I=Iny×nyIny×nyIny×nyp×1
S u = ( C B 0 0 ⋯ 0 ∑ i = 1 2 C A i − 1 B C B 0 ⋯ 0 ⋮ ⋮ ⋮ ⋱ ⋮ ∑ i = 1 m C A i − 1 B ∑ i = 1 m − 1 C A i − 1 B ⋯ ⋯ C B ∑ i = 1 p C A i − 1 B ∑ i = 1 p − 1 C A i − 1 B ⋯ ⋯ ∑ i = 1 p − m + 1 C A i − 1 B ) S_u= \left( \begin{array}{ccc} CB &0&0&\cdots&0\\[2mm] \sum_{i=1}^2CA^{i-1}B &CB&0&\cdots&0\\[2mm] \vdots&\vdots&\vdots&\ddots&\vdots&\\[2mm] \sum_{i=1}^mCA^{i-1}B&\sum_{i=1}^{m-1}CA^{i-1}B&\cdots&\cdots&CB\\[2mm] \sum_{i=1}^pCA^{i-1}B&\sum_{i=1}^{p-1}CA^{i-1}B&\cdots&\cdots& \sum_{i=1}^{p-m+1}CA^{i-1}B \end{array} \right) Su=CBi=12CAi1Bi=1mCAi1Bi=1pCAi1B0CBi=1m1CAi1Bi=1p1CAi1B0000CBi=1pm+1CAi1B
这里可以看出, S u S_u Su是一个下三角,这直接反映了控制量在时间上的因果关系,即之后的输入对之前的输入没有影响。

3.优化问题的建立

一般来说,目标函数的选取没有标准形式,这是一种艺术而不是数学。考虑一种最简单的形式,我们希望被控输出接近参考输入:
J = ∑ i = 1 p Q i ( y ( k + i ∣ k ) − r ( k + i ) ) 2 J=\sum_{i=1}^pQ_i(y(k+i|k)-r(k+i))^2 J=i=1pQi(y(k+ik)r(k+i))2
这里 Q i Q_i Qi是权重,表示的是在时刻 i i i对各个分量误差的加权。通常来说,还希望控制的变化不要太大:
J = ∑ i = 1 p Q i ( y ( k + i ∣ k ) − r ( k + i ) ) 2 + ∑ i = 1 m H i ( Δ u ( k + i − 1 ) ) 2 J=\sum_{i=1}^pQ_i(y(k+i|k)-r(k+i))^2+\sum_{i=1}^mH_i(Δu(k+i-1))^2 J=i=1pQi(y(k+ik)r(k+i))2+i=1mHi(Δu(k+i1))2
设参考序列:
R ( k + 1 ) = ( r ( k + 1 ) r ( k + 2 ) ⋮ r ( k + p ) ) p × 1 R(k+1)=\left( \begin{array}{c} r(k+1)\\ r(k+2)\\ \vdots\\ r(k+p) \end{array} \right)_{p×1} R(k+1)=r(k+1)r(k+2)r(k+p)p×1
这样我们就可以将目标函数写成矩阵的形式:
J = Q ( Y ( k + 1 ∣ k ) − R ( k + 1 ) ) 2 + H ( Δ U ( k ) ) 2 J=Q(Y(k+1|k)-R(k+1))^2+H(ΔU(k))^2 J=Q(Y(k+1k)R(k+1))2+H(ΔU(k))2
这里可以看到目标函数都是平方项,如果我们定义:
ρ = ( Q ( Y ( k + 1 ∣ k ) − R ( k + 1 ) ) H Δ U ( k ) ) ρ=\left( \begin{array}{c} \sqrt{Q}(Y(k+1|k)-R(k+1))\\ \sqrt{H}ΔU(k)\\ \end{array} \right) ρ=(Q (Y(k+1k)R(k+1))H ΔU(k))
那么目标函数就可以简化成:
J = ρ T ρ J=ρ^Tρ J=ρTρ
这样我们就可以将开环优化问题描述成如下形式:
min ⁡ Δ U ( k ) J ( x ( k ) , Δ U ( k ) , m , p ) s . t .   Y ( k + 1 ∣ k ) = S x Δ x ( k ) + S u Δ U ( k ) + I y ( k ) \min_{ΔU(k)}J(x(k),ΔU(k),m,p)\\[2mm] \begin{aligned} s.t. Y(k+1|k)=S_xΔx(k)+S_uΔU(k)+Iy(k) \end{aligned} ΔU(k)minJ(x(k),ΔU(k),m,p)s.t. Y(k+1k)=SxΔx(k)+SuΔU(k)+Iy(k)

4.优化问题求解

这是MPC求解的第二和第三步:求解优化问题,将第一个解作用到系统。
这里举一个例子,首先看一个很简单的优化问题:
m i n   x 1 2 + x 2 2 s . t .   x 1 + x 2 = 1 \begin{aligned} &min x_1^2+x_2^2\\[2mm] &s.t.  x_1+x_2=1 \end{aligned} min x12+x22s.t. x1+x2=1
如果是你你怎么求解,当然可以拉格朗日,但是我选择让 x 1 = 1 − x 2 x_1=1-x_2 x1=1x2,然后带到目标函数中,进行求解。这个思路有了之后,其实MPC的推导,也是一个道理,只不过是将模型放进了目标函数里面。
我们现在将 Y Y Y带到 ρ ρ ρ的第一项中:
ρ = ( Q ( S x Δ x ( k ) + S u Δ U ( k ) + I y ( k ) − R ( k + 1 ) ) H Δ U ( k ) ) = ( Q S u H ) Δ U ( k ) − ( Q ( R ( k + 1 ) − S x Δ x ( k ) − I y ( k ) ) 0 ) = ( Q S u H ) Δ U ( k ) − ( Q E ( k + 1 ∣ k ) 0 ) = A z − b \begin{aligned} ρ&=\left( \begin{array}{c} \sqrt{Q}(S_xΔx(k)+S_uΔU(k)+Iy(k)-R(k+1))\\ \sqrt{H}ΔU(k)\\ \end{array} \right)\\[3mm] &=\left( \begin{array}{c} \sqrt{Q}S_u\\ \sqrt{H}\\ \end{array} \right)ΔU(k)-\left( \begin{array}{c} \sqrt{Q}(R(k+1)-S_xΔx(k)-Iy(k))\\ 0\\ \end{array} \right)\\[3mm] &=\left( \begin{array}{c} \sqrt{Q}S_u\\ \sqrt{H}\\ \end{array} \right)ΔU(k)-\left( \begin{array}{c} \sqrt{Q}E(k+1|k)\\ 0\\ \end{array} \right)\\[3mm] &=Az-b \end{aligned} ρ=(Q (SxΔx(k)+SuΔU(k)+Iy(k)R(k+1))H ΔU(k))=(Q SuH )ΔU(k)(Q (R(k+1)SxΔx(k)Iy(k))0)=(Q SuH )ΔU(k)(Q E(k+1k)0)=Azb
ρ T ρ = ( A z − b ) T ( A z − b ) ρ^Tρ=(Az-b)^T(Az-b) ρTρ=(Azb)T(Azb)求导等于零:
d ρ T ρ d z = 2 A T ( A z − b ) = 0 \frac{\mathrm{d} ρ^Tρ }{\mathrm{d} z} = 2A^T(Az-b)=0 dzdρTρ=2AT(Azb)=0
得到最优解为:
z ∗ = ( A T A ) − 1 A T b z^*=(A^TA)^{-1}A^Tb z=(ATA)1ATb
这样我们就可以求解出最优解了,这里需要强调一下,对于
E ( k + 1 ∣ k ) = R ( k + 1 ) − S x Δ x ( k ) − I y ( k ) E(k+1|k)=R(k+1)-S_xΔx(k)-Iy(k) E(k+1k)=R(k+1)SxΔx(k)Iy(k)
这里面都是计算或者观测出来的量。如果将结果 z ∗ z^* z写成:
z ∗ = Δ U ∗ = K ( R ( k + 1 ) − S x Δ x ( k ) − I y ( k ) ) z^* = ΔU^*=K(R(k+1)-S_xΔx(k)-Iy(k)) z=ΔU=K(R(k+1)SxΔx(k)Iy(k))
可以看出,这里面的前馈反映在未来的参考输入 R ( k + 1 ) R(k+1) R(k+1),反馈则反映在当前时刻获取的 Δ x ( k ) 和 y ( k ) Δx(k)和y(k) Δx(k)y(k)上。

加入约束之后的计算方法

对于约束的解释

可能有人有疑问,刚才上面的模型构建中其实是有约束的(模型约束)。这里说的约束一般指的是对自变量范围的约束,而不是模型的约束。那又会有人有疑问,目标函数里面的加权项考虑了对控制动作变化不能太大的要求,这其实是一个软约束。MPC中的约束,是指在优化问题中包含时域硬约束:
u m i n ≤ u ( k + i ) ≤ u m a x ,   i = 0 , 1 , . . . , m − 1 Δ u m i n ≤ Δ u ( k + i ) ≤ Δ u m a x ,   i = 0 , 1 , . . . , m − 1 \begin{aligned} u_{min}≤&u(k+i)≤u_{max}, i=0,1,...,m-1\\[2mm] Δu_{min}≤&Δu(k+i)≤Δu_{max}, i=0,1,...,m-1 \end{aligned} uminΔuminu(k+i)umax, i=0,1,...,m1Δu(k+i)Δumax, i=0,1,...,m1

目标函数抛弃常数项,转化成 z T H z − g T z z^THz-g^Tz zTHzgTz

这一步的思路很简单,这里先给个简单的例子,比如你想求 x 2 + 3 x + 1 x^2+3x+1 x2+3x+1的最小化的那个点 x ∗ x^* x,完全可以不管后面的 1 1 1,求 x 2 + 3 x x^2+3x x2+3x x ∗ x^* x就可以了。初中就知道 − b / 2 a -b/2a b/2a对吧。这里一个道理。对于刚才的目标函数省去最后一项,直接可以推导出:
J 1 = Δ U ( k ) T H Δ U ( k ) − G ( k + 1 ∣ k ) T Δ U ( k ) \begin{aligned} J_1 = ΔU(k)^THΔU(k)-G(k+1|k)^TΔU(k) \end{aligned} J1=ΔU(k)THΔU(k)G(k+1k)TΔU(k)
其中:
H = S u T Q S u + H G ( k + 1 ∣ k ) = 2 S u T Q E ( k + 1 ∣ k ) H = S_u^TQS_u+H\\[2mm] G(k+1|k)=2S_u^TQE(k+1|k) H=SuTQSu+HG(k+1k)=2SuTQE(k+1k)

控制增量约束转化成 C z ≤ b Cz≤b Czb

对于控制的增量:
Δ u m i n ≤ Δ u ( k + i ) ≤ Δ u m a x ,   i = 0 , 1 , . . . , m − 1 Δu_{min}≤Δu(k+i)≤Δu_{max}, i=0,1,...,m-1 ΔuminΔu(k+i)Δumax, i=0,1,...,m1
可以将其竖着排列,就会有:
( Δ u m i n Δ u m i n ⋮ Δ u m i n ) ≤ Δ U ( k ) ≤ ( Δ u m a x Δ u m a x ⋮ Δ u m a x ) \left( \begin{array}{c} Δu_{min}\\ Δu_{min}\\ \vdots\\ Δu_{min}\\ \end{array} \right)≤ΔU(k)≤ \left( \begin{array}{c} Δu_{max}\\ Δu_{max}\\ \vdots\\ Δu_{max}\\ \end{array} \right) ΔuminΔuminΔuminΔU(k)ΔumaxΔumaxΔumax
将左边的小于乘一个负号,这样可以改写成:
Δ U ( k ) ≤ ( Δ u m a x Δ u m a x ⋮ Δ u m a x ) − Δ U ( k ) ≤ ( − Δ u m i n − Δ u m i n ⋮ − Δ u m i n ) ΔU(k)≤ \left( \begin{array}{c} Δu_{max}\\ Δu_{max}\\ \vdots\\ Δu_{max}\\ \end{array} \right)\\ -ΔU(k)≤ \left( \begin{array}{c} -Δu_{min}\\ -Δu_{min}\\ \vdots\\ -Δu_{min}\\ \end{array} \right) ΔU(k)ΔumaxΔumaxΔumaxΔU(k)ΔuminΔuminΔumin
这样合并成:
( T − T ) Δ U ( k ) ≤ ( Δ u m a x Δ u m a x ⋮ Δ u m a x − Δ u m i n − Δ u m i n ⋮ − Δ u m i n ) \left( \begin{array}{c} T\\ -T\\ \end{array} \right)ΔU(k)≤ \left( \begin{array}{c} Δu_{max}\\ Δu_{max}\\ \vdots\\ Δu_{max}\\ -Δu_{min}\\ -Δu_{min}\\ \vdots\\ -Δu_{min}\\ \end{array} \right) (TT)ΔU(k)ΔumaxΔumaxΔumaxΔuminΔuminΔumin
其中:
T = ( I n u × n u 0 ⋯ 0 0 I n u × n u ⋯ 0 ⋮ ⋮ ⋮ 0 0 ⋯ I n u × n u ) T=\left( \begin{array}{ccc} I_{n_u×n_u}&0& \cdots&0\\[2mm] 0&I_{n_u×n_u}&\cdots&0\\[2mm] \vdots&\vdots&&\vdots\\[2mm] 0&0&\cdots&I_{n_u×n_u}\\[2mm] \end{array} \right) T=Inu×nu000Inu×nu000Inu×nu

控制量约束转化成 C z ≤ b Cz≤b Czb

由于有如下关系:
Δ u ( k + i ) = u ( k + i ) − u ( k + i − 1 ) Δu(k+i)=u(k+i)-u(k+i-1) Δu(k+i)=u(k+i)u(k+i1)
因此当 i = 0 i=0 i=0 u ( k ) = u ( k − 1 ) + Δ u ( k ) u(k)=u(k-1)+Δu(k) u(k)=u(k1)+Δu(k),进而有:
u m i n ≤ u ( k ) ≤ u m a x ⟹ { Δ u ( k ) ≤ u m a x − u ( k − 1 ) − Δ u ( k ) ≤ − ( u m i n − u ( k − 1 ) ) u_{min}≤u(k)≤u_{max} \Longrightarrow\begin{cases} Δu(k)≤u_{max}-u(k-1)\\ -Δu(k)≤-(u_{min}-u(k-1)) \end{cases} uminu(k)umax{Δu(k)umaxu(k1)Δu(k)(uminu(k1))
i = 1 i=1 i=1 u ( k + 1 ) = u ( k − 1 ) + Δ u ( k ) + Δ u ( k + 1 ) u(k+1)=u(k-1)+Δu(k)+Δu(k+1) u(k+1)=u(k1)+Δu(k)+Δu(k+1),因此有
u m i n ≤ u ( k + 1 ) ≤ u m a x ⟹ { Δ u ( k ) + Δ u ( k + 1 ) ≤ u m a x − u ( k − 1 ) − ( Δ u ( k ) + Δ u ( k + 1 ) ) ≤ − ( u m i n − u ( k − 1 ) ) u_{min}≤u(k+1)≤u_{max} \Longrightarrow\begin{cases} Δu(k)+Δu(k+1)≤u_{max}-u(k-1)\\ -(Δu(k)+Δu(k+1))≤-(u_{min}-u(k-1)) \end{cases} uminu(k+1)umax{Δu(k)+Δu(k+1)umaxu(k1)(Δu(k)+Δu(k+1))(uminu(k1))
以此类推,对于任何 i = 0 , 1 , 2... , m − 1 i=0,1,2...,m-1 i=0,1,2...,m1
u m i n ≤ u ( k + i ) ≤ u m a x ⟹ { ∑ j = 0 i Δ u ( k + j ) ≤ u m a x − u ( k − 1 ) − ∑ j = 0 i Δ u ( k + j ) ≤ − ( u m i n − u ( k − 1 ) ) u_{min}≤u(k+i)≤u_{max} \Longrightarrow\begin{cases} \sum_{j=0}^iΔu(k+j)≤u_{max}-u(k-1)\\[3mm] -\sum_{j=0}^iΔu(k+j)≤-(u_{min}-u(k-1)) \end{cases} uminu(k+i)umaxj=0iΔu(k+j)umaxu(k1)j=0iΔu(k+j)(uminu(k1))
使用同样的方法,可以将其写成如下形式:
( L − L ) Δ U ( k ) ≤ ( u m a x − u ( k − 1 ) u m a x − u ( k − 1 ) ⋮ u m a x − u ( k − 1 ) − ( u m i n − u ( k − 1 ) ) − ( u m i n − u ( k − 1 ) ) ⋮ − ( u m i n − u ( k − 1 ) ) ) \left( \begin{array}{c} L\\ -L\\ \end{array} \right)ΔU(k)≤ \left( \begin{array}{c} u_{max}-u(k-1)\\ u_{max}-u(k-1)\\ \vdots\\ u_{max}-u(k-1)\\ -(u_{min}-u(k-1))\\ -(u_{min}-u(k-1))\\ \vdots\\ -(u_{min}-u(k-1))\\ \end{array} \right) (LL)ΔU(k)umaxu(k1)umaxu(k1)umaxu(k1)(uminu(k1))(uminu(k1))(uminu(k1))
其中:
L = ( I n u × n u 0 ⋯ 0 I n u × n u I n u × n u ⋯ 0 ⋮ ⋮ ⋮ I n u × n u I n u × n u ⋯ I n u × n u ) L=\left( \begin{array}{ccc} I_{n_u×n_u}&0& \cdots&0\\[2mm] I_{n_u×n_u}&I_{n_u×n_u}&\cdots&0\\[2mm] \vdots&\vdots&&\vdots\\[2mm] I_{n_u×n_u}&I_{n_u×n_u}&\cdots&I_{n_u×n_u}\\[2mm] \end{array} \right) L=Inu×nuInu×nuInu×nu0Inu×nuInu×nu00Inu×nu

转化为QP问题

其实个人认为MPC最后转化为什么问题求解绝大多数情况取决于目标函数的设计。我们可以看到目标函数设计成了二次型的,动力学方程和时域约束条件是线性的,所以问题就变成了一个二次规划(QP)问题:
min ⁡ z   z T H z − g T z s . t .       C z ≤ b \min_z z^THz-g^Tz\\[2mm] s.t.   Cz≤b zmin zTHzgTzs.t.   Czb
一般对于这种问题最常用的两种方法是:积极集法(active-set method)内点法(interior-point method)。这样我们就把MPC问题变成了QP问题进行求解即可。之后将求出的第一个变量作用上去,并循环这个过程。对应于现实问题比如:

  • 15
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薯一个蜂蜜牛奶味的愿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值