相关文章:
【预测控制1】模型预测控制概论
【预测控制2】预测控制基本原理
【预测控制3】动态矩阵控制(DMC)及Matlab仿真
一、基于状态空间模型的预测控制
1、预测模型
首先考虑SISO线性系统
x
(
k
+
1
)
=
A
x
(
k
)
+
b
u
(
k
)
y
(
k
)
=
c
T
x
(
k
)
(1-1)
\pmb x(k+1)=\pmb{Ax}(k)+\pmb bu(k)\\y(k)=\pmb{c^Tx}(k) \tag{1-1}
x(k+1)=Ax(k)+bu(k)y(k)=cTx(k)(1-1)
状态变量
x
(
k
)
∈
R
n
\pmb{x}(k)\in R^n
x(k)∈Rn实时可测,
y
(
k
)
、
u
(
k
)
y(k)、u(k)
y(k)、u(k)分别为系统的输入输出。
设从
k
k
k时刻起系统输入发生
M
M
M步变化,而后保持不变,则由模型(1-1),可以预测输出在
u
(
k
)
,
u
(
k
+
1
)
,
.
.
.
,
u
(
k
+
M
−
1
)
u(k),u(k+1),...,u(k+M-1)
u(k),u(k+1),...,u(k+M−1)作用下未来P个时刻的系统状态
x
(
k
+
1
∣
k
)
=
A
x
(
k
∣
k
)
+
b
u
(
k
)
x
(
k
+
2
∣
k
)
=
A
x
(
k
+
1
∣
k
)
+
b
u
(
k
)
=
A
2
x
(
k
∣
k
)
+
A
b
u
(
k
)
+
b
u
(
k
+
1
)
⋮
x
(
k
+
M
∣
k
)
=
A
M
x
(
k
∣
k
)
+
A
M
−
1
b
u
(
k
)
+
A
M
−
2
b
u
(
k
+
1
)
+
⋯
+
b
u
(
k
+
M
−
1
)
x
(
k
+
M
+
1
∣
k
)
=
A
M
+
1
x
(
k
∣
k
)
+
A
M
b
u
(
k
)
+
A
M
−
1
b
u
(
k
+
1
)
+
⋯
+
(
A
b
+
b
)
u
(
k
+
M
−
1
)
⋮
x
(
k
+
P
∣
k
)
=
A
P
x
(
k
∣
k
)
+
A
P
−
1
b
u
(
k
)
+
A
P
−
2
b
u
(
k
+
1
)
+
⋯
+
(
A
P
−
M
b
+
A
P
−
M
−
1
b
+
⋯
+
b
)
u
(
k
+
M
−
1
)
\begin{aligned}\pmb x(k+1|k)&=\pmb{Ax}(k|k)+\pmb bu(k)\\ \pmb x(k+2|k)&=\pmb{Ax}(k+1|k)+\pmb bu(k)=\pmb{A^2x}(k|k)+\pmb{Ab}u(k)+\pmb bu(k+1)\\ \vdots \\\pmb x(k+M|k)&=\pmb{A}^M\pmb{x}(k|k)+\pmb A^{M-1}\pmb bu(k)+\pmb A^{M-2}\pmb bu(k+1)+\dots+\pmb bu(k+M-1) \\\pmb x(k+M+1|k)&=\pmb{A}^{M+1}\pmb{x}(k|k)+\pmb A^{M}\pmb bu(k)+\pmb A^{M-1}\pmb bu(k+1)+\dots+(\pmb{Ab}+\pmb b)u(k+M-1) \\\vdots \\\pmb x(k+P|k)&=\pmb{A}^P\pmb{x}(k|k)+\pmb A^{P-1}\pmb bu(k)+\pmb A^{P-2}\pmb bu(k+1)+\\&\dots+(\pmb A^{P-M}\pmb b+\pmb A^{P-M-1}\pmb b+\dots+\pmb b)u(k+M-1) \end{aligned}
x(k+1∣k)x(k+2∣k)⋮x(k+M∣k)x(k+M+1∣k)⋮x(k+P∣k)=Ax(k∣k)+bu(k)=Ax(k+1∣k)+bu(k)=A2x(k∣k)+Abu(k)+bu(k+1)=AMx(k∣k)+AM−1bu(k)+AM−2bu(k+1)+⋯+bu(k+M−1)=AM+1x(k∣k)+AMbu(k)+AM−1bu(k+1)+⋯+(Ab+b)u(k+M−1)=APx(k∣k)+AP−1bu(k)+AP−2bu(k+1)+⋯+(AP−Mb+AP−M−1b+⋯+b)u(k+M−1)
将上面的式子整合为向量形式,有
X
(
k
)
=
F
x
x
(
k
∣
k
)
+
G
x
U
(
k
)
(1-2)
\pmb X(k)=\pmb{F_xx}(k|k)+\pmb{G_xU}(k)\tag{1-2}
X(k)=Fxx(k∣k)+GxU(k)(1-2)其中
F
x
=
[
A
A
2
⋮
A
P
]
n
P
×
1
,
G
x
=
[
b
0
…
0
0
A
b
b
…
0
0
⋮
⋮
⋱
⋮
⋮
A
P
−
1
b
A
P
−
2
b
…
A
P
−
M
+
1
b
∑
i
=
0
P
−
M
A
i
b
]
n
P
×
M
X
(
k
)
=
[
x
(
k
+
1
∣
k
)
x
(
k
+
2
∣
k
)
⋮
x
(
k
+
P
∣
k
)
]
n
P
×
1
,
U
(
k
)
=
[
u
(
k
)
u
(
k
+
1
)
⋮
u
(
k
+
M
−
1
)
]
M
×
1
\pmb{F_x}=\begin{bmatrix}\pmb A \\\pmb A^2 \\\vdots \\\pmb A^{P} \end{bmatrix}_{nP\times 1}, \pmb{Gx}=\begin{bmatrix}\pmb b&0&\dots&0&0 \\\pmb{Ab}&\pmb b&\dots&0&0 \\\vdots&\vdots&\ddots &\vdots&\vdots \\\pmb{A}^{P-1}\pmb b&\pmb{A}^{P-2}\pmb b&\dots&\pmb{A}^{P-M+1}\pmb b&\sum_{i=0}^{P-M}\pmb A^i\pmb b \end{bmatrix}_{nP\times M} \\\pmb X(k)=\begin{bmatrix}\pmb x(k+1|k)\\\pmb x(k+2|k)\\\vdots\\\pmb x(k+P|k)\end{bmatrix}_{nP\times1}, \pmb U(k)=\begin{bmatrix}\pmb u(k)\\\pmb u(k+1)\\\vdots\\\pmb u(k+M-1)\end{bmatrix}_{M\times1}
Fx=
AA2⋮AP
nP×1,Gx=
bAb⋮AP−1b0b⋮AP−2b……⋱…00⋮AP−M+1b00⋮∑i=0P−MAib
nP×MX(k)=
x(k+1∣k)x(k+2∣k)⋮x(k+P∣k)
nP×1,U(k)=
u(k)u(k+1)⋮u(k+M−1)
M×1
类似的,根据输出方程
y
(
k
)
=
c
T
x
(
k
)
y(k)=\pmb{c^Tx}(k)
y(k)=cTx(k)可以得到
Y
(
k
)
=
F
y
x
(
k
∣
k
)
+
G
y
U
(
k
)
(1-3)
\pmb Y(k)=\pmb{F_yx}(k|k)+\pmb{G_yU}(k)\tag{1-3}
Y(k)=Fyx(k∣k)+GyU(k)(1-3)其中
F
y
=
[
c
T
A
c
T
A
2
⋮
c
T
A
P
]
P
×
n
,
G
y
=
[
c
T
b
0
…
0
0
c
T
A
b
c
T
b
…
0
0
⋮
⋮
⋱
⋮
⋮
c
T
A
P
−
1
b
c
T
A
P
−
2
b
…
c
T
A
P
−
M
+
1
b
∑
i
=
0
P
−
M
c
T
A
i
b
]
P
×
M
Y
(
k
)
=
[
y
(
k
+
1
∣
k
)
y
(
k
+
2
∣
k
)
⋮
y
(
k
+
P
∣
k
)
]
P
×
1
\pmb{F_y}=\begin{bmatrix}\pmb{c^TA} \\\pmb{c^TA^2} \\\vdots \\\pmb{c^TA^{P}} \end{bmatrix}_{P\times n}, \pmb{Gy}=\begin{bmatrix}\pmb{c^Tb}&0&\dots&0&0 \\\pmb{c^TAb}&\pmb{c^Tb}&\dots&0&0 \\\vdots&\vdots&\ddots &\vdots&\vdots \\\pmb{c^TA}^{P-1}\pmb b&\pmb{c^TA}^{P-2}\pmb b&\dots&\pmb{c^TA}^{P-M+1}\pmb b&\sum_{i=0}^{P-M}\pmb{c^TA}^i\pmb b \end{bmatrix}_{P\times M} \\\pmb Y(k)=\begin{bmatrix}\pmb y(k+1|k)\\\pmb y(k+2|k)\\\vdots\\\pmb y(k+P|k)\end{bmatrix}_{P\times1}
Fy=
cTAcTA2⋮cTAP
P×n,Gy=
cTbcTAb⋮cTAP−1b0cTb⋮cTAP−2b……⋱…00⋮cTAP−M+1b00⋮∑i=0P−McTAib
P×MY(k)=
y(k+1∣k)y(k+2∣k)⋮y(k+P∣k)
P×1 在此总结一下,式(1-2)是状态预测模型,根据状态预测模型,我们可以通过当前时刻的状态变量
x
(
k
∣
k
)
\pmb x(k|k)
x(k∣k)和未来时刻控制量
u
(
k
)
,
u
(
k
+
1
)
,
.
.
.
,
u
(
k
+
M
−
1
)
u(k),u(k+1),...,u(k+M-1)
u(k),u(k+1),...,u(k+M−1)来预测未来P个时刻的状态。式(1-3)是输出预测模型,根据输出预测模型,我们可以通过当前时刻的状态变量
x
(
k
∣
k
)
\pmb x(k|k)
x(k∣k)和未来时刻控制量
u
(
k
)
,
u
(
k
+
1
)
,
.
.
.
,
u
(
k
+
M
−
1
)
u(k),u(k+1),...,u(k+M-1)
u(k),u(k+1),...,u(k+M−1)来预测未来P个时刻的输出。
2、滚动优化
根据预测模型中,当前状态变量
x
(
k
∣
k
)
\pmb x(k|k)
x(k∣k)是可以测得的,而未来M个时刻的控制量
u
(
k
)
,
u
(
k
+
1
)
,
.
.
.
,
u
(
k
+
M
−
1
)
u(k),u(k+1),...,u(k+M-1)
u(k),u(k+1),...,u(k+M−1)还是未知的,接下来我们通过优化性能指标来求出从当前时刻起的M个控制量
u
(
k
)
,
u
(
k
+
1
)
,
.
.
.
,
u
(
k
+
M
−
1
)
u(k),u(k+1),...,u(k+M-1)
u(k),u(k+1),...,u(k+M−1)。
性能指标有很多种形式,在这里我们不考虑约束,举例两种简单的性能指标表达形式。
2.1 状态优化问题
在k时刻的状态优化问题可表述为:确定从该时刻起的M个控制量
u
(
k
)
,
u
(
k
+
1
)
,
.
.
.
,
u
(
k
+
M
−
1
)
u(k),u(k+1),...,u(k+M-1)
u(k),u(k+1),...,u(k+M−1),使被控对象在其作用下未来P个时刻的状态得到镇定,及趋近
x
=
0
\pmb x=\pmb 0
x=0,同时一种控制作用的剧烈变化,优化性能指标可以表达为
m
i
n
J
(
k
)
=
∥
X
(
k
)
∥
Q
2
+
∥
U
(
k
)
∥
R
2
(2-1)
min\pmb J(k)=\begin{Vmatrix} \pmb X(k)\end{Vmatrix}^2_{\pmb Q}+\begin{Vmatrix}\pmb U(k)\end{Vmatrix}^2_{\pmb R}\tag{2-1}
minJ(k)=
X(k)
Q2+
U(k)
R2(2-1)
其中,
Q
,
R
Q,R
Q,R为状态加权矩阵和控制加权矩阵。接下来把状态预测模型(1-2)带入上式替换掉
X
(
k
)
\pmb X(k)
X(k),然后令
∂
J
∂
U
=
0
\frac{\partial J }{\partial U}=0
∂U∂J=0,如下
∂
J
(
k
)
∂
U
(
k
)
=
2
G
x
T
Q
[
F
x
x
(
k
∣
k
)
+
G
x
U
(
k
)
]
+
2
R
U
(
k
)
=
2
G
x
T
Q
F
x
x
(
k
∣
k
)
+
2
(
G
x
T
Q
G
x
+
R
)
U
(
k
)
=
0
\begin{aligned}\frac{\partial J(k) }{\partial U(k)}&=2\pmb{G_x^TQ}[\pmb{F_xx}(k|k)+\pmb{G_xU}(k)]+2\pmb{RU}(k) \\&=2\pmb{G_x^TQ}\pmb{F_xx}(k|k)+2(\pmb{G_x^TQ}\pmb{G_x}+\pmb{R})\pmb{U}(k)=0 \end{aligned}
∂U(k)∂J(k)=2GxTQ[Fxx(k∣k)+GxU(k)]+2RU(k)=2GxTQFxx(k∣k)+2(GxTQGx+R)U(k)=0可以解得
U
(
k
)
=
−
(
G
x
T
Q
G
x
+
R
)
−
1
G
x
T
Q
F
x
x
(
k
∣
k
)
\pmb U(k)=-(\pmb{G_x^TQ}\pmb{G_x}+\pmb{R})^{-1}\pmb{G_x^TQ}\pmb{F_xx}(k|k)
U(k)=−(GxTQGx+R)−1GxTQFxx(k∣k)最后我们只取
U
(
k
)
\pmb U(k)
U(k)的首项
u
(
k
)
u(k)
u(k)将其实施到系统上,即
u
(
k
)
=
[
1
0
…
0
]
U
(
k
)
=
−
k
T
x
(
k
∣
k
)
,
(2-2)
u(k)=\begin{bmatrix}1&0&\dots&0\end{bmatrix}U(k)=-\pmb{k^Tx}(k|k),\tag{2-2}
u(k)=[10…0]U(k)=−kTx(k∣k),(2-2)其中反馈增益
k
T
=
[
1
0
…
0
]
(
G
x
T
Q
G
x
+
R
)
−
1
G
x
T
Q
F
x
\pmb k^T=\begin{bmatrix}1&0&\dots&0\end{bmatrix}(\pmb{G_x^TQ}\pmb{G_x}+\pmb{R})^{-1}\pmb{G_x^TQ}\pmb{F_x}
kT=[10…0](GxTQGx+R)−1GxTQFx
2.2 输出优化问题
现在考虑的输出优化问题,即要确定从 k 时刻起的M个控制量 u ( k ) , u ( k + 1 ) , . . . , u ( k + M − 1 ) u(k),u(k+1),...,u(k+M-1) u(k),u(k+1),...,u(k+M−1),使被控对象在其作用下未来P个时刻的输出预测值 y ( k + i ) y(k + i) y(k+i)尽可能解近给定的期望值 w ( k + i ) , i = 1 , … , P w(k+ i), i =1,…, P w(k+i),i=1,…,P,同时抑制控制作用的剧烈变化,则可类似地写出性能指标的向量形式 m i n J ( k ) = ∥ W ( k ) − Y ( k ) ∥ Q 2 + ∥ U ( k ) ∥ R 2 (2-3) min\pmb J(k)=\begin{Vmatrix} \pmb W(k)-\pmb Y(k)\end{Vmatrix}^2_{\pmb Q}+\begin{Vmatrix}\pmb U(k)\end{Vmatrix}^2_{\pmb R}\tag{2-3} minJ(k)= W(k)−Y(k) Q2+ U(k) R2(2-3)其中, Q , R Q,R Q,R为输出加权矩阵和控制加权矩阵。接下来把输出预测模型(1-3)带入性能指标中替换 Y ( k ) \pmb Y(k) Y(k),然后令 ∂ J ∂ U = 0 \frac{\partial J }{\partial U}=0 ∂U∂J=0,可得 u ( k ) = d T [ W ( k ) − F y x ( k ∣ k ) ] , (2-4) u(k)=\pmb{d^T}[\pmb W(k)-\pmb{F_yx}(k|k)],\tag{2-4} u(k)=dT[W(k)−Fyx(k∣k)],(2-4)其中 d T = [ 1 0 … 0 ] ( G y T Q G y + R ) − 1 G y T Q \pmb{d^T}=\begin{bmatrix}1&0&\dots&0\end{bmatrix}(\pmb{G_y^TQ}\pmb{G_y}+\pmb{R})^{-1}\pmb{G_y^TQ} dT=[10…0](GyTQGy+R)−1GyTQ
3、反馈校正
由于 x ( k ) \pmb x(k) x(k)可测,在每一时刻实测到的 x ( k ) \pmb x(k) x(k)可直接用来对该时刻的预测和优化作初始定位,这意味着预测和优化都基于系统的实时反馈信息,从而自然实现了反馈校正,不必再引人额外的校正措施。
二、Matlab仿真示例
例: 有SISO线性时不变系统
x
(
k
+
1
)
=
A
x
(
k
)
+
B
u
(
k
)
y
(
k
)
=
C
x
(
k
)
\pmb x(k+1)=\pmb{Ax}(k)+\pmb Bu(k)\\y(k)=\pmb{Cx}(k)
x(k+1)=Ax(k)+Bu(k)y(k)=Cx(k)其中
A
=
[
1
0.1
0
2
]
,
B
=
[
0
0.5
]
C
=
[
2
1
]
\pmb A=\begin{bmatrix}1&0.1\\0&2\end{bmatrix},\pmb B=\begin{bmatrix}0\\0.5\end{bmatrix}\\\pmb C=\begin{bmatrix}2&1\end{bmatrix}
A=[100.12],B=[00.5]C=[21]设计控制器使系统输出趋近
y
(
k
)
=
3
y(k)=3
y(k)=3。
注: 该问题是输出优化问题,因此我们通过式(2-4)来计算及时控制量。
参考代码:
close all;
clear all;
k_steps=200;
M=3;P=3;Ts=0.2;
A=[1 0.1;0 2];
B=[0;0.5];
C=[2 1];
x_num=length(A);%状态变量维度
Q=eye(P);%输出权矩阵
R=1;%控制权矩阵
Wk=[3;3;3];%期望值
xk=[0;0];%初始状态
Fy=zeros(P,x_num);
Gy=zeros(P,M);
for i=1:P
Fy(i,1:end)=C*A^i;%计算矩阵Fy
Gy(i,:)=[C*A^(i-1)*B,Gy(max(i-1,1),1:M-1)];%计算矩阵Gy
end
dy=[1 0 0]*(Gy'*Q*Gy+R)^(-1)*Gy'*Q;%计算反馈增益dy,式(2-4)
u_history=zeros(1,k_steps);
y_history=zeros(1,k_steps);
times=zeros(1,k_steps);
%滚动优化
for k=1:k_steps
times(k)=k*Ts;
u_history(k)=dy*(Wk-Fy*xk);%计算及时控制量
y_history(k)=C*xk;%得到真实输出
xk=A*xk+B*u_history(k);
end
figure(1);
plot(times,y_history);
title("输出曲线");
xlabel("t/s")
figure(2);
stairs(times,u_history);
title("控制量变化曲线");
xlabel("t/s");
运行结果: