【预测控制3】动态矩阵控制(DMC)及Matlab仿真

文章目录

  • 前言
  • 一、基于阶跃响应的动态矩阵控制
    • 1.预测模型
    • 2.滚动优化
    • 3.反馈校正
  • 二、Matlab仿真示例
    • 1.算法结构
    • 2.计算流程
    • 3.仿真示例
  • 总结

相关文章:
【预测控制1】模型预测控制概论
【预测控制2】预测控制基本原理
【预测控制4】基于状态空间模型的预测控制

前言

动态矩阵控制(Dynamic Matrix Control,DMC)起源于20世纪70年代,是一种基于数学模型的先进控制算法,在化工、电力、冶金、制药等领域得到了广泛的应用。传统控制算法主要是基于PID控制器,但对于复杂的动态过程,PID控制器并不能提供良好的控制效果。相比之下,DMC控制算法的控制性能更好,可以适应更为复杂的过程控制。

特别说明本文中介绍的是SISO系统且无约束条件的DMC算法

一、基于阶跃响应的动态矩阵控制

DMC是一种基于阶跃响应的预测控制算法,因而适用于渐进稳定的线性系统。对于弱非线性对象,可以先对其线性化,再采用DMC,而对于不稳定对象,可以先用PID控制使其稳定,然后再使用DMC算法。
 简单的说,DMC就是通过阶跃响应模型预测系统未来输出,然后求解优化问题得到控制增量,将控制增量的第一个元素作用于系统。
DMC算法包括预测模型滚动优化反馈校正三个部分组成,接下来分别介绍三个部分。

1.预测模型

预测模型,就是通过系统的阶跃响应模型和线性系统的叠加性原理来预测对象在未来时刻的输出值。
在DMC算法中,是通过系统的单位阶跃响应模型来预测对象的未来输出。 首先需要得到预测对象的单位阶跃响应的采样值【预测控制3】动态矩阵控制(DMC)及Matlab仿真,其中【预测控制3】动态矩阵控制(DMC)及Matlab仿真为采样时间。对于渐进稳定的系统,阶跃响应会在某一时刻【预测控制3】动态矩阵控制(DMC)及Matlab仿真趋于稳定平稳,在【预测控制3】动态矩阵控制(DMC)及Matlab仿真时刻后的采样值【预测控制3】动态矩阵控制(DMC)及Matlab仿真都趋于稳态值,所以可以认为【预测控制3】动态矩阵控制(DMC)及Matlab仿真。这样,对象的动态信息就可以近似地用有限集合【预测控制3】动态矩阵控制(DMC)及Matlab仿真加以描述,这个集合的参数构成了DMC的模型参数,向量【预测控制3】动态矩阵控制(DMC)及Matlab仿真称为模型向量,也是系统的阶跃响应模型【预测控制3】动态矩阵控制(DMC)及Matlab仿真则称为建模时域
举个例子,假如100斤的小明想要把体重增长到120斤,他想制定一个计划,那么他肯定需要结合他之前每天吃多少饭涨了多少斤来计划以后吃多少。假如小明之前连续15天吃3碗饭,每一天都记录他的体重。在第10天的时候,小明的体重首次到达了105斤,第15天,小明的体重依然是105斤,我们可以认为小明吃3碗饭的稳态就是105斤,但这远远不符合他希望达到的120斤,小明就可以根据前10天体重变化为依据,来预测他今后吃多少饭在几天过后能达到120斤。而这前10天的体重就相当于模型向量【预测控制3】动态矩阵控制(DMC)及Matlab仿真,10天为建模时域【预测控制3】动态矩阵控制(DMC)及Matlab仿真

阶跃响应模型

 下面我们就可以根据系统的模型向量【预测控制3】动态矩阵控制(DMC)及Matlab仿真和线性系统的比例和叠加性质来预测对象在未来时刻的输出值。
 首先,在k时刻,假定控制作用保持不变时对未来【预测控制3】动态矩阵控制(DMC)及Matlab仿真个时刻的输出具有初始预测值【预测控制3】动态矩阵控制(DMC)及Matlab仿真,其中【预测控制3】动态矩阵控制(DMC)及Matlab仿真表示在k时刻对【预测控制3】动态矩阵控制(DMC)及Matlab仿真时刻的预测。
 当【预测控制3】动态矩阵控制(DMC)及Matlab仿真时刻输入【预测控制3】动态矩阵控制(DMC)及Matlab仿真的增量为【预测控制3】动态矩阵控制(DMC)及Matlab仿真,在其作用下未来时刻输出预测值为【预测控制3】动态矩阵控制(DMC)及Matlab仿真【预测控制3】动态矩阵控制(DMC)及Matlab仿真时刻输入【预测控制3】动态矩阵控制(DMC)及Matlab仿真再变为【预测控制3】动态矩阵控制(DMC)及Matlab仿真,则未来输入预测值为【预测控制3】动态矩阵控制(DMC)及Matlab仿真
以此类推,连续M个输入【预测控制3】动态矩阵控制(DMC)及Matlab仿真作用下,未来各时刻的输出值为【预测控制3】动态矩阵控制(DMC)及Matlab仿真
其中,【预测控制3】动态矩阵控制(DMC)及Matlab仿真的下标表示控制量变化的次数,即【预测控制3】动态矩阵控制(DMC)及Matlab仿真表示控制量【预测控制3】动态矩阵控制(DMC)及Matlab仿真连续变化了【预测控制3】动态矩阵控制(DMC)及Matlab仿真次。根据上面的式子,只要我们知道对象的初始预测值【预测控制3】动态矩阵控制(DMC)及Matlab仿真,就可以根据系统的模型向量【预测控制3】动态矩阵控制(DMC)及Matlab仿真和控制增量来预测对象的未来输出。式(1-1)就被称为预测模型
预测模型示意图

2.滚动优化

 当我们建立好预测模型后,现在的问题就是我们要怎么计算【预测控制3】动态矩阵控制(DMC)及Matlab仿真的最优值,来让系统的输出达到期望值,这就是滚动优化的核心问题。也就是说在每一时刻【预测控制3】动态矩阵控制(DMC)及Matlab仿真,要确定从该时刻起的【预测控制3】动态矩阵控制(DMC)及Matlab仿真个控制增量【预测控制3】动态矩阵控制(DMC)及Matlab仿真,使我们的系统的输出预测值【预测控制3】动态矩阵控制(DMC)及Matlab仿真在未来P时刻尽可能接近给定的期望值【预测控制3】动态矩阵控制(DMC)及Matlab仿真。这里的【预测控制3】动态矩阵控制(DMC)及Matlab仿真分别被称为控制时域和优化时域(【预测控制3】动态矩阵控制(DMC)及Matlab仿真
继续小明的增肥计划,小明根据自己的模型向量【预测控制3】动态矩阵控制(DMC)及Matlab仿真,计划5天分布增加饭量【预测控制3】动态矩阵控制(DMC)及Matlab仿真,然后预测接下7天的体重,让其尽可能的接近120斤。这里的5天相当于控制时域,7天相当于优化时域。那么如何求出【预测控制3】动态矩阵控制(DMC)及Matlab仿真的最优值呢?
根据最优控制,我们可以写出在【预测控制3】动态矩阵控制(DMC)及Matlab仿真时刻的性能指标【预测控制3】动态矩阵控制(DMC)及Matlab仿真除了要求让输出达到期望值以外,我们还要求不要让【预测控制3】动态矩阵控制(DMC)及Matlab仿真剧烈的变化,因此我们再在性能指标后加一项来软约束【预测控制3】动态矩阵控制(DMC)及Matlab仿真,最终性能指标可取【预测控制3】动态矩阵控制(DMC)及Matlab仿真其中,【预测控制3】动态矩阵控制(DMC)及Matlab仿真是权系数,分别表示对跟踪误差及控制量变化的抑制程度,【预测控制3】动态矩阵控制(DMC)及Matlab仿真值越大,表明我们期望对应的控制输出越接近期望值;【预测控制3】动态矩阵控制(DMC)及Matlab仿真的值越大,表明我们期望对应的控制动作变化越小。
 上述问题就是动态模型(1-1)约束下,以【预测控制3】动态矩阵控制(DMC)及Matlab仿真为优化变量,使性能指标(2-1)最小的优化问题。
 现在我们回过头来将式(1-1)写为向量的形式,其中要强调的是,优化时域为P,表示我们要使预测输出【预测控制3】动态矩阵控制(DMC)及Matlab仿真尽可能的接近我们的期望输出;控制时域为M,表示我们有连续M个输入【预测控制3】动态矩阵控制(DMC)及Matlab仿真作用,因此可以将式(1-1)展开写为【预测控制3】动态矩阵控制(DMC)及Matlab仿真现在定义【预测控制3】动态矩阵控制(DMC)及Matlab仿真其中 【预测控制3】动态矩阵控制(DMC)及Matlab仿真被称为动态矩阵
因此,可以将式(1-1)写为向量形式【预测控制3】动态矩阵控制(DMC)及Matlab仿真同样,性能指标(2-1)也可以写为向量形式【预测控制3】动态矩阵控制(DMC)及Matlab仿真其中,【预测控制3】动态矩阵控制(DMC)及Matlab仿真由权系数构成的对角矩阵【预测控制3】动态矩阵控制(DMC)及Matlab仿真分别被称为误差权矩阵控制权矩阵
将式(2-2)带入式(2-3)可得,【预测控制3】动态矩阵控制(DMC)及Matlab仿真为了求【预测控制3】动态矩阵控制(DMC)及Matlab仿真满足上式的最小值,对上式关于【预测控制3】动态矩阵控制(DMC)及Matlab仿真求导并令其等于0可以得到,【预测控制3】动态矩阵控制(DMC)及Matlab仿真
但我们不把它们全部实施,我们只取【预测控制3】动态矩阵控制(DMC)及Matlab仿真的首元素来作用于对象,可以表示为,【预测控制3】动态矩阵控制(DMC)及Matlab仿真其中,【预测控制3】动态矩阵控制(DMC)及Matlab仿真。然后定义控制增益【预测控制3】动态矩阵控制(DMC)及Matlab仿真最终可以得到【预测控制3】动态矩阵控制(DMC)及Matlab仿真在求出控制增量【预测控制3】动态矩阵控制(DMC)及Matlab仿真后,当前k时刻的实际控制量为【预测控制3】动态矩阵控制(DMC)及Matlab仿真然后将【预测控制3】动态矩阵控制(DMC)及Matlab仿真作用于对象,到下一时刻,又以【预测控制3】动态矩阵控制(DMC)及Matlab仿真取代【预测控制3】动态矩阵控制(DMC)及Matlab仿真提出同样的优化问题求出【预测控制3】动态矩阵控制(DMC)及Matlab仿真,得到【预测控制3】动态矩阵控制(DMC)及Matlab仿真作用于对象。如此滚动的进行,这就是滚动优化的含义。

3.反馈校正

 当我们在k时刻将【预测控制3】动态矩阵控制(DMC)及Matlab仿真作用于对象之后,相当于我们在【预测控制3】动态矩阵控制(DMC)及Matlab仿真时刻给对象的输入端加上了一个幅值为【预测控制3】动态矩阵控制(DMC)及Matlab仿真的阶跃信号,根据预测模型(1-1),我们可以得到在接下来【预测控制3】动态矩阵控制(DMC)及Matlab仿真个时刻的输出【预测控制3】动态矩阵控制(DMC)及Matlab仿真,即【预测控制3】动态矩阵控制(DMC)及Matlab仿真其中,【预测控制3】动态矩阵控制(DMC)及Matlab仿真【预测控制3】动态矩阵控制(DMC)及Matlab仿真表示控制作用保持不变时接下来N个时刻的预测输出,【预测控制3】动态矩阵控制(DMC)及Matlab仿真则表示在当前时刻施加了一个控制增量【预测控制3】动态矩阵控制(DMC)及Matlab仿真后接下来N个时刻的预测输出。
 但是在实际情况中,由于环境因素等的干扰,系统的实际输出可能会比我们预测的输出偏小或偏大,就像小明他有可能会感冒生病,导致他吃相同的饭量会比以前增长的体重少。这种情况我们必须要考虑,因为我们下一步的优化是建立在这一次预测输出之上,如果我们这一次预测输出出现了偏差,那么我们下一步优化偏差值可能更大。那么我们要如何减小这个偏差呢?在DMC算法中,我们首先将我们预测到的下一时刻的输出【预测控制3】动态矩阵控制(DMC)及Matlab仿真和系统的实际输出【预测控制3】动态矩阵控制(DMC)及Matlab仿真相比较,得到偏差值【预测控制3】动态矩阵控制(DMC)及Matlab仿真在上面的式子中,系统的实际输出【预测控制3】动态矩阵控制(DMC)及Matlab仿真是已知的,我们的预测输出【预测控制3】动态矩阵控制(DMC)及Matlab仿真也是已知的,说明偏差【预测控制3】动态矩阵控制(DMC)及Matlab仿真也是已知的,DMC就想,既然偏差都已知了,那我们直接把这个偏差【预测控制3】动态矩阵控制(DMC)及Matlab仿真补偿到我们的接下来的预测输出【预测控制3】动态矩阵控制(DMC)及Matlab仿真不就可以减小偏差了吗,因此可以得到【预测控制3】动态矩阵控制(DMC)及Matlab仿真其中,【预测控制3】动态矩阵控制(DMC)及Matlab仿真为校正后的输出预测量,有权系数组成的【预测控制3】动态矩阵控制(DMC)及Matlab仿真维向量【预测控制3】动态矩阵控制(DMC)及Matlab仿真称为校正量。
 以上就是反馈校正的主要思想。

 现在我们都知道,预测模型是需要我们提前准备好的,而滚动优化反馈校正是每一次循环都要进行的,那我们如何将滚动优化和反馈校正两部分形成”闭环”呢?回顾公式,我们需要把【预测控制3】动态矩阵控制(DMC)及Matlab仿真时刻经过修正的预测输出【预测控制3】动态矩阵控制(DMC)及Matlab仿真作为【预测控制3】动态矩阵控制(DMC)及Matlab仿真时刻的初始预测值,也就是初值【预测控制3】动态矩阵控制(DMC)及Matlab仿真。但我们不能直接令【预测控制3】动态矩阵控制(DMC)及Matlab仿真。因为对于【预测控制3】动态矩阵控制(DMC)及Matlab仿真时刻而言,我们得到的预测输出【预测控制3】动态矩阵控制(DMC)及Matlab仿真,而在【预测控制3】动态矩阵控制(DMC)及Matlab仿真时刻的初始预测值为【预测控制3】动态矩阵控制(DMC)及Matlab仿真,所以我们令【预测控制3】动态矩阵控制(DMC)及Matlab仿真由于【预测控制3】动态矩阵控制(DMC)及Matlab仿真中没有【预测控制3】动态矩阵控制(DMC)及Matlab仿真这一项,那么我们用【预测控制3】动态矩阵控制(DMC)及Matlab仿真取近似。最终可以表示为【预测控制3】动态矩阵控制(DMC)及Matlab仿真其中,【预测控制3】动态矩阵控制(DMC)及Matlab仿真有了【预测控制3】动态矩阵控制(DMC)及Matlab仿真,就可以取其前P项得到【预测控制3】动态矩阵控制(DMC)及Matlab仿真,然后可以根据式子(2-4)计算出【预测控制3】动态矩阵控制(DMC)及Matlab仿真,整个控制过程就是滚动优化结合反馈校正反复在线进行的。

二、Matlab仿真示例

1.算法结构

根据上面整个DMC算法的流程,我们可以得到它的算法结构,如下图所示。图中粗箭头表示向量流,细箭头表示数值流。
DMC算法结构

2.计算流程

计算流程

流程图中的算式依次对应于式(3-2)、式(3-3)式(2-4)、式(2-5)、式(3-1)

3.仿真示例

例: 考虑如下SISO系统,其传递函数为【预测控制3】动态矩阵控制(DMC)及Matlab仿真

程序代码:

clear all;
close all;

P=6;M=2;N=25;%优化时域、控制时域和建模时域
ts=1;%采样时间
k_step=50;
times=zeros(1,k_step);

den=[4,1];
num=[3];
sys=tf(num,den);%建立传递函数
sysd=c2d(sys,ts);
[numd,dend]=tfdata(sysd,'v');
yk_1=0;uk_1=0;uk=0;
[a,t]=step(num,den,1:ts:N*ts);%获得模型向量a


S=diag(ones(1,N-1),1);S(N,N)=1;%移位矩阵S
yr=3;%期望输出

dum=zeros(M,1);%优化变量
du=0;%控制增量
yn0=zeros(N,1);%前一时刻预测输出
yn1=zeros(N,1);%当前预测输出
yp0=zeros(P,1);%优化输出
us=zeros(1,k_step);%实际控制量
ys=zeros(1,k_step);%实际输出


R=eye(M);Q=eye(P);%控制权矩阵和误差权矩阵
h=0.5*ones(N,1);
h(1)=1;%校正系数矩阵

A=zeros(P,M);
for i=1:M       
    A(i:P,i)=a(1:P-i+1);
end  %建立动态矩阵A
c=zeros(M,1);c(1)=1;
d=c'*inv(A'*Q*A+R)*A'*Q;d=d';%控制增益

