当前位置: 首页 > news >正文

【MPC】模型预测控制笔记 (2):约束MPC

目录

  • 前言
    • 【基础】二次型是凸函数
    • 【基础】常见的凸约束
  • 一、约束MPC的求解
    • 1.1 等式约束MPC
    • 1.2 不等式约束MPC
  • 二、稳定性分析
    • 2.1 终端等式约束
      • 2.1.1 稳定性证明
      • 2.1.2 迭代可行性分析
      • 2.1.3 MATLAB应用实例
      • 2.1.4 总结
    • 2.2 终端不等式约束(优化无限时域)
      • 2.2.1 求解步骤与稳定性保证
      • 2.2.2 迭代可行性分析
      • 2.2.3 MATLAB应用实例
      • 2.2.4 总结
  • 附录1
  • 附录2


前言

由上一节可以看到,MPC是通过优化代价函数来求解最优控制序列,这一般是通过凸优化来进行的。
凸优化问题已有高效的算法来进行求解,我们确保构建的优化问题是凸优化即可。
致谢 【模型预测控制(2022春)lecture 2-1 Constrained MPC】、【模型预测控制(2022春)lecture 2-2 Constrained MPC】

【基础】二次型是凸函数

凸函数定义:设 C C C 是非空凸集, f f f 是定义在 D D D 上的函数,对任意 x 1 , x 2 ∈ C x_1, x_2 \in C x1,x2C λ ∈ ( 0 , 1 ) \lambda \in (0,~1) λ(0, 1) ,均有:
f ( λ x 1 + ( 1 − λ ) x 2 ) ≤ λ f ( x 1 ) + ( 1 − λ ) f ( x 2 ) (1) f(\lambda x_1 + (1-\lambda) x_2) \le \lambda f(x_1)+(1-\lambda)f(x_2) \tag{1} f(λx1+(1λ)x2)λf(x1)+(1λ)f(x2)(1)则称 f f f C C C 上的凸函数。

证明二次型 f ( x ) = 1 2 x T H x + f T x f(x) = \frac{1}{2}x^THx+f^Tx f(x)=21xTHx+fTx是凸函数, 其中 x ∈ R n x \in \mathbb{R}^n xRn

任取 x 1 , x 2 ∈ R n x_1, x_2 \in \mathbb{R}^n x1,x2Rn
计算式 (1) 左侧:
f ( λ x 1 + ( 1 − λ ) x 2 ) = 1 2 [ λ 2 x 1 T H x 1 + ( 1 − λ ) 2 x 2 T H x 2 + 2 λ ( 1 − λ ) x 1 T H x 2 ] + f T [ λ x 1 + ( 1 − λ ) x 2 ] \begin{align*} f(\lambda x_1 + (1-\lambda) x_2) &= \frac{1}{2} \left[ \lambda ^2 x_1^THx_1 + (1-\lambda) ^2 x_2^THx_2 + 2\lambda (1-\lambda) x_1^THx_2\right] + f^T \left[ \lambda x_1 + (1-\lambda) x_2\right] \end{align*} f(λx1+(1λ)x2)=21[λ2x1THx1+(1λ)2x2THx2+2λ(1λ)x1THx2]+fT[λx1+(1λ)x2]
计算式 (1) 右侧:
λ f ( x 1 ) + ( 1 − λ ) f ( x 2 ) = 1 2 λ x 1 T H x 1 + 1 2 ( 1 − λ ) x 2 T H x 2 + λ f T x 1 + ( 1 − λ ) f T x 2 \begin{align*} \lambda f(x_1) + (1-\lambda) f(x_2) &= \frac{1}{2} \lambda x_1^THx_1 + \frac{1}{2} (1-\lambda) x_2^THx_2 + \lambda f^Tx_1 + (1-\lambda) f^Tx_2 \end{align*} λf(x1)+(1λ)f(x2)=21λx1THx1+21(1λ)x2THx2+λfTx1+(1λ)fTx2
左侧减右侧得:
f ( λ x 1 + ( 1 − λ ) x 2 ) − ( λ f ( x 1 ) + ( 1 − λ ) f ( x 2 ) ) = − 1 2 λ ( 1 − λ ) x 1 T H x 1 + − 1 2 λ ( 1 − λ ) x 2 T H x 2 + λ ( 1 − λ ) x 1 T H x 2 = 1 2 λ ( 1 − λ ) [ x 1 T H x 2 − x 1 T H x 1 + x 1 T H x 2 − x 2 T H x 2 ] = 1 2 λ ( 1 − λ ) [ x 1 T H ( x 2 − x 1 ) + ( x 1 − x 2 ) T H x 2 ] = 1 2 λ ( 1 − λ ) [ x 1 T H ( x 2 − x 1 ) − x 2 T H ( x 2 − x 1 ) ] = − 1 2 λ ( 1 − λ ) ( x 2 − x 1 ) T H ( x 2 − x 1 ) ≤ 0 (当  H 半正定) \begin{align*} & \hspace{0.5cm} f(\lambda x_1 + (1-\lambda) x_2) - \left(\lambda f(x_1) + (1-\lambda) f(x_2) \right) \\ &= -\frac{1}{2} \lambda (1 - \lambda )x_1^THx_1 + -\frac{1}{2}\lambda(1-\lambda) x_2^THx_2 + \lambda (1-\lambda) x_1^THx_2 \\ &= \frac{1}{2}\lambda(1-\lambda) \left[ x_1^THx_2 - x_1^THx_1 + x_1^THx_2 - x_2^THx_2 \right] \\ &= \frac{1}{2}\lambda(1-\lambda) \left[ x_1^TH(x_2 - x_1) + (x_1 - x_2)^THx_2 \right] \\ &= \frac{1}{2}\lambda(1-\lambda) \left[ x_1^TH(x_2 - x_1) - x_2^TH(x_2 - x_1) \right] \\ &= -\frac{1}{2}\lambda(1-\lambda) (x_2-x_1)^TH(x_2 - x_1) \le 0 \quad \text{(当 $H$ 半正定)} \end{align*} f(λx1+(1λ)x2)(λf(x1)+(1λ)f(x2))=21λ(1λ)x1THx1+21λ(1λ)x2THx2+λ(1λ)x1THx2=21λ(1λ)[x1THx2x1THx1+x1THx2x2THx2]=21λ(1λ)[x1TH(x2x1)+(x1x2)THx2]=21λ(1λ)[x1TH(x2x1)x2TH(x2x1)]=21λ(1λ)(x2x1)TH(x2x1)0( H 半正定)
即:
f ( λ x 1 + ( 1 − λ ) x 2 ) ≤ λ f ( x 1 ) + ( 1 − λ ) f ( x 2 ) f(\lambda x_1 + (1-\lambda) x_2) \le \lambda f(x_1) + (1-\lambda) f(x_2) f(λx1+(1λ)x2)λf(x1)+(1λ)f(x2)

