该小节的旨在根据上一节得到的离散误差动力学模型,在MPC的滚动时间窗内建立并求解QP问题.
首先,我们要回答以下两个问题:
1. 什 么 是 Q P 问 题 ? 其 标 准 形 式 的 什 么 样 的 ? 2. 怎 么 把 M P C 中 的 优 化 问 题 转 化 为 求 解 Q P 问 题 ? \begin{aligned} &1.什么是QP问题?其标准形式的什么样的? \\ &2.怎么把MPC中的优化问题转化为求解QP问题? \end{aligned} 1.什么是QP问题?其标准形式的什么样的?2.怎么把MPC中的优化问题转化为求解QP问题?
简要回答第一个问题: QP(Quadratic programming),即二次规划.旨在优化(最小化或最大化)一个带线性约束的多元二次型代价函数.其标准形式为
m i n x J = m i n x 1 2 x T Q x + x T g s . t . A x ≤ b \begin{aligned} &\mathop{min}\limits_{x}\quad J \quad=\quad \mathop{min}\limits_{x} &&\frac{1}{2}x^TQx+x^Tg\\ &s.t. && Ax \leq b\\ \end{aligned} xminJ=xmins.t.21xTQx+xTgAx≤b
其中 Q Q Q 需为半正定矩阵,因为当且仅当 Q ⪰ 0 Q \succeq 0 Q⪰0时,QP问题才是一个凸优化问题.
目前众多开源的QP问题求解器如 ( O S Q P / q p O A S E S ) (OSQP/qpOASES) (OSQP/qpOASES) 以及 M a t l a b Matlab Matlab 中的 q u a d p r o g quadprog quadprog 都为以上QP问题提供了求解的API.
接下来回答第二个问题,如何将MPC转化为求解QP问题?
通常的,MPC控制算法包含以下四个基本步骤:
1.根据已知的系统模型和控制序列,预测时间窗内各状态变量 2.计算在满足约束的条件下最小化损失函数 J 的控制序列 3.将第二步中得到的控制序列的第一个控制量输入到系统中 4.在下一次采样时间,将时间往前推动一步,重复步骤1-3 \begin{aligned} &\text{1.根据已知的系统模型和控制序列,预测时间窗内各状态变量}\\ &\text{2.计算在满足约束的条件下最小化损失函数 $J$ 的控制序列}\\ &\text{3.将第二步中得到的控制序列的第一个控制量输入到系统中}\\ &\text{4.在下一次采样时间,将时间往前推动一步,重复步骤1-3} \end{aligned} 1.根据已知的系统模型和控制序列,预测时间窗内各状态变量2.计算在满足约束的条件下最小化损失函数 J 的控制序列3.将第二步中得到的控制序列的第一个控制量输入到系统中4.在下一次采样时间,将时间往前推动一步,重复步骤1-3
步骤一中,我们需要根据当前系统状态和已知的控制序列对时间窗内的状态变量值作出预测.这可以通过对系统的离散动力学模型作差分来实现,即计算得到系统的预测方程.
步骤二中,我们要将控制过程的性能期望构造为一个二次型损失函数,并把过程中的约束条件改写为 A x ⪯ b Ax \preceq b Ax⪯b 的形式.至此,就完成了一个标准QP问题的构造,接下来就是通过合适的优化方法求解该问题.
步骤三中,我们只将控制序列中的第一项作为真实控制量输入.在我看来,这一步是MPC策略的精髓.采用这种策略,我认为原因有二.
原因一是因为步骤一和步骤二中的预测以及优化过程均为开环,在系统不确定度的影响下,这种计算是粗略的.
略作延伸, 前两步操作其实和Kalman滤波算法中的预测过程相似,但想要预测结果收敛于真值,单有预测是不够的.我们需要持续将最新的观测纳入考虑,利用其中蕴含的信息对预测过程中的相关量进行修正.这对应Kalman滤波算法中的更新过程,即通过贝叶斯定理,利用观测量对协方差矩阵进行修正.
那么MPC是如何利用最新的观测的呢? MPC的策略是在进入下一次采样时间后, 将最新的观测量转化为预测步骤的初始条件,然后在新的时间窗内进行预测,优化.这种方法称为滚动时域优化,因此MPC也称作滚动时域控制.
由此,我们便引出了原因二.即通过滚动时域的方法, 保障步骤三的操作可以满足最终的控制目标,而控制过程又符合优化损失函数的预期.两者相互配合,形成闭环.
值得一提的是,滚动时域的策略使MPC的优化求解都是在一个有限时间的窗口下进行的,因此是无法保障得到整个时域的全局最优.但是因为持续优化,最终也能获得较好的结果. 虽然MPC策略损失了全局最优性,但其获得了更大灵活性.M因此相较于如LQR/LQG等最优控制器,MPC对于复杂非线性约束的对应更加自如,以及模型误差容忍度更高.
综上,回答第二个问题:通过滚动时域优化的方法,将MPC算法转化为在每一个时间窗下求解一个QP问题.
我们将离散误差动力学模型改写为以控制量增量 Δ δ \Delta\delta Δδ 的输入的增量式模型.当然了你也可以不用增量式模型,直接用原有模型也是可以的.这并不影响预测方程的形式,只不过我选择了增量式模型作为例子,MPC的模型和损失函数的构造都是很灵活的.回到主题,增量式模型如下:
x ( k + 1 ) = A d x ( k ) + B d δ ( k ) + B c d ψ ˙ d e s ( k ) = A d x ( k ) + B d [ δ ( k − 1 ) + Δ δ ( k ) ] + B c d ψ ˙ d e s ( k ) \begin{aligned} x(k+1) &= A_dx(k)+B_d\delta(k)+B_{cd}\dot{\psi}_{des}(k) \\ &= A_dx(k)+B_d[\delta(k-1)+\Delta\delta(k)]+B_{cd}\dot{\psi}_{des}(k) \end{aligned} x(k+1)=Adx(k)+Bdδ(k)+Bcdψ˙des(k)=Adx(k)+Bd[δ(k−1)+Δδ(k)]+Bcdψ˙des(k)
进一步的, 将以上模型改写为矩阵形式,可得
[ x ( k + 1 ) δ ( k ) ] = [ A d B d 0 I ] [ x ( k ) δ ( k − 1 ) ] + [ B d I ] Δ δ ( k ) + [ B c d 0 ] ψ ˙ d e s ( k ) y ( k ) = [ C d 0 ] [ x ( k ) δ ( k − 1 ) ] \begin{aligned} &\begin{bmatrix} x(k+1) \\ \delta(k) \end{bmatrix} = \begin{bmatrix} A_d & B_d\\ 0 & I \end{bmatrix} \begin{bmatrix} x(k) \\ \delta(k-1) \end{bmatrix} + \begin{bmatrix} B_d \\ I \end{bmatrix}\Delta\delta(k)+ \begin{bmatrix} B_{cd} \\ 0 \end{bmatrix}\dot{\psi}_{des}(k)\\ \\ &y(k) = \begin{bmatrix} C_d & 0 \end{bmatrix} \begin{bmatrix} x(k) \\ \delta(k-1) \end{bmatrix} \end{aligned} [x(k+1)δ(k)]=[Ad0BdI][x(k)δ(k−1)]+[BdI]Δδ(k)+[Bcd0]ψ˙des(k)y(k)=[Cd0][x(k)δ(k−1)]
定义
ξ ( k ∣ t ) = [ x ( k ) δ ( k − 1 ) ] A ~ d = [ A d B d 0 I ] B ~ d = [ B d I ] B ~ c d = [ B c d 0 ] C ~ d = [ C d 0 ] \begin{aligned} &\xi(k|t) = \begin{bmatrix} x(k) \\ \delta(k-1) \end{bmatrix} \quad \widetilde{A}_d = \begin{bmatrix} A_d & B_d\\ 0 & I \end{bmatrix} \\ &\widetilde{B}_d = \begin{bmatrix} B_d \\ I \end{bmatrix} \quad \widetilde{B}_{cd} = \begin{bmatrix} B_{cd} \\ 0 \end{bmatrix} \quad \widetilde{C}_d = \begin{bmatrix} C_d & 0 \end{bmatrix} \end{aligned} ξ(k∣t)=[x(k)δ(k−1)]A d=[Ad0BdI]B d=[BdI]B cd=[Bcd0]C d=[Cd0]
其中, ξ ( k ∣ t ) \xi(k|t) ξ(k∣t) 代表在 t t t时刻,预测 k k k个周期得到的状态.为了简便, 在后续的使用中 ξ ( k ) \xi(k) ξ(k) 与 ξ ( k ∣ t ) \xi(k|t) ξ(k∣t) 通用.
综上,增量式离散误差动力学模型为
ξ ( k + 1 ) = A ~ d ξ ( k ) + B ~ d Δ δ ( k ) + B ~ c d ψ ˙ d e s ( k ) y ( k ) = C ~ d ξ ( k ) \begin{aligned} &\xi(k+1) = \widetilde{A}_d\xi(k)+\widetilde{B}_d\Delta\delta(k)+\widetilde{B}_{cd}\dot{\psi}_{des}(k)\\ &y(k) = \widetilde{C}_d\xi(k) \end{aligned} ξ(k+1)=A dξ(k)+B dΔδ(k)+B cdψ˙des(k)y(k)=C dξ(k)
假设预测步数为 k k k,即MPC的预测时域为 k k k个周期,则预测方程有
ξ ( 1 ) = A ~ d ξ ( 0 ) + B ~ d Δ δ ( 0 ) + B ~ c d ψ ˙ d e s ( 0 ) ξ ( 2 ) = A ~ d ξ ( 1 ) + B ~ d Δ δ ( 1 ) + B ~ c d ψ ˙ d e s ( 1 ) = A ~ d [ A ~ d ξ ( 0 ) + B ~ d Δ δ ( 0 ) + B ~ c d ψ ˙ d e s ( 0 ) ] + B ~ d Δ δ ( 1 ) + B ~ c d ψ ˙ d e s ( 1 ) = A ~ d 2 ξ ( 0 ) + A ~ d B ~ d Δ δ ( 0 ) + B ~ d Δ δ ( 1 ) + A ~ d B ~ c d ψ ˙ d e s ( 0 ) + B ~ c d ψ ˙ d e s ( 1 ) ξ ( 3 ) = A ~ d ξ ( 2 ) + B ~ d Δ δ ( 2 ) + B ~ c d ψ ˙ d e s ( 2 ) = A ~ d [ A ~ d 2 ξ ( 0 ) + A ~ d B ~ d Δ δ ( 0 ) + B ~ d Δ δ ( 1 ) + A ~ d B ~ c d ψ ˙ d e s ( 0 ) + B ~ c d ψ ˙ d e s ( 1 ) ] + B ~ d Δ δ ( 2 ) + B ~ c d ψ ˙ d e s ( 2 ) = A ~ d 3 ξ ( 0 ) + A ~ d 2 B ~ d Δ δ ( 0 ) + A ~ d B ~ d Δ δ ( 1 ) + B ~ d Δ δ ( 2 ) + A ~ d 2 B ~ c d ψ ˙ d e s ( 0 ) + A ~ d B ~ c d ψ ˙ d e s ( 1 ) + B ~ c d ψ ˙ d e s ( 2 ) . . . ξ ( k ) = A ~ d ( k ) ξ ( 0 ) + ∑ i = 0 k − 1 A ~ d ( i ) B ~ d Δ δ ( k − i − 1 ) + ∑ j = 0 k − 1 A ~ d ( j ) B ~ c d ψ ˙ d e s ( k − j − 1 ) y ( k ) = C ~ d ξ ( k ) = C ~ d A ~ d ( k ) ξ ( 0 ) + C ~ d ∑ i = 0 k − 1 A ~ d ( i ) B ~ d Δ δ ( k − i − 1 ) + C ~ d ∑ j = 0 k − 1 A ~ d ( j ) B ~ c d ψ ˙ d e s ( k − j − 1 ) \begin{aligned} &\xi(1) &&=\widetilde{A}_d\xi(0)+\widetilde{B}_d\Delta\delta(0)+\widetilde{B}_{cd}\dot{\psi}_{des}(0) \\ \\ &\xi(2) &&=\widetilde{A}_d\xi(1)+\widetilde{B}_d\Delta\delta(1)+\widetilde{B}_{cd}\dot{\psi}_{des}(1) \\ & &&=\widetilde{A}_d[\widetilde{A}_d\xi(0)+\widetilde{B}_d\Delta\delta(0)+\widetilde{B}_{cd}\dot{\psi}_{des}(0)] +\widetilde{B}_d\Delta\delta(1)+\widetilde{B}_{cd}\dot{\psi}_{des}(1) \\ & &&=\widetilde{A}^2_d\xi(0)+\widetilde{A}_d\widetilde{B}_d\Delta\delta(0)+\widetilde{B}_d\Delta\delta(1)+ \widetilde{A}_d\widetilde{B}_{cd}\dot{\psi}_{des}(0)+\widetilde{B}_{cd}\dot{\psi}_{des}(1) \\ \\ &\xi(3) &&=\widetilde{A}_d\xi(2)+\widetilde{B}_d\Delta\delta(2)+\widetilde{B}_{cd}\dot{\psi}_{des}(2) \\ & &&=\widetilde{A}_d[\widetilde{A}^2_d\xi(0)+\widetilde{A}_d\widetilde{B}_d\Delta\delta(0)+\widetilde{B}_d\Delta\delta(1)+ \widetilde{A}_d\widetilde{B}_{cd}\dot{\psi}_{des}(0)+\widetilde{B}_{cd}\dot{\psi}_{des}(1)]+\widetilde{B}_d\Delta\delta(2)+\widetilde{B}_{cd}\dot{\psi}_{des}(2)\\ & &&=\widetilde{A}^3_d\xi(0)+\widetilde{A}^2_d\widetilde{B}_d\Delta\delta(0)+\widetilde{A}_d\widetilde{B}_d\Delta\delta(1)+\widetilde{B}_d\Delta\delta(2)+ \widetilde{A}^2_d\widetilde{B}_{cd}\dot{\psi}_{des}(0)+\widetilde{A}_d\widetilde{B}_{cd}\dot{\psi}_{des}(1)+\widetilde{B}_{cd}\dot{\psi}_{des}(2) \\ \\ & \ ... \\ \\ &\xi(k) &&= \widetilde{A}^{(k)}_d\xi(0)+\sum_{i=0}^{k-1}\widetilde{A}_d^{(i)}\widetilde{B}_d\Delta\delta(k-i-1)+ \sum_{j=0}^{k-1}\widetilde{A}_d^{(j)}\widetilde{B}_{cd}\dot{\psi}_{des}(k-j-1) \\ &y(k) &&=\widetilde{C}_d\xi(k)=\widetilde{C}_d\widetilde{A}^{(k)}_d\xi(0)+\widetilde{C}_d\sum_{i=0}^{k-1}\widetilde{A}_d^{(i)}\widetilde{B}_d\Delta\delta(k-i-1)+ \widetilde{C}_d\sum_{j=0}^{k-1}\widetilde{A}_d^{(j)}\widetilde{B}_{cd}\dot{\psi}_{des}(k-j-1) \end{aligned} ξ(1)ξ(2)ξ(3) ...ξ(k)y(k)=A dξ(0)+B dΔδ(0)+B cdψ˙des(0)=A dξ(1)+B dΔδ(1)+B cdψ˙des(1)=A d[A dξ(0)+B dΔδ(0)+B cdψ˙des(0)]+B dΔδ(1)+B cdψ˙des(1)=A d2ξ(0)+A dB dΔδ(0)+B dΔδ(1)+A dB cdψ˙des(0)+B cdψ˙des(1)=A dξ(2)+B dΔδ(2)+B cdψ˙des(2)=A d[A d2ξ(0)+A dB dΔδ(0)+B dΔδ(1)+A dB cdψ˙des(0)+B cdψ˙des(1)]+B dΔδ(2)+B cdψ˙des(2)=A d3ξ(0)+A d2B dΔδ(0)+A dB dΔδ(1)+B dΔδ(2)+A d2B cdψ˙des(0)+A dB cdψ˙des(1)+B cdψ˙des(2)=A d(k)ξ(0)+i=0∑k−1A d(i)B dΔδ(k−i−1)+j=0∑k−1A d(j)B cdψ˙des(k−j−1)=C dξ(k)=C dA d(k)ξ(0)+C di=0∑k−1A d(i)B dΔδ(k−i−1)+C dj=0∑k−1A d(j)B cdψ˙des(k−j−1)
基于以上的预测方程,我们可以通过 t t t时刻的状态量初值 ξ ( 0 ) \xi(0) ξ(0),建立状态量 ξ \xi ξ 在 k k k 个时域预测周期内与各周期控制增量 Δ δ \Delta\delta Δδ 之间的联系,即
[ ξ ( t + 1 ∣ t ) ξ ( t + 2 ∣ t ) ξ ( t + 3 ∣ t ) ⋮ ξ ( t + k ∣ t ) ] = [ A ~ d A ~ d 2 A ~ d 3 ⋮ A ~ d k ] ξ ( 0 ) + [ B ~ d 0 0 … 0 A ~ d B ~ d B ~ d 0 … 0 A ~ d 2 B ~ d A ~ d B ~ d B ~ d … 0 ⋮ ⋮ ⋮ ⋱ ⋮ A ~ d k − 1 B ~ d A ~ d k − 2 B ~ d A ~ d k − 3 B ~ d … B ~ d ] [ Δ δ ( 0 ) Δ δ ( 1 ) Δ δ ( 2 ) ⋮ Δ δ ( k − 1 ) ] + [ B ~ c d 0 0 … 0 A ~ d B ~ c d B ~ c d 0 … 0 A ~ d 2 B ~ c d A ~ d B ~ c d B ~ c d … 0 ⋮ ⋮ ⋮ ⋱ ⋮ A ~ d k − 1 B ~ c d A ~ d k − 2 B ~ c d A ~ d k − 3 B ~ c d … B ~ c d ] [ ψ ˙ d e s ( 0 ) ψ ˙ d e s ( 1 ) ψ ˙ d e s ( 2 ) ⋮ ψ ˙ d e s ( k − 1 ) ] \begin{bmatrix} \xi(t+1 | t) \\ \xi(t+2 | t) \\ \xi(t+3 | t) \\ \vdots \\ \xi(t+k | t)\end{bmatrix} = \begin{bmatrix} \widetilde{A}_d \\ \widetilde{A}^2_d \\ \widetilde{A}^3_d \\ \vdots \\ \widetilde{A}^k_d\end{bmatrix}\xi(0)+ \begin{bmatrix} \widetilde{B}_d & 0 & 0 & \dots & 0 \\ \widetilde{A}_d\widetilde{B}_d & \widetilde{B}_d & 0 & \dots & 0 \\ \widetilde{A}_d^2\widetilde{B}_d & \widetilde{A}_d\widetilde{B}_d & \widetilde{B}_d & \dots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ \widetilde{A}_d^{k-1}\widetilde{B}_d & \widetilde{A}_d^{k-2}\widetilde{B}_d &\widetilde{A}_d^{k-3}\widetilde{B}_d & \dots & \widetilde{B}_d \end{bmatrix} \begin{bmatrix} \Delta\delta(0) \\ \Delta\delta(1) \\ \Delta\delta(2) \\ \vdots \\ \Delta\delta(k-1) \end{bmatrix} + \begin{bmatrix} \widetilde{B}_{cd} & 0 & 0 & \dots & 0\\ \widetilde{A}_d\widetilde{B}_{cd} & \widetilde{B}_{cd} & 0 & \dots & 0 \\ \widetilde{A}_d^2\widetilde{B}_{cd} & \widetilde{A}_d\widetilde{B}_{cd} & \widetilde{B}_{cd} & \dots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ \widetilde{A}_d^{k-1}\widetilde{B}_{cd} & \widetilde{A}_d^{k-2}\widetilde{B}_{cd} &\widetilde{A}_d^{k-3}\widetilde{B}_{cd} & \dots & \widetilde{B}_{cd} \end{bmatrix} \begin{bmatrix} \dot{\psi}_{des}(0) \\ \dot{\psi}_{des}(1) \\ \dot{\psi}_{des}(2) \\ \vdots \\ \dot{\psi}_{des}(k-1) \end{bmatrix} ⎣⎢⎢⎢⎢⎢⎡ξ(t+1∣t)ξ(t+2∣t)ξ(t+3∣t)⋮ξ(t+k∣t)⎦⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎡A dA d2A d3⋮A dk⎦⎥⎥⎥⎥⎥⎤ξ(0)+⎣⎢⎢⎢⎢⎢⎡B dA dB dA d2B d⋮A dk−1B d0B dA dB d⋮A dk−2B d00B d⋮A dk−3B d………⋱…000⋮B d⎦⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎡Δδ(0)Δδ(1)Δδ(2)⋮Δδ(k−1)⎦⎥⎥⎥⎥⎥⎤+⎣⎢⎢⎢⎢⎢⎡B cdA dB cdA d2B cd⋮A dk−1B cd0B cdA dB cd⋮A dk−2B cd00B cd⋮A dk−3B cd………⋱…000⋮B cd⎦⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎡ψ˙des(0)ψ˙des(1)ψ˙des(2)⋮ψ˙des(k−1)⎦⎥⎥⎥⎥⎥⎤
定义
X = [ ξ ( t + 1 ∣ t ) ξ ( t + 2 ∣ t ) ⋮ ξ ( t + k ∣ t ) ] Δ U = [ Δ δ ( 0 ) Δ δ ( 1 ) ⋮ Δ δ ( k − 1 ) ] Λ = [ A ~ d A ~ d 2 ⋮ A ~ d k ] Ψ = [ ψ ˙ d e s ( 0 ) ψ ˙ d e s ( 1 ) ψ ˙ d e s ( 2 ) ⋮ ψ ˙ d e s ( k − 1 ) ] Γ = [ B ~ d 0 0 … 0 A ~ d B ~ d B ~ d 0 … 0 A ~ d 2 B ~ d A ~ d B ~ d B ~ d … 0 ⋮ ⋮ ⋮ ⋱ ⋮ A ~ d k − 1 B ~ d A ~ d k − 2 B ~ d A ~ d k − 3 B ~ d … B ~ d ] Υ = [ B ~ c d 0 0 … 0 A ~ d B ~ c d B ~ c d 0 … 0 A ~ d 2 B ~ c d A ~ d B ~ c d B ~ c d … 0 ⋮ ⋮ ⋮ ⋱ ⋮ A ~ d k − 1 B ~ c d A ~ d k − 2 B ~ c d A ~ d k − 3 B ~ c d … B ~ c d ] \begin{aligned} &X = \begin{bmatrix} \xi(t+1 | t) \\ \xi(t+2 | t) \\ \vdots \\ \xi(t+k | t)\end{bmatrix} \quad \Delta U = \begin{bmatrix} \Delta\delta(0) \\ \Delta\delta(1) \\ \vdots \\ \Delta\delta(k-1) \end{bmatrix} \quad \Lambda = \begin{bmatrix} \widetilde{A}_d \\ \widetilde{A}^2_d \\ \vdots \\ \widetilde{A}^k_d\end{bmatrix} \quad \Psi = \begin{bmatrix} \dot{\psi}_{des}(0) \\ \dot{\psi}_{des}(1) \\ \dot{\psi}_{des}(2) \\ \vdots \\ \dot{\psi}_{des}(k-1) \end{bmatrix}\\ \\ &\Gamma = \begin{bmatrix} \widetilde{B}_d & 0 & 0 & \dots & 0 \\ \widetilde{A}_d\widetilde{B}_d & \widetilde{B}_d & 0 & \dots & 0 \\ \widetilde{A}_d^2\widetilde{B}_d & \widetilde{A}_d\widetilde{B}_d & \widetilde{B}_d & \dots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ \widetilde{A}_d^{k-1}\widetilde{B}_d & \widetilde{A}_d^{k-2}\widetilde{B}_d &\widetilde{A}_d^{k-3}\widetilde{B}_d & \dots & \widetilde{B}_d \end{bmatrix}\\ \\ &\Upsilon = \begin{bmatrix} \widetilde{B}_{cd} & 0 & 0 & \dots & 0\\ \widetilde{A}_d\widetilde{B}_{cd} & \widetilde{B}_{cd} & 0 & \dots & 0 \\ \widetilde{A}_d^2\widetilde{B}_{cd} & \widetilde{A}_d\widetilde{B}_{cd} & \widetilde{B}_{cd} & \dots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ \widetilde{A}_d^{k-1}\widetilde{B}_{cd} & \widetilde{A}_d^{k-2}\widetilde{B}_{cd} &\widetilde{A}_d^{k-3}\widetilde{B}_{cd} & \dots & \widetilde{B}_{cd} \end{bmatrix} \end{aligned} X=⎣⎢⎢⎢⎡ξ(t+1∣t)ξ(t+2∣t)⋮ξ(t+k∣t)⎦⎥⎥⎥⎤ΔU=⎣⎢⎢⎢⎡Δδ(0)Δδ(1)⋮Δδ(k−1)⎦⎥⎥⎥⎤Λ=⎣⎢⎢⎢⎡A dA d2⋮A dk⎦⎥⎥⎥⎤Ψ=⎣⎢⎢⎢⎢⎢⎡ψ˙des(0)ψ˙des(1)ψ˙des(2)⋮ψ˙des(k−1)⎦⎥⎥⎥⎥⎥⎤Γ=⎣⎢⎢⎢⎢⎢⎡B dA dB dA d2B d⋮A dk−1B d0B dA dB d⋮A dk−2B d00B d⋮A dk−3B d………⋱…000⋮B d⎦⎥⎥⎥⎥⎥⎤Υ=⎣⎢⎢⎢⎢⎢⎡B cdA dB cdA d2B cd⋮A dk−1B cd0B cdA dB cd⋮A dk−2B cd00B cd⋮A dk−3B cd………⋱…000⋮B cd⎦⎥⎥⎥⎥⎥⎤
进一步的,定义
Y = [ y ( t + 1 ∣ t ) y ( t + 2 ∣ t ) ⋮ y ( t + k ∣ t ) ] Ω = [ C ~ d A ~ d C ~ d A ~ d 2 ⋮ C ~ d A ~ d k ] Θ = [ C ~ d B ~ d 0 0 … 0 C ~ d A ~ d B ~ d C ~ d B ~ d 0 … 0 C ~ d A ~ d 2 B ~ d C ~ d A ~ d B ~ d C ~ d B ~ d … 0 ⋮ ⋮ ⋮ ⋱ ⋮ C ~ d A ~ d k − 1 B ~ d C ~ d A ~ d k − 2 B ~ d C ~ d A ~ d k − 3 B ~ d … C ~ d B ~ d ] Φ = [ C ~ d B ~ c d 0 0 … 0 C ~ d A ~ d B ~ c d C ~ d B ~ c d 0 … 0 C ~ d A ~ d 2 B ~ c d C ~ d A ~ d B ~ c d C ~ d B ~ c d … 0 ⋮ ⋮ ⋮ ⋱ ⋮ C ~ d A ~ d k − 1 B ~ c d C ~ d A ~ d k − 2 B ~ c d C ~ d A ~ d k − 3 B ~ c d … C ~ d B ~ c d ] \begin{aligned} &Y = \begin{bmatrix} y(t+1 | t) \\ y(t+2 | t) \\ \vdots \\ y(t+k | t)\end{bmatrix} \quad \Omega = \begin{bmatrix} \widetilde{C}_d\widetilde{A}_d \\ \widetilde{C}_d\widetilde{A}^2_d \\ \vdots \\ \widetilde{C}_d\widetilde{A}^k_d\end{bmatrix} \\ \\ &\Theta = \begin{bmatrix} \widetilde{C}_d\widetilde{B}_d & 0 & 0 & \dots & 0 \\ \widetilde{C}_d\widetilde{A}_d\widetilde{B}_d & \widetilde{C}_d\widetilde{B}_d & 0 & \dots & 0 \\ \widetilde{C}_d\widetilde{A}_d^2\widetilde{B}_d & \widetilde{C}_d\widetilde{A}_d\widetilde{B}_d & \widetilde{C}_d\widetilde{B}_d & \dots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ \widetilde{C}_d\widetilde{A}_d^{k-1}\widetilde{B}_d & \widetilde{C}_d\widetilde{A}_d^{k-2}\widetilde{B}_d &\widetilde{C}_d\widetilde{A}_d^{k-3}\widetilde{B}_d & \dots & \widetilde{C}_d\widetilde{B}_d \end{bmatrix}\\ \\ &\Phi = \begin{bmatrix} \widetilde{C}_d\widetilde{B}_{cd} & 0 & 0 & \dots & 0\\ \widetilde{C}_d\widetilde{A}_d\widetilde{B}_{cd} & \widetilde{C}_d\widetilde{B}_{cd} & 0 & \dots & 0 \\ \widetilde{C}_d\widetilde{A}_d^2\widetilde{B}_{cd} & \widetilde{C}_d\widetilde{A}_d\widetilde{B}_{cd} & \widetilde{C}_d\widetilde{B}_{cd} & \dots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ \widetilde{C}_d\widetilde{A}_d^{k-1}\widetilde{B}_{cd} & \widetilde{C}_d\widetilde{A}_d^{k-2}\widetilde{B}_{cd} &\widetilde{C}_d\widetilde{A}_d^{k-3}\widetilde{B}_{cd} & \dots & \widetilde{C}_d\widetilde{B}_{cd} \end{bmatrix} \end{aligned} Y=⎣⎢⎢⎢⎡y(t+1∣t)y(t+2∣t)⋮y(t+k∣t)⎦⎥⎥⎥⎤Ω=⎣⎢⎢⎢⎡C dA dC dA d2⋮C dA dk⎦⎥⎥⎥⎤Θ=⎣⎢⎢⎢⎢⎢⎡C dB dC dA dB dC dA d2B d⋮C dA dk−1B d0C dB dC dA dB d⋮C dA dk−2B d00C dB d⋮C dA dk−3B d………⋱…000⋮C dB d⎦⎥⎥⎥⎥⎥⎤Φ=⎣⎢⎢⎢⎢⎢⎡C dB cdC dA dB cdC dA d2B cd⋮C dA dk−1B cd0C dB cdC dA dB cd⋮C dA dk−2B cd00C dB cd⋮C dA dk−3B cd………⋱…000⋮C dB cd⎦⎥⎥⎥⎥⎥⎤
综上有
X = Λ ξ ( 0 ) + Γ Δ U + Υ Ψ Y = Ω ξ ( 0 ) + Θ Δ U + Φ Ψ \begin{aligned} &X=\Lambda\xi(0)+\Gamma\Delta U+\Upsilon\Psi\\ &Y=\Omega\xi(0)+\Theta\Delta U +\Phi\Psi \end{aligned} X=Λξ(0)+ΓΔU+ΥΨY=Ωξ(0)+ΘΔU+ΦΨ
我构造的代价函数惩罚输出量以及控制增量,因此
J = ∣ ∣ Y − Y d e s ∣ ∣ Q c + ∣ ∣ Δ U ∣ ∣ R c = ( Y − Y d e s ) T Q c ( Y − Y d e s ) + Δ U T R c Δ U = ( Ω ξ ( 0 ) + Θ Δ U + Φ Ψ − Y d e s ) T Q c ( Ω ξ ( 0 ) + Θ Δ U + Φ Ψ − Y d e s ) + Δ U T R c Δ U \begin{aligned} J &= ||Y-Y_{des}||_{Q_c}+||\Delta U||_{R_c}\\ &=(Y-Y_{des})^TQ_c(Y-Y_{des})+\Delta U^TR_c\Delta U\\ &=(\Omega\xi(0)+\Theta\Delta U+\Phi\Psi-Y_{des})^TQ_c(\Omega\xi(0)+\Theta\Delta U+\Phi\Psi-Y_{des})+\Delta U^TR_c\Delta U \end{aligned} J=∣∣Y−Ydes∣∣Qc+∣∣ΔU∣∣Rc=(Y−Ydes)TQc(Y−Ydes)+ΔUTRcΔU=(Ωξ(0)+ΘΔU+ΦΨ−Ydes)TQc(Ωξ(0)+ΘΔU+ΦΨ−Ydes)+ΔUTRcΔU
我们优化的对象参数是 Δ U \Delta U ΔU,因此将代价函数中不含对象参数的部分定义为 N N N,则
N = Ω ξ ( 0 ) + Φ Ψ − Y d e s N = \Omega\xi(0)+\Phi\Psi-Y_{des} N=Ωξ(0)+ΦΨ−Ydes
将 N N N 代入到代价函数中可得
J = ( N + Θ Δ U ) T Q c ( N + Θ Δ U ) + Δ U T R c Δ U = N T Q c N + 2 Δ U T Θ T Q c N + Δ U T Θ t Q c Θ Δ U + Δ U T R c Δ U = N T Q c N + 2 Δ U T Θ T Q c N + Δ U T ( Θ t Q c Θ + R c ) Δ U \begin{aligned}J &= (N+\Theta\Delta U)^TQ_c(N+\Theta\Delta U)+\Delta U^TR_c \Delta U\\ &= N^TQ_cN + 2\Delta U^T\Theta^TQ_cN + \Delta U^T \Theta^tQ_c\Theta\Delta U + \Delta U^TR_c\Delta U\\ &= N^TQ_cN + 2\Delta U^T\Theta^TQ_cN + \Delta U^T(\Theta^tQ_c\Theta+R_c)\Delta U \end{aligned} J=(N+ΘΔU)TQc(N+ΘΔU)+ΔUTRcΔU=NTQcN+2ΔUTΘTQcN+ΔUTΘtQcΘΔU+ΔUTRcΔU=NTQcN+2ΔUTΘTQcN+ΔUT(ΘtQcΘ+Rc)ΔU
针对该优化问题,我们可以进一步简化代价函数 J J J,即消去代价函数中不含优化对象参数 Δ U \Delta U ΔU的项
a r g m i n Δ U ( J ) = a r g m i n Δ U ( N T Q c N + 2 Δ U T Θ T Q c N + Δ U T ( Θ t Q c Θ + R c ) Δ U ) = a r g m i n Δ U ( 2 Δ U T Θ T Q c N + Δ U T ( Θ t Q c Θ + R c ) Δ U ) = a r g m i n Δ U ( J ∗ ) \begin{aligned} \mathop{argmin}\limits_{\Delta U}(J) &=\mathop{argmin}\limits_{\Delta U}(N^TQ_cN+2\Delta U^T\Theta^TQ_cN + \Delta U^T(\Theta^tQ_c\Theta+R_c)\Delta U)\\ &=\mathop{argmin}\limits_{\Delta U}(2\Delta U^T\Theta^TQ_cN + \Delta U^T(\Theta^tQ_c\Theta+R_c)\Delta U)\\ &=\mathop{argmin}\limits_{\Delta U}(J^*) \end{aligned} ΔUargmin(J)=ΔUargmin(NTQcN+2ΔUTΘTQcN+ΔUT(ΘtQcΘ+Rc)ΔU)=ΔUargmin(2ΔUTΘTQcN+ΔUT(ΘtQcΘ+Rc)ΔU)=ΔUargmin(J∗)
其中, J ∗ J^* J∗ 为简化后的代价函数
定义
H = Θ t Q c Θ + R c K = 2 Θ T Q c N \begin{aligned} &H = \Theta^tQ_c\Theta+R_c \\ &K = 2\Theta^TQ_cN \end{aligned} H=ΘtQcΘ+RcK=2ΘTQcN
则QP问题为
m i n Δ U ( J ∗ ) = m i n Δ U ( Δ U T H Δ U + Δ U T K ) \mathop{min}\limits_{\Delta U}(J^*) =\mathop{min}\limits_{\Delta U}(\Delta U^TH\Delta U+ \Delta U^TK) ΔUmin(J∗)=ΔUmin(ΔUTHΔU+ΔUTK)
在增量式模型中,我们优化的对象参数是控制量量增量 Δ U \Delta U ΔU,因此对控制量增量直接约束为
Δ U m i n ⪯ Δ U ⪯ Δ U m a x \Delta U^{min} \preceq \Delta U \preceq \Delta U^{max} ΔUmin⪯ΔU⪯ΔUmax
其中
Δ U m i n = [ Δ δ ( 0 ) m i n Δ δ ( 1 ) m i n … Δ δ ( k − 1 ) m i n ] T Δ U m a x = [ Δ δ ( 0 ) m a x Δ δ ( 1 ) m a x … Δ δ ( k − 1 ) m a x ] T \begin{aligned} &\Delta U^{min} = \begin{bmatrix} \Delta\delta(0)^{min} & \Delta\delta(1)^{min} & \dots & \Delta\delta(k-1)^{min} \end{bmatrix} ^T \\ &\Delta U^{max} = \begin{bmatrix} \Delta\delta(0)^{max} & \Delta\delta(1)^{max} & \dots & \Delta\delta(k-1)^{max} \end{bmatrix} ^T \end{aligned} ΔUmin=[Δδ(0)minΔδ(1)min…Δδ(k−1)min]TΔUmax=[Δδ(0)maxΔδ(1)max…Δδ(k−1)max]T
以上约束条件可改写成
[ − 1 0 … 0 0 0 − 1 … 0 0 ⋮ ⋮ ⋱ ⋮ ⋮ 0 0 … − 1 0 0 0 … 0 − 1 1 0 … 0 0 0 1 … 0 0 ⋮ ⋮ ⋱ ⋮ ⋮ 0 0 … 1 0 0 0 … 0 1 ] [ Δ δ ( 0 ) Δ δ ( 1 ) ⋮ Δ δ ( k − 2 ) Δ δ ( k − 1 ) ] ⪯ [ − Δ δ ( 0 ) m i n − Δ δ ( 1 ) m i n ⋮ − Δ δ ( k − 2 ) m i n − Δ δ ( k − 1 ) m i n Δ δ ( 0 ) m a x Δ δ ( 1 ) m a x ⋮ Δ δ ( k − 2 ) m a x Δ δ ( k − 1 ) m a x ] \left[\begin{array}{rrrrr} -1 & 0 & \dots & 0 & 0\\ 0 & -1 & \dots & 0 & 0\\ \vdots & \vdots & \ddots & \vdots & \vdots\\ 0 & 0 & \dots & -1 & 0\\ 0 & 0 & \dots & 0 & -1\\ 1 & 0 & \dots & 0 & 0\\ 0 & 1 & \dots & 0 & 0\\ \vdots & \vdots & \ddots & \vdots & \vdots\\ 0 & 0 & \dots & 1 & 0\\ 0 & 0 & \dots & 0 & 1 \end{array}\right] \begin{bmatrix} \Delta\delta(0)\\ \Delta\delta(1)\\ \vdots \\ \Delta\delta(k-2)\\ \Delta\delta(k-1) \end{bmatrix} \preceq \begin{bmatrix} -\Delta\delta(0)^{min}\\ -\Delta\delta(1)^{min}\\ \vdots\\ -\Delta\delta(k-2)^{min}\\ -\Delta\delta(k-1)^{min}\\ \Delta\delta(0)^{max}\\ \Delta\delta(1)^{max}\\ \vdots\\ \Delta\delta(k-2)^{max}\\ \Delta\delta(k-1)^{max}\\ \end{bmatrix} ⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡−10⋮0010⋮000−1⋮0001⋮00……⋱…………⋱……00⋮−1000⋮1000⋮0−100⋮01⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎡Δδ(0)Δδ(1)⋮Δδ(k−2)Δδ(k−1)⎦⎥⎥⎥⎥⎥⎤⪯⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡−Δδ(0)min−Δδ(1)min⋮−Δδ(k−2)min−Δδ(k−1)minΔδ(0)maxΔδ(1)max⋮Δδ(k−2)maxΔδ(k−1)max⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
定义
S d u l = [ − 1 0 … 0 0 0 − 1 … 0 0 ⋮ ⋮ ⋱ ⋮ ⋮ 0 0 … − 1 0 0 0 … 0 − 1 1 0 … 0 0 0 1 … 0 0 ⋮ ⋮ ⋱ ⋮ ⋮ 0 0 … 1 0 0 0 … 0 1 ] = [ − I I ] S d u r = [ − Δ δ ( 0 ) m i n − Δ δ ( 1 ) m i n ⋮ − Δ δ ( k − 2 ) m i n − Δ δ ( k − 1 ) m i n Δ δ ( 0 ) m a x Δ δ ( 1 ) m a x ⋮ Δ δ ( k − 2 ) m a x Δ δ ( k − 1 ) m a x ] = [ − Δ U m i n Δ U m a x ] \begin{aligned} &S^{l}_{du} = \left[\begin{array}{rrrrr} -1 & 0 & \dots & 0 & 0\\ 0 & -1 & \dots & 0 & 0\\ \vdots & \vdots & \ddots & \vdots & \vdots\\ 0 & 0 & \dots & -1 & 0\\ 0 & 0 & \dots & 0 & -1\\ 1 & 0 & \dots & 0 & 0\\ 0 & 1 & \dots & 0 & 0\\ \vdots & \vdots & \ddots & \vdots & \vdots\\ 0 & 0 & \dots & 1 & 0\\ 0 & 0 & \dots & 0 & 1 \end{array}\right] = \begin{bmatrix} -I \\ \quad I \end{bmatrix}\\ &S^{r}_{du} = \begin{bmatrix} -\Delta\delta(0)^{min}\\ -\Delta\delta(1)^{min}\\ \vdots\\ -\Delta\delta(k-2)^{min}\\ -\Delta\delta(k-1)^{min}\\ \Delta\delta(0)^{max}\\ \Delta\delta(1)^{max}\\ \vdots\\ \Delta\delta(k-2)^{max}\\ \Delta\delta(k-1)^{max}\\ \end{bmatrix} = \begin{bmatrix} -\Delta U^{min} \\ \quad\Delta U^{max} \end{bmatrix} \end{aligned} Sdul=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡−10⋮0010⋮000−1⋮0001⋮00……⋱…………⋱……00⋮−1000⋮1000⋮0−100⋮01⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=[−II]Sdur=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡−Δδ(0)min−Δδ(1)min⋮−Δδ(k−2)min−Δδ(k−1)minΔδ(0)maxΔδ(1)max⋮Δδ(k−2)maxΔδ(k−1)max⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=[−ΔUminΔUmax]
则控制增量的约束可表示为
S d u l Δ U ⪯ S d u r S^{l}_{du} \Delta U \preceq S^{r}_{du} SdulΔU⪯Sdur
首先我们要将控制量矩阵 U U U 以控制增量 Δ U \Delta U ΔU 的形式表达
U = [ δ ( 0 ) δ ( 1 ) ⋮ δ ( k − 2 ) δ ( k − 1 ) ] = [ 1 1 ⋮ 1 1 ] δ ( − 1 ) + [ 1 0 0 … 0 0 1 1 0 … 0 0 1 1 1 … 0 0 ⋮ ⋮ ⋮ ⋱ ⋮ ⋮ 1 1 1 … 1 0 1 1 1 … 1 1 ] [ Δ δ ( 0 ) Δ δ ( 1 ) ⋮ Δ δ ( k − 2 ) Δ δ ( k − 1 ) ] U = \begin{bmatrix} \delta(0)\\ \delta(1)\\ \vdots \\ \delta(k-2)\\ \delta(k-1) \end{bmatrix} = \begin{bmatrix} 1 \\ 1 \\ \vdots \\ 1 \\ 1 \end{bmatrix} \delta(-1)+ \begin{bmatrix} 1 & 0 & 0 & \dots & 0 & 0\\ 1 & 1 & 0 & \dots & 0 & 0\\ 1 & 1 & 1 & \dots & 0 & 0\\ \vdots & \vdots & \vdots & \ddots &\vdots & \vdots\\ 1 & 1 & 1 & \dots & 1 & 0\\ 1 & 1 & 1 & \dots & 1 & 1 \end{bmatrix} \begin{bmatrix} \Delta\delta(0)\\ \Delta\delta(1)\\ \vdots \\ \Delta\delta(k-2)\\ \Delta\delta(k-1) \end{bmatrix} U=⎣⎢⎢⎢⎢⎢⎡δ(0)δ(1)⋮δ(k−2)δ(k−1)⎦⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎡11⋮11⎦⎥⎥⎥⎥⎥⎤δ(−1)+⎣⎢⎢⎢⎢⎢⎢⎢⎡111⋮11011⋮11001⋮11………⋱……000⋮11000⋮01⎦⎥⎥⎥⎥⎥⎥⎥⎤⎣⎢⎢⎢⎢⎢⎡Δδ(0)Δδ(1)⋮Δδ(k−2)Δδ(k−1)⎦⎥⎥⎥⎥⎥⎤
其中 δ ( − 1 ) \delta(-1) δ(−1) 代表 t − 1 t-1 t−1 时刻的控制量,即上一周期的控制量
定义
E = [ 1 1 ⋮ 1 1 ] F = [ 1 0 0 … 0 0 1 1 0 … 0 0 1 1 1 … 0 0 ⋮ ⋮ ⋮ ⋱ ⋮ ⋮ 1 1 1 … 1 0 1 1 1 … 1 1 ] E = \begin{bmatrix} 1 \\ 1 \\ \vdots \\ 1 \\ 1 \end{bmatrix} \quad F = \begin{bmatrix} 1 & 0 & 0 & \dots & 0 & 0\\ 1 & 1 & 0 & \dots & 0 & 0\\ 1 & 1 & 1 & \dots & 0 & 0\\ \vdots & \vdots & \vdots & \ddots &\vdots & \vdots\\ 1 & 1 & 1 & \dots & 1 & 0\\ 1 & 1 & 1 & \dots & 1 & 1 \end{bmatrix} E=⎣⎢⎢⎢⎢⎢⎡11⋮11⎦⎥⎥⎥⎥⎥⎤F=⎣⎢⎢⎢⎢⎢⎢⎢⎡111⋮11011⋮11001⋮11………⋱……000⋮11000⋮01