%第一步预测
ys(1)=0;
yk_1=ys(1);
ek=ys(1)-yn1(1);
yn0=S*(yn1+h*ek);%预测值校正
yp0=yn0(1:P);
du=d'*(yr-yp0);%计算这一时刻控制增量
us(1)=0+du;%施加控制增量,得到实际控制量
uk=us(1);
yn1=yn0+a(1:N)*du;%得到施加控制增量后的预测输出

%滚动优化
for k=2:k_step
    times(k)=k;
    ys(k)=-dend(2)*yk_1+numd(2)*uk;%得到系统的实际输出
    yk_1=ys(k);
    ek=ys(k)-yn1(1);%计算偏差,公式(3-2)
    yn0=S*(yn1+h*ek);%预测值校正,公式(3-3)
    yp0=yn0(1:P);
    du=d'*(yr-yp0);%计算这一时刻控制增量,公式(2-4)
    us(k)=us(k-1)+du;%施加控制增量,得到实际控制量,公式(2-5)
    uk=us(k);
    yn1=yn0+a(1:N)*du;%得到施加控制增量后的预测输出,公式(3-1)
end

figure(1)
plot(times,ys');
title('输出曲线')
figure(2)
stairs(times,us');
title('控制量变化曲线')

运行结果:
输出曲线

总结

DMC算法(Dynamic Matrix Control)是一种经典的模型预测控制算法,适用于线性、纯时滞、开环渐进稳定的非最小相位系统,其优缺点如下:
优点:

  1. 较好的控制性能:DMC算法能够很好地解决传统PID控制算法难以处理的复杂控制问题,能够提供更好的控制性能。
  2. 可以处理多变量控制问题:DMC算法可以对多个变量同时进行控制,能够处理多变量控制问题。
  3. 具有鲁棒性:DMC算法对于模型不确定性、测量噪声等影响具有很强的鲁棒性。

缺点:

  1. 计算量大:DMC算法计算比较复杂,需要大量的计算资源,处理速度较慢。
  2. 模型依赖性强:DMC算法的控制性能依赖于模型的精度,如果模型不准确,控制效果会受到影响。
  3. 参数调节困难:DMC算法需要调节多个参数,参数调节比较困难,需要一定的经验和技巧。

版权声明:本文为博主作者:麦斯威尔逊原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/qq_51065725/article/details/133996298

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2024年4月22日
下一篇 2024年4月22日

相关推荐