【基础】常见的凸约束

(约束条件构成凸集即为凸约束)
凸集定义:如果 C C C 中任意两点间的线段仍然在 C C C 中,则该集合为凸集;即对于任意 x 1 , x 2 ∈ C x_1, x_2 \in C x1,x2C λ ∈ [ 0 , 1 ] \lambda \in [0,~1] λ[0, 1],都有 λ x 1 + ( 1 − λ ) x 2 ∈ C \lambda x_1 + (1-\lambda) x_2 \in C λx1+(1λ)x2C.
在这里插入图片描述

来源:凸优化(Convex Optimization) (Stephen Boyd, Lieven Vandenberghe, 王书宁译)

常见凸约束
(1) 等式约束: A e q x = b e q A_{eq}x=b_{eq} Aeqx=beq
(2) 不等式约束: A x ≤ b Ax \le b Axb

证明:
(1)任取 x 1 , x 2 ∈ { x ∣ A e q x = b e q } x_1, x_2 \in \{x |A_{eq}x=b_{eq}\} x1,x2{xAeqx=beq} λ ∈ [ 0 , 1 ] \lambda \in [0,~1] λ[0, 1],有:
A e q [ λ x 1 + ( 1 − λ ) x 2 ] = λ A e q x 1 + ( 1 − λ ) A e q x 2 = λ b e q + ( 1 − λ ) b e q = b e q \begin{align*} &\hspace{0.5cm} A_{eq}\left[\lambda x_1 + (1-\lambda) x_2 \right] \\ &= \lambda A_{eq}x_1 + (1-\lambda) A_{eq}x_2 \\ &=\lambda b_{eq} + (1-\lambda) b_{eq} \\ &= b_{eq} \end{align*} Aeq[λx1+(1λ)x2]=λAeqx1+(1λ)Aeqx2=λbeq+(1λ)beq=beq λ x 1 + ( 1 − λ ) x 2 ∈ { x ∣ A e q x = b e q } \lambda x_1 + (1-\lambda) x_2 \in \{x |A_{eq}x=b_{eq}\} λx1+(1λ)x2{xAeqx=beq}.

(2)任取 x 1 , x 2 ∈ { x ∣ A x ≤ b } x_1, x_2 \in \{x |Ax \le b\} x1,x2{xAxb} λ ∈ [ 0 , 1 ] \lambda \in [0,~1] λ[0, 1],有:
A [ λ x 1 + ( 1 − λ ) x 2 ] ≤ λ A x 1 + ( 1 − λ ) A x 2 = λ b + ( 1 − λ ) b = b \begin{align*} &\hspace{0.5cm} A\left[\lambda x_1 + (1-\lambda) x_2 \right] \\ &\le \lambda Ax_1 + (1-\lambda) Ax_2 \\ &= \lambda b + (1-\lambda) b \\ &= b \end{align*} A[λx1+(1λ)x2]λAx1+(1λ)Ax2=λb+(1λ)b=b λ x 1 + ( 1 − λ ) x 2 ∈ { x ∣ A x = b } \lambda x_1 + (1-\lambda) x_2 \in \{x |Ax=b\} λx1+(1λ)x2{xAx=b}.


一、约束MPC的求解

约束MPC的求解相似于上一节【MPC】模型预测控制笔记 (1):无约束MPC,同样是构建二次规划问题来求解最优控制序列 U ∗ U^* U,即:
U ∗ = a r g min ⁡ U 1 2 U T H U + f T U U^*= \mathrm{arg} \min_U \frac{1}{2}U^THU+f^TU U=argUmin21UTHU+fTU

符号说明:
arg min (argument of the minimum): 使得目标函数取得最小值的自变量.
s. t. (subject to): 满足以下条件

1.1 等式约束MPC

