【预测控制4】基于状态空间模型的预测控制


相关文章:
【预测控制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+M1)作用下未来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+Mk)x(k+M+1∣k)x(k+Pk)=Ax(kk)+bu(k)=Ax(k+1∣k)+bu(k)=A2x(kk)+Abu(k)+bu(k+1)=AMx(kk)+AM1bu(k)+AM2bu(k+1)++bu(k+M1)=AM+1x(kk)+AMbu(k)+AM1bu(k+1)++(Ab+b)u(k+M1)=APx(kk)+AP1bu(k)+AP2bu(k+1)++(APMb+APM1b++b)u(k+M1)
将上面的式子整合为向量形式,有 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(kk)+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= AA2AP nP×1,Gx= bAbAP1b0bAP2b00APM+1b00i=0PMAib nP×MX(k)= x(k+1∣k)x(k+2∣k)x(k+Pk) nP×1,U(k)= u(k)u(k+1)u(k+M1) 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(kk)+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= cTAcTA2cTAP P×n,Gy= cTbcTAbcTAP1b0cTbcTAP2b00cTAPM+1b00i=0PMcTAib P×MY(k)= y(k+1∣k)y(k+2∣k)y(k+Pk) P×1   在此总结一下,式(1-2)是状态预测模型,根据状态预测模型,我们可以通过当前时刻的状态变量 x ( k ∣ k ) \pmb x(k|k) x(kk)和未来时刻控制量 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+M1)来预测未来P个时刻的状态。式(1-3)是输出预测模型,根据输出预测模型,我们可以通过当前时刻的状态变量 x ( k ∣ k ) \pmb x(k|k) x(kk)和未来时刻控制量 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+M1)来预测未来P个时刻的输出

2、滚动优化

  根据预测模型中,当前状态变量 x ( k ∣ k ) \pmb x(k|k) x(kk)是可以测得的,而未来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+M1)还是未知的,接下来我们通过优化性能指标来求出从当前时刻起的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+M1)
性能指标有很多种形式,在这里我们不考虑约束,举例两种简单的性能指标表达形式。

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+M1),使被控对象在其作用下未来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 UJ=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(kk)+GxU(k)]+2RU(k)=2GxTQFxx(kk)+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(kk)最后我们只取 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)=[100]U(k)=kTx(kk),(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=[100](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+M1),使被控对象在其作用下未来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 UJ=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(kk)],(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=[100](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");

运行结果:
请添加图片描述

请添加图片描述

  • 18
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

麦斯威尔逊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值