在等式约束下,优化问题可表述为:
U ∗ = a r g min ⁡ U 1 2 U T H U + f T U s . t . A e q U = b e q \begin{align*} U^* = &\mathrm{arg} \min_U \frac{1}{2}U^THU+f^TU \\ &\mathrm{s. t.} \quad A_{eq}U = b_{eq} \end{align*} U=argUmin21UTHU+fTUs.t.AeqU=beq
可通过拉格朗日乘子法将带约束优化问题转换为无约束优化问题。
引入未知的拉格朗日乘子 λ \lambda λ,构造拉格朗日函数为:
L = 1 2 U T H U + f T U + λ ( A e q U − b e q ) \mathcal{L} =\frac{1}{2}U^THU+f^TU + \lambda (A_{eq}U - b_{eq}) L=21UTHU+fTU+λ(AeqUbeq)
通过令一阶导数为 0 求解 U U U λ \lambda λ:
{ ∂ L ∂ U = H U + f + λ A e q T = 0 ∂ L ∂ λ = A e q U − b e q = 0 \left\{ \begin{aligned} \frac{\partial \mathcal{L}}{\partial U} &= HU + f + \lambda A_{eq}^T = 0 \\ \frac{\partial \mathcal{L}}{\partial \lambda} &= A_{eq}U - b_{eq} = 0 \end{aligned} \right. ULλL=HU+f+λAeqT=0=AeqUbeq=0

1.2 不等式约束MPC

在不等式约束下,优化问题可表述为:
U ∗ = a r g min ⁡ U 1 2 U T H U + f T U s . t . A U ≤ b \begin{align*} U^* = &\mathrm{arg} \min_U \frac{1}{2}U^THU+f^TU \\ &\mathrm{s. t.} \quad AU \le b \end{align*} U=argUmin21UTHU+fTUs.t.AUb
在 active-set 求解方法中,首先忽略约束求解 U u c ∗ U^*_{uc} Uuc,若 U u c ∗ U^*_{uc} Uuc 超出了不等式的约束范围,说明 U ∗ U^* U 落在了不等式约束的某一边界上(即满足 A ′ U = b ′ A^\prime U=b^\prime AU=b),此时可根据被激活的约束构建等式约束优化问题来求解。

二、稳定性分析

最优不能保证系统稳定,故需要一些措施来保证系统是渐近稳定的。
以下所有内容均针对线性定常系统:
x k + 1 = A x x + B u k x_{k+1} = Ax_{x} + Bu_k xk+1=Axx+Buk

2.1 终端等式约束

终端等式约束即强制令MPC最后一个状态优化为0,
即在原本的优化问题中增加约束 x ( N ∣ k ) = 0 x_{(N|k)} = 0 x(Nk)=0.

2.1.1 稳定性证明

选取最优的代价函数作为李雅普诺夫函数 V ( x k ) V(x_k) V(xk)
V ( x k ) = J k ∗ = ∑ i = 1 N ( x ( i ∣ k ) T Q x ( i ∣ k ) + u ( i ∣ k ) T R u ( i − 1 ∣ k ) ) V(x_k) = J^*_k=\sum^N_{i=1} \left(x^T_{(i|k)}Qx_{(i|k)} + u^T_{(i|k)}Ru_{(i-1|k)} \right) V(xk)=Jk=i=1N(x(ik)TQx(ik)+u(ik)TRu(i1∣k))
显然满足 V ( x k ) > 0 V(x_k) > 0 V(xk)>0.
J k + 1 J_{k+1} Jk+1 为完全按 U k ∗ U_k^* Uk 序列执行下的代价,且令 u ( N − 1 ∣ k + 1 ) = 0 u_{(N-1|k+1)} = 0 u(N1∣k+1)=0
通过终端约束 x ( N ∣ k ) = 0 x_{(N|k)} = 0 x(Nk)=0 可知,在 U k ∗ U_k^* Uk 序列下,有 x ( N ∣ k + 1 ) = A x ( N − 1 ∣ k + 1 ) + B u ( N − 1 ∣ k + 1 ) = A x ( N ∣ k ) + 0 = 0 x_{(N|k+1)} = Ax_{(N-1|k+1)} + Bu_{(N-1|k+1)} = Ax_{(N|k)} + 0 = 0 x(Nk+1)=Ax(N1∣k+1)+Bu(N1∣k+1)=Ax(Nk)+0=0.
故有:
J k + 1 ∗ − J k ∗ ≤ J k + 1 − J k ∗ = ∑ i = 1 N ( x ( i ∣ k + 1 ) T Q x ( i ∣ k + 1 ) + u ( i − 1 ∣ k + 1 ) T R u ( i − 1 ∣ k + 1 ) ) − ∑ i = 1 N ( x ( i ∣ k ) T Q x ( i ∣ k ) + u ( i − 1 ∣ k ) T R u ( i − 1 ∣ k ) ) = [ ∑ i = 1 N − 1 ( x ( i + 1 ∣ k ) T Q x ( i + 1 ∣ k ) + u ( i ∣ k ) T R u ( i − 1 ∣ k ) ) + 0 + 0 ] − ∑ i = 1 N ( x ( i ∣ k ) T Q x ( i ∣ k ) + u ( i − 1 ∣ k ) T R u ( i − 1 ∣ k ) ) = − ( x ( 1 ∣ k ) T Q x ( 1 ∣ k ) + u ( 0 ∣ k ) T R u ( 0 ∣ k ) ) ≤ 0 \begin{align*} J_{k+1}^* - J_{k}^* &\le J_{k+1} - J_{k}^* \\ &= \sum^{N}_{i=1} \left( x^T_{(i|k+1)}Qx_{(i|k+1)} + u^T_{(i-1|k+1)}Ru_{(i-1|k+1)} \right) - \sum^{N}_{i=1} \left( x^T_{(i|k)}Qx_{(i|k)} + u^T_{(i-1|k)}Ru_{(i-1|k)} \right) \\ &= \left[ \sum^{N-1}_{i=1} \left( x^T_{(i+1|k)}Qx_{(i+1|k)} + u^T_{(i|k)}Ru_{(i-1|k)} \right) + 0 + 0 \right] - \sum^{N}_{i=1} \left( x^T_{(i|k)}Qx_{(i|k)} + u^T_{(i-1|k)}Ru_{(i-1|k)} \right) \\ &= - \left( x^T_{(1|k)}Qx_{(1|k)} + u^T_{(0|k)}Ru_{(0|k)} \right) \\ &\le 0 \end{align*} Jk+1JkJk+1Jk=i=1N(x(ik+1)TQx(ik+1)+u(i1∣k+1)TRu(i1∣k+1))i=1N(x(ik)TQx(ik)+u(i1∣k)TRu(i1∣k))=[i=1N1(x(i+1∣k)TQx(i+1∣k)+u(ik)TRu(i1∣k))+0+0]i=1N(x(ik)TQx(ik)+u(i1∣k)TRu(i1∣k))=(x(1∣k)TQx(1∣k)+u(0∣k)TRu(0∣k))0
其中, Q Q Q R R R 正定。故有 Δ V ( x ) = J k + 1 ∗ − J k ∗ ≤ 0 \Delta V(x) = J_{k+1}^* - J_{k}^* \le 0 ΔV(x)=Jk+1Jk0,当且仅当 x ( 1 ∣ k ) T = 0 x^T_{(1|k)}=0 x(1∣k)T=0 u ( 0 ∣ k ) T = 0 u^T_{(0|k)}=0 u(0∣k)T=0时,等号成立。
故系统渐近稳定。

2.1.2 迭代可行性分析

终端约束 x ( N ∣ k ) = 0 x_{(N|k)} = 0 x(Nk)=0 其实是难以保证可达到的,
可以证明的是,当在初始状态下可达,则未来迭代中均可达 (所谓迭代可行性)。

在无约束系统中,
一阶系统可以在 1 步的跌代中使状态归零,
如系统: v ˙ = F / m \dot{v} = F/m v˙=F/m,无论初值 v 0 v_0 v0 为多少,都可施加适当的作用力使速度在一个迭代中归零,即令 v = v 0 + ( F ∗ / m ) Δ t = 0 v = v_0 + (F^*/m) \Delta t = 0 v=v0+(F/m)Δt=0.
二阶系统可以在 2 步的跌代中使状态归零,
如系统:
{ s ˙ = v v ˙ = F / m \left\{ \begin{aligned} \dot{s} &= v\\ \dot{v} &= F/m \end{aligned} \right. {s˙v˙=v=F/m
在第一步迭代中, s 1 = s 0 + v 0 Δ t s_1 = s_0 + v_0 \Delta t s1=s0+v0Δt,使 v 1 = s 1 / Δ t v_1 =s_1/\Delta t v1=s1t,则 F 0 = m ( v 1 − v 0 ) / Δ t F_0 = m(v_1-v_0)/ \Delta t F0=m(v1v0)t.
在第二步迭代中, s 2 = s 1 + v 1 Δ t = 0 s_2 = s_1 + v_1 \Delta t = 0 s2=s1+v1Δt=0,使 v 2 = v 1 + ( F 1 / m ) Δ t = 0 v_2 = v_1 + (F_1/m)\Delta t = 0 v2=v1+(F1/m)Δt=0 即完成系统状态归零.
但在约束系统中,这是难以保证的。

我们可分析初始状态下终端约束 x ( N ∣ k ) = 0 x_{(N|k)} = 0 x(Nk)=0 是否可达来保证终端约束可达。

迭代可行性:终端约束 x ( N ∣ k ) = 0 x_{(N|k)} = 0 x(Nk)=0 当在初始状态下可达,则未来迭代中均可达

证明:
若在初始状态下有可行解 U 0 = [ u ( 0 ∣ 0 ) , u ( 1 ∣ 0 ) , u ( 2 ∣ 0 ) , ⋯ , u ( N − 1 ∣ 0 ) ] U_0 = \left[ u_{(0|0)},~ u_{(1|0)}, ~u_{(2|0)},~\cdots,~ u_{(N-1|0)} \right] U0=[u(0∣0), u(1∣0), u(2∣0), , u(N1∣0)],使得 x ( N ∣ 0 ) = 0 x_{(N|0)} = 0 x(N∣0)=0.
则在执行 u ( 0 ∣ 0 ) u_{(0|0)} u(0∣0) 后进入下一状态,必然存在可行解 U 1 = [ u ( 1 ∣ 0 ) , u ( 2 ∣ 0 ) , ⋯ , u ( N − 1 ∣ 0 ) , u ( N − 1 ∣ 1 ) ] U_1 = \left[ u_{(1|0)}, ~u_{(2|0)},~\cdots,~ u_{(N-1|0)},~u_{(N-1|1)} \right] U1=[u(1∣0), u(2∣0), , u(N1∣0), u(N1∣1)].
其中 u ( N − 1 ∣ 1 ) = 0 u_{(N-1|1)} = 0 u(N1∣1)=0.
x ( N − 1 ∣ 1 ) = x ( N ∣ 0 ) = 0 x_{(N-1|1)} = x_{(N|0)} = 0 x(N1∣1)=x(N∣0)=0,仅当 u ( N − 1 ∣ 1 ) = 0 u_{(N-1|1)} = 0 u(N1∣1)=0 时,有 x ( N ∣ 1 ) = A x ( N − 1 ∣ 1 ) + B u ( N − 1 ∣ 1 ) = 0 x_{(N|1)} = Ax_{(N-1|1)} + Bu_{(N-1|1)} = 0 x(N∣1)=Ax(N1∣1)+Bu(N1∣1)=0.
由此类推,
当在初始状态下有可行解 U 0 = [ u ( 0 ∣ 0 ) , u ( 1 ∣ 0 ) , u ( 2 ∣ 0 ) , ⋯ , u ( N − 1 ∣ 0 ) ] U_0 = \left[ u_{(0|0)},~ u_{(1|0)}, ~u_{(2|0)},~\cdots,~ u_{(N-1|0)} \right] U0=[u(0∣0), u(1∣0), u(2∣0), , u(N1∣0)] 时,
系统必然有可行解 [ u ( 0 ∣ 0 ) , u ( 1 ∣ 0 ) , u ( 2 ∣ 0 ) , ⋯ , u ( N − 1 ∣ 0 ) , 0 , 0 , ⋯ ] \left[ u_{(0|0)},~ u_{(1|0)}, ~u_{(2|0)},~\cdots,~ u_{(N-1|0)},~0,~ 0,~ \cdots \right] [u(0∣0), u(1∣0), u(2∣0), , u(N1∣0), 0, 0, ] 可满足终端约束.

2.1.3 MATLAB应用实例

针对系统:
x k + 1 = A x k + B u k x_{k+1} = Ax_k + Bu_k xk+1=Axk+Buk
其中 x ∈ R 2 x \in \mathbb{R}^2 xR2 u ∈ R 1 u \in \mathbb{R}^1 uR1 A = [ 1.1 2 0 0.95 ] A = \begin{bmatrix} 1.1 & 2 \\ 0 & 0.95 \end{bmatrix} A=[1.1020.95] B = [ 0 0.079 ] B = \begin{bmatrix} 0 \\ 0.079 \end{bmatrix} B=[00.079],且输入需要满足约束 − 2 ≤ u ≤ 2 -2 \le u \le 2 2u2.

(1) N N N 步预测空间的状态可写为:
X = G x ( 0 ∣ k ) + H U (1) X=\mathcal{G}x_{(0|k)} + \mathcal{H}U \tag{1} X=Gx(0∣k)+HU(1)
其中,
X = [ x ( 1 ∣ k ) x ( 2 ∣ k ) ⋯ x ( N ∣ k ) ] T U = [ u ( 0 ∣ k ) u ( 1 ∣ k ) ⋯ u ( N − 1 ∣ k ) ] T G = [ A A 2 ⋯ A N ] T H = [ B 0 0 ⋯ 0 A B B 0 ⋯ 0 A 2 B A B B ⋯ 0 ⋮ ⋮ ⋮ ⋱ ⋮ A N − 1 B A 2 B A B ⋯ B ] \begin{align*} X &= [x_{(1|k)} ~ x_{(2|k)} ~ \cdots~x_{(N|k)}]^T \\ U &= [u_{(0|k)} ~ u_{(1|k)} ~ \cdots~u_{(N-1|k)}]^T \\ \mathcal{G} &= \left[ A ~ A^2 ~\cdots ~ A^N \right]^T \\ \mathcal{H} &= \begin{bmatrix} B & 0 & 0 & \cdots & 0\\ AB & B & 0 & \cdots & 0\\ A^2B & AB & B & \cdots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ A^{N-1}B & A^2B & AB & \cdots & B \end{bmatrix} \end{align*} XUGH=[x(1∣k) x(2∣k)  x(Nk)]T=[u(0∣k) u(1∣k)  u(N1∣k)]T=[A A2  AN]T= BABA2BAN1B0BABA2B00BAB000B
(2)定义代价函数为:
J = X T Q X + U T R U (2) J=X^T\mathcal{Q}X +U^T\mathcal{R}U \tag{2} J=XTQX+UTRU(2)
(3)将式 (1) 代入式 (2),并考虑约束条件,增加终端约束,可构建二次规划问题:
U k ∗ = a r g min ⁡ U k [ ( G x ( 0 ∣ k ) ) T Q ′ G x ( 0 ∣ k ) + 2 x ( 0 ∣ k ) T G T Q ′ H U k + U k T ( H T Q ′ H + R ) U k ] s . t . − 2 N × 1 ≤ U k ≤ 2 N × 1 x ( N ∣ k ) = 0 \begin{align*} U_{k}^* = &\mathrm{arg} \min_{U_k} \left[ (\mathcal{G}x_{(0|k)})^T \mathcal{Q}^\prime \mathcal{G}x_{(0|k)} + 2x_{(0|k)}^T\mathcal{G}^T \mathcal{Q}^\prime \mathcal{H} U_k + U_k^T (\mathcal{H}^T \mathcal{Q}^\prime \mathcal{H} + \mathcal{R})U_k \right] \\ &\hspace{3cm} \mathrm{s. t.} \quad \mathbf{-2}_{N \times1} \le U_k \le \mathbf{2}_{N \times1} \\ &\hspace{4cm} x_{(N|k)} = 0 \end{align*} Uk=argUkmin[(Gx(0∣k))TQGx(0∣k)+2x(0∣k)TGTQHUk+UkT(HTQH+R)Uk]s.t.2N×1Uk2N×1x(Nk)=0
其中, x ( N ∣ k ) = [ 0 , 0 , ⋯ , I 2 × 2 ] X k = [ 0 , 0 , ⋯ , I 2 × 2 ] [ G x ( 0 ∣ k ) + H U k ] = 0 x_{(N|k)} = [0,~0,~\cdots, ~I_{2 \times 2}]X_k = [0,~0,~\cdots, ~I_{2 \times 2}] \left[ \mathcal{G}x_{(0|k)} + \mathcal{H}U_k \right] = 0 x(Nk)=[0, 0, , I2×2]Xk=[0, 0, , I2×2][Gx(0∣k)+HUk]=0.
可以改写为:
A e q U k = b e q A_{eq}U_k = b_{eq} AeqUk=beq其中 A e q = [ 0 , 0 , ⋯ , I 2 × 2 ] H A_{eq} = [0,~0,~\cdots, ~I_{2 \times 2}]\mathcal{H} Aeq=[0, 0, , I2×2]H b e q = − [ 0 , 0 , ⋯ , I 2 × 2 ] G x ( 0 ∣ k ) b_{eq} = -[0,~0,~\cdots, ~I_{2 \times 2}]\mathcal{G}x_{(0|k)} beq=[0, 0, , I2×2]Gx(0∣k).
忽略与输入无关的项,优化问题可重新写为:
U k ∗ = a r g min ⁡ U k [ 1 2 U k T H U k + f T U k ] s . t . − 2 N × 1 ≤ U k ≤ 2 N × 1 A e q U k = b e q \begin{align*} U_{k}^* = &\mathrm{arg} \min_{U_k} \left[ \frac{1}{2}U_k^THU_k + f^TU_k \right] \\ &\mathrm{s. t.} \quad \mathbf{-2}_{N \times1} \le U_k \le \mathbf{2}_{N \times1} \\ &\hspace{1cm} A_{eq}U_k = b_{eq} \end{align*} Uk=argUkmin[21UkTHUk+fTUk]s.t.2N×1Uk2N×1AeqUk=beq其中, H = 2 ( H T Q ′ H + R ) H = 2(\mathcal{H}^T \mathcal{Q}^\prime \mathcal{H} + \mathcal{R}) H=2(HTQH+R) f T = 2 x ( 0 ∣ k ) T G T Q ′ H f^T = 2x_{(0|k)}^T\mathcal{G}^T \mathcal{Q}^\prime \mathcal{H} fT=2x(0∣k)TGTQH.
以上形式可使用MATLAB的 quadprog 函数求解,MATLAB代码见附录1.
设置控制时域 N = 20 N=20 N=20,得到结果如下:
在这里插入图片描述

2.1.4 总结

终端等式约束MPC特点:

  • + 简单
  • + 可保证系统稳定性,但需确保初始可行
  • - 需要足够长的控制时域 N N N 来保证初始可行
  • - 增加终端等式约束会削弱求解可行性:原来的优化问题是凸优化,加上等式约束后可能使原本的凸约束集变为空集,无法求解

2.2 终端不等式约束(优化无限时域)

与上一节 【MPC】模型预测控制笔记 (1):无约束MPC 一致,优化无限步预测空间时,可通过选取李雅普诺夫直接法证明系统的稳定性。
找到一个反馈增益 K K K 使系统 x k + 1 = ( A − B K ) x k x_{k+1} = (A-BK)x_{k} xk+1=(ABK)xk 渐近稳定时,显然不能在任意状态下,使所有 u k = − K x k u_k = -Kx_k uk=Kxk 满足约束

设集合 U \mathcal{U} U 为满足约束条件的输入集合。
我们可以寻找一个不变集 Ω \Omega Ω : 若 x k ∈ Ω x_k \in \Omega xkΩ,则 x k + 1 ∈ Ω x_{k+1} \in \Omega xk+1Ω.
当找到一个反馈增益 K K K 可使系统 x k + 1 = ( A − B K ) x k x_{k+1} = (A-BK)x_{k} xk+1=(ABK)xk 渐近稳定,
且满足 x k ∈ Ω x_k \in \Omega xkΩ u k ∈ − K Ω ⊂ U u_k \in -K\Omega \subset \mathcal{U} ukKΩU
则此时系统未来时刻始终满足约束条件,可使用上一节中的无约束MPC的方法求解。

2.2.1 求解步骤与稳定性保证

(1)增加终端不等式约束 A x ( N , k ) ≤ b Ax_{(N,k)} \le b Ax(N,k)b ,保证优化的终端状态进入不变集 x ( N , 0 ) ∈ Ω x_{(N,0)} \in \Omega x(N,0)Ω
(2)选择一个反馈增益 K K K ,使系统 x k + 1 = ( A − B K ) x k x_{k+1} = (A-BK)x_{k} xk+1=(ABK)xk 渐近稳定,且满足 u k ∈ − K Ω ⊂ U u_k \in -K\Omega \subset \mathcal{U} ukKΩU
(3)通过优化无限时域来保证稳定性(证明参考【MPC】模型预测控制笔记 (1):无约束MPC):
终端不等式约束保证了在 N N N ∞ \infty 的时域中,可使 u k = − K x k u_k = -Kx_k uk=Kxk,满足 u k ∈ U u_k \in \mathcal{U} ukU.

2.2.2 迭代可行性分析

当初始状态可满足终端不等式约束 A x ( N , k ) ≤ b Ax_{(N,k)} \le b Ax(N,k)b ,未来所有状态都可以满足

当在初始状态下有可行解 U 0 = [ u ( 0 ∣ 0 ) , u ( 1 ∣ 0 ) , u ( 2 ∣ 0 ) , ⋯ , u ( N − 1 ∣ 0 ) ] U_0 = \left[ u_{(0|0)},~ u_{(1|0)}, ~u_{(2|0)},~\cdots,~ u_{(N-1|0)} \right] U0=[u(0∣0), u(1∣0), u(2∣0), , u(N1∣0)] 时,
系统必然有可行解 [ u ( 0 ∣ 0 ) , u ( 1 ∣ 0 ) , u ( 2 ∣ 0 ) , ⋯ , u ( N − 1 ∣ 0 ) , − K x N + 1 , − K x N + 2 , ⋯ ] \left[ u_{(0|0)},~ u_{(1|0)}, ~u_{(2|0)},~\cdots,~ u_{(N-1|0)},~-Kx_{N+1},~ -Kx_{N+2},~ \cdots \right] [u(0∣0), u(1∣0), u(2∣0), , u(N1∣0), KxN+1, KxN+2, ],使系统在 N N N 步状态后始终满足终端不等式约束.

2.2.3 MATLAB应用实例

同样针对系统:
x k + 1 = A x k + B u k x_{k+1} = Ax_k + Bu_k xk+1=Axk+Buk
其中 x ∈ R 2 x \in \mathbb{R}^2 xR2 u ∈ R 1 u \in \mathbb{R}^1 uR1 A = [ 1.1 2 0 0.95 ] A = \begin{bmatrix} 1.1 & 2 \\ 0 & 0.95 \end{bmatrix} A=[1.1020.95] B = [ 0 0.079 ] B = \begin{bmatrix} 0 \\ 0.079 \end{bmatrix} B=[00.079],且输入需要满足约束 − 2 ≤ u ≤ 2 -2 \le u \le 2 2u2.

(1) N N N 步预测空间的状态可写为:
X = G x ( 0 ∣ k ) + H U X=\mathcal{G}x_{(0|k)} + \mathcal{H}U X=Gx(0∣k)+HU
其中,
X = [ x ( 1 ∣ k ) x ( 2 ∣ k ) ⋯ x ( N ∣ k ) ] T U = [ u ( 0 ∣ k ) u ( 1 ∣ k ) ⋯ u ( N − 1 ∣ k ) ] T G = [ A A 2 ⋯ A N ] T H = [ B 0 0 ⋯ 0 A B B 0 ⋯ 0 A 2 B A B B ⋯ 0 ⋮ ⋮ ⋮ ⋱ ⋮ A N − 1 B A 2 B A B ⋯ B ] \begin{align*} X &= [x_{(1|k)} ~ x_{(2|k)} ~ \cdots~x_{(N|k)}]^T \\ U &= [u_{(0|k)} ~ u_{(1|k)} ~ \cdots~u_{(N-1|k)}]^T \\ \mathcal{G} &= \left[ A ~ A^2 ~\cdots ~ A^N \right]^T \\ \mathcal{H} &= \begin{bmatrix} B & 0 & 0 & \cdots & 0\\ AB & B & 0 & \cdots & 0\\ A^2B & AB & B & \cdots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ A^{N-1}B & A^2B & AB & \cdots & B \end{bmatrix} \end{align*} XUGH=[x(1∣k) x(2∣k)  x(Nk)]T=[u(0∣k) u(1∣k)  u(N1∣k)]T=[A A2  AN]T= BABA2BAN1B0BABA2B00BAB000B
(2)增加终端约束 x ( N ∣ k ) ∈ Ω x_{(N|k)} \in \Omega x(Nk)Ω,其中,
x ( N ∣ k ) = [ 0 , 0 , ⋯ , I 2 × 2 ] X k = [ 0 , 0 , ⋯ , I 2 × 2 ] [ G x ( 0 ∣ k ) + H U k ] x_{(N|k)} = [0,~0,~\cdots, ~I_{2 \times 2}]X_k = [0,~0,~\cdots, ~I_{2 \times 2}] \left[ \mathcal{G}x_{(0|k)} + \mathcal{H}U_k \right] x(Nk)=[0, 0, , I2×2]Xk=[0, 0, , I2×2][Gx(0∣k)+HUk] Ω \Omega Ω 为不变集.
(不变集的选取待补充,目前笔者也不清楚)
可以选取足够小的集合 X \mathcal{X} X 来替代不变集,但集合范围越大,可行性越强。
此处选取 X = [ − 0.2 , 0.2 ] × [ − 0.1 , 0.1 ] ( 笛卡尔积形式,等价于: { ( x 1 , x 2 ) ∈ R 2 ∣ x 1 ∈ [ − 0.2 , 0.2 ] , x 2 ∈ [ − 0.1 , 0.1 ] } ) \mathcal{X} = [-0.2,~0.2] \times [-0.1,~0.1] ~~(\text{笛卡尔积形式,等价于:}\{(x_1, x_2) \in \mathbb{R}^2 |~ x_1 \in [-0.2,~0.2], x_2 \in [-0.1,~0.1]\}) X=[0.2, 0.2]×[0.1, 0.1]  (笛卡尔积形式,等价于:{(x1,x2)R2 x1[0.2, 0.2],x2[0.1, 0.1]})
约束 x ( N ∣ k ) ∈ X x_{(N|k)} \in \mathcal{X} x(Nk)X 可以改写为:
A i n U k ≤ b i n A_{in}U_k \le b_{in} AinUkbin其中,
A i n = [ 1 0 − 1 0 0 1 0 − 1 ] [ 0 , 0 , ⋯ , I 2 × 2 ] H b i n = [ 0.2 0.2 0.1 0.1 ] − [ 1 0 − 1 0 0 1 0 − 1 ] [ 0 , 0 , ⋯ , I 2 × 2 ] G x ( 0 ∣ k ) \begin{align*} A_{in} &= \begin{bmatrix} 1 & 0 \\ -1 & 0 \\ 0 & 1 \\ 0 &-1 \end{bmatrix} [0,~0,~\cdots, ~I_{2 \times 2}] \mathcal{H} \\ b_{in} &= \begin{bmatrix} 0.2 \\ 0.2 \\ 0.1 \\ 0.1 \end{bmatrix}-\begin{bmatrix} 1 & 0 \\ -1 & 0 \\ 0 & 1 \\ 0 &-1 \end{bmatrix}[0,~0,~\cdots, ~I_{2 \times 2}] \mathcal{G} x_{(0|k)} \end{align*} Ainbin= 11000011 [0, 0, , I2×2]H= 0.20.20.10.1 11000011 [0, 0, , I2×2]Gx(0∣k).
(3)选取反馈增益 K = [ 1.4 5.76 ] K=[1.4 \quad 5.76] K=[1.45.76],可验证其满足 ∣ e i g ( A − B K ) ∣ < 1 |\mathrm{eig}(A-BK)|<1 eig(ABK)<1 − 2 ≤ − K X ≤ 2 -2 \le -K\mathcal{X} \le 2 2KX2
(4)通过 P − ( A − B K ) T P ( A − B K ) = Q + K T R K P-(A-BK)^TP(A-BK) = Q + K^TRK P(ABK)TP(ABK)=Q+KTRK 求解 P
(5)定义代价函数为:
J = X T Q p X + U T R p U J=X^T\mathcal{Q_p}X +U^T\mathcal{R_p}U J=XTQpX+UTRpU其中, Q p = d i a g ( Q , Q , ⋯ , P ) Q_p = \mathrm{diag}(Q, Q, \cdots, P) Qp=diag(Q,Q,,P) R p = d i a g ( R , R , ⋯ , R ) R_p = \mathrm{diag}(R, R, \cdots, R) Rp=diag(R,R,,R).
(6)构建二次规划问题:
U k ∗ = a r g min ⁡ U k [ 1 2 U k T H U k + f T U k ] s . t . − 2 N × 1 ≤ U k ≤ 2 N × 1 A i n U k ≤ b i n \begin{align*} U_{k}^* = &\mathrm{arg} \min_{U_k} \left[ \frac{1}{2}U_k^THU_k + f^TU_k \right] \\ &\mathrm{s. t.} \quad \mathbf{-2}_{N \times1} \le U_k \le \mathbf{2}_{N \times1} \\ &\hspace{1cm} A_{in}U_k \le b_{in} \end{align*} Uk=argUkmin[21UkTHUk+fTUk]s.t.2N×1Uk2N×1AinUkbin其中, H = 2 ( H T Q ′ H + R ) H = 2(\mathcal{H}^T \mathcal{Q}^\prime \mathcal{H} + \mathcal{R}) H=2(HTQH+R) f T = 2 x ( 0 ∣ k ) T G T Q ′ H f^T = 2x_{(0|k)}^T\mathcal{G}^T \mathcal{Q}^\prime \mathcal{H} fT=2x(0∣k)TGTQH.
MATLAB代码见附录2.
设置控制时域 N = 20 N=20 N=20,得到结果如下:
在这里插入图片描述

2.2.4 总结

终端不等式约束相比终端等式约束:

  • + 可行性更强,但仍需确保初始可行
  • - 更复杂

附录1

%%
A = [1.1 2;0 0.95];
B = [0; 0.079];
Q = eye(2);
R = 0.1;% 预测空间
N = 20; % 当控制时域过小时(如 N=10),将无法满足终端约束条件,求解会导致错误[G, H] = getGH(N, A, B);
[Qp, Rp] = getQR(N, Q, Q, R);xCur = [1;1]; % 设初始状态为[1;1]
%% 约束条件
lb = -2 * ones(N, 1);
ub = 2 * ones(N, 1);n = size(A, 2);
tmp = kron(ones(1, N-1), zeros(n));
tmp = [tmp, eye(n)];
% Aeq = tmp * H;
% beq = -tmp * G * xCur;
%% 效果演示
xCur = [1; 1]; % 设初始状态为[1;1]
xLog = xCur;
uLog = [];options = optimoptions('quadprog', 'MaxIterations', 200, 'Display','none');step = 0:50;
for i = stepHp = 2 * (H' * Qp * H + Rp);fp = 2 * xCur' * G' * Qp * H;Hp = 0.5 * (Hp + Hp');Aeq = tmp * H;beq = -tmp * G * xCur;U = quadprog(Hp, fp, [], [], Aeq, beq, lb, ub, zeros(N,1), options);u = U(1);xCur = A*xCur + B*u;xLog = [xLog, xCur];uLog = [uLog, u];
endfigure(1)
subplot(3,1,1)
plot(step, xLog(1,1:end-1))
title('x1')
grid on
subplot(3,1,2)
plot(step, xLog(2,1:end-1))
title('x2')
grid on
subplot(3,1,3)
plot(step, uLog)
title('u')
grid on
%%
function [Qp, Rp] = getQR(N, Q, P, R)Qp = eye(N);Qp(end) = 0;Qp = kron(Qp, Q) + kron(eye(N)-Qp, P);Rp = eye(N);Rp = kron(Rp, R);
endfunction [G, H] = getGH(N, A, B) % N>1tmp = A;G = tmp;for i=2:Ntmp = A*tmp;G = [G; tmp];endr = size(B, 1);c = size(B, 2);H = zeros(r * N, c * N);tmp = B;for j = N:-1:1H( (j-1)*r+1:j*r, (j-1)*c+1:j*c ) = tmp;endfor i = 2:Ntmp = A*tmp;for j = i:NH( (j-1)*r+1:j*r, (j-i)*c+1:(j-i+1)*c ) = tmp;endend
end

附录2

%%
A = [1.1 2;0 0.95];
B = [0; 0.079];
Q = eye(2);
R = 0.1;% 预测空间
N = 20;% 求解P
K = [1.4 5.76];
Q = eye(2);
R = 0.1;
syms P [2 2] % P 为2*2的矩阵
equ = P - (A - B*K)' * P * (A - B*K) == Q + K'*R*K;
Psol = solve(equ, P);
Psol = [Psol.P1_1, Psol.P2_1; Psol.P2_1, Psol.P2_2];
Psol = double(Psol);
disp(Psol)[G, H] = getGH(N, A, B);
[Qp, Rp] = getQR(N, Q, Psol, R);xCur = [1;1]; % 设初始状态为[1;1]
%% 约束条件
lb = -2 * ones(N, 1);
ub = 2 * ones(N, 1);n = size(A, 2);
tmpReshape = kron(ones(1, N-1), zeros(n));
tmpReshape = [tmpReshape, eye(n)];
tmpAin = [1  0;-1  0;0  1;0 -1];
tmpbin = [0.2; 0.2; 0.1; 0.1];
% Ain = tmpAin * tmpReshape * H;
% bin = tmpbin - tmpAin * tmpReshape * G * xCur;
%% 效果演示
xCur = [1; 1]; % 设初始状态为[1;1]
xLog = xCur;
uLog = [];options = optimoptions('quadprog', 'MaxIterations', 200, 'Display','none');step = 0:50;
u = zeros(N, 1);
for i = stepHp = 2 * (H' * Qp * H + Rp);fp = 2 * xCur' * G' * Qp * H;Hp = 0.5 * (Hp + Hp');Ain = tmpAin * tmpReshape * H;bin = tmpbin - tmpAin * tmpReshape * G * xCur;U = quadprog(Hp, fp, Ain, bin, [], [], lb, ub, u, options);u = U(1);xCur = A*xCur + B*u;xLog = [xLog, xCur];uLog = [uLog, u];
endfigure(1)
subplot(3,1,1)
plot(step, xLog(1,1:end-1))
title('x1')
grid on
subplot(3,1,2)
plot(step, xLog(2,1:end-1))
title('x2')
grid on
subplot(3,1,3)
plot(step, uLog)
title('u')
grid on
%%
function [Qp, Rp] = getQR(N, Q, P, R)Qp = eye(N);Qp(end) = 0;Qp = kron(Qp, Q) + kron(eye(N)-Qp, P);Rp = eye(N);Rp = kron(Rp, R);
endfunction [G, H] = getGH(N, A, B) % N>1tmp = A;G = tmp;for i=2:Ntmp = A*tmp;G = [G; tmp];endr = size(B, 1);c = size(B, 2);H = zeros(r * N, c * N);tmp = B;for j = N:-1:1H( (j-1)*r+1:j*r, (j-1)*c+1:j*c ) = tmp;endfor i = 2:Ntmp = A*tmp;for j = i:NH( (j-1)*r+1:j*r, (j-i)*c+1:(j-i+1)*c ) = tmp;endend
end

相关文章:

  • HTML+CSS实现的动态登录界面
  • 【技术追踪】用于 CBCT 到 CT 合成的纹理保持扩散模型(MIA-2025)
  • 车载以太网-switch
  • python精讲之文件操作
  • 晶振常见封装工艺及其特点
  • 《第五章-心法进阶》 C++修炼生涯笔记(基础篇)指针与结构体⭐⭐⭐⭐⭐
  • Python脚本开发入门:从基础到进阶技巧
  • 印度客机坠毁致波音美股盘前直线下跌​
  • python中的zip函数
  • Java集合 - ArrayList底层源码解析
  • C++标准库大全(STL)
  • jupyter内核崩溃
  • 第四章 指令系统
  • 强化学习 PPO
  • 红帽认证工程师(RHCE):掌握Linux自动化的关键
  • Python Day50 学习(仍为日志Day19的内容复习)
  • 全链路实时感知:网络专线端到端监控运维
  • 1万美元iO bounty破解之旅
  • 《Deep Residual Learning for Image Recognition》(深度残差学习在图像识别中的应用)
  • Active Directory Certificate Services(AD CS)攻击基础
  • 浏览器兼容测试网站/深圳百度开户
  • 免费做网站公司哪家好/爱站官网
  • 网站设计怎么做链接/图片外链生成工具在线
  • 网站网站地图怎么做/免费发布信息网网站
  • 做网站的公司重庆/网络销售怎么学
  • 包头网站开发/朋友圈推广一天30元