✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab完整代码及仿真定制内容点击👇
🔥 内容介绍
随着现代工业控制系统的不断发展,对被控对象进行精确控制的需求也越来越高。为了满足这一需求,出现了各种各样的控制方法,其中,GPC(Generalized Predictive Control,广义预测控制)是一种近年来发展迅速的控制方法,它具有预测能力强、鲁棒性好等优点,被广泛应用于各种工业控制系统中。
CARIMA模型
CARIMA(Controlled Autoregressive Integrated Moving Average,控制自回归积分滑动平均)模型是一种常用的时间序列模型,它可以用于描述具有输入和输出的动态系统。CARIMA模型的一般形式如下:
GPC对CARIMA模型的控制
GPC是一种基于模型预测的控制方法,它利用CARIMA模型对被控对象的未来输出进行预测,并根据预测结果调整控制输入,以使被控对象的输出跟踪期望的轨迹。GPC控制系统的结构如下图所示:
GPC控制系统的基本原理如下:
-
首先,建立被控对象的CARIMA模型。
-
根据CARIMA模型,预测未来一段时间内被控对象的输出。
-
根据预测结果,计算控制输入,以使被控对象的输出跟踪期望的轨迹。
-
将计算得到的控制输入发送给被控对象。
-
重复上述步骤,不断调整控制输入,以实现对被控对象的精确控制。
GPC控制的优点
与传统的控制方法相比,GPC控制具有以下优点:
-
预测能力强:GPC可以根据CARIMA模型对未来一段时间内被控对象的输出进行精确预测,这使得它能够提前采取措施来应对可能出现的干扰。
-
鲁棒性好:GPC对模型误差和参数变化具有较强的鲁棒性,即使模型不完全准确,GPC仍然能够实现对被控对象的有效控制。
-
易于实现:GPC的控制算法相对简单,易于在实际系统中实现。
GPC控制的应用
GPC控制被广泛应用于各种工业控制系统中,例如:
-
化工过程控制
-
电力系统控制
-
交通运输控制
-
环境监测控制
总结
GPC是一种高效、鲁棒的控制方法,它可以有效地控制具有CARIMA模型的被控对象。随着工业控制系统的发展,GPC将会得到更加广泛的应用。
📣 部分代码
%2019-03-14
%function:基本的GPC
%parameter:
function [y,ud_space,Theta_His] = GPC_d3(pN,PA,PB,na,nb,N,Nu,lambda,soft_ele,Cn)
%############################## 用户编辑区 ##############################
[First_t,Last_t,tim_len,t,yr,u_max,u_min] = GPC_ParameterEditSpace(pN,N);
%#######################################################################
%--------------------------------------------------1 表示已知量
u=zeros(1, Last_t+1-First_t); %控制量
ud_space=zeros(1, Last_t+1-First_t); %控制增量的存储
y=zeros(1,Last_t+1-First_t); %输出量
w=rand(1,1+Last_t-First_t)*2-1; %扰动。幅度范围(-1,1)的随机序列
for k = 2-First_t : 1+Last_t-First_t
w(k) = w(k-1) + w(k);
end %表示ω(k)/?
%从A、B获取G
%A=[1 -0.7 0];B=[0.9 -0.4]; %第一阶段被控对象务必为此
rho=1;
%----------------------------获取多项式P、Q
M=N+Nu+(na+1)+nb; %矩阵阶数
Theta = ones(M,1)*0.3; %θ
Theta_His = 0.3*ones(M,1+Last_t-First_t); %存储θ的轨迹,用于学习研究
X = zeros(M,1); %X'=[y(t),...,y(t-(N-1)),λ△u(t+Nu-1-N),...,λ△u(t-N)
%-y(t-N),...,-y(t-na-N),-△u(t-N-1),...,-△u(t-N-nb)];
Ud = zeros(N+nb,1); %[△u(t-1),...,△u(t-N-nb)]T
ud = 0;
P_theta = ones(M,M);
P_theta = P_theta+eye(M); %随机的正定矩阵P
X_taddN = zeros(M,1); %X(t+N), 用于求△u(t)时与θ做矩阵乘法
tic;
%31-First_t
for k = 1-First_t : 1+Last_t-First_t %时刻指针k, k=1-First_t对应实际时刻t=0
%for t = 0 : Last_t
%----------------------------------------3.1 检测k时刻输出y(k)
y(k) = GPC_get_yk(First_t,k,tim_len,u,y,w,PA,PB,Cn); %获取y(k)
%if(k==1-First_t+50 || k==1-First_t+130) %添加人工干扰
%y(k)=y(k)+10;
%end
%----------------------------------------3.2 参数估计
%------------------------------3.2.1 更新Ud,X
Ud = [Ud(1:N+nb-1,1)];
Ud = [ud;Ud];
X = [X(1:M-1,1)];
X = [y(k);X];
X(N+1) = lambda*Ud(N+1-Nu);
X(N+Nu+1) = -y(k-N);
X(N+Nu+na+2) = -Ud(N+1);
%-----------------------------3.2.2 更新θ
epsilon = Ud(N)-X'*Theta;
Mid = P_theta*X; %P(t-1)*X(t)
Mid = Mid/(X'*Mid+rho); %P(t-1)*X(t)/(rho+X(t)'*P(t-1)*X(t))
Theta = Theta+Mid*epsilon;
P_theta = (P_theta-Mid*X'*P_theta)/rho;
Theta_His(:,k) = Theta; %记录θ轨迹
%----------------------------------------3.3 实时更新控制率
%求出△u(t),u(t)
for i=M:-1:N+Nu+2
X_taddN(i) = X_taddN(i-1);
end
X_taddN(N+Nu+1) = -y(k); %历史输出项
X_taddN(N+Nu+na+2) = -Ud(1); %历史输入项
%----- 设定值项
mid = yr(k)*(1-soft_ele);
X_taddN(N)=y(k)*soft_ele + mid;
for i=N-1:-1:1
X_taddN(i) = X_taddN(i+1)*soft_ele + mid;
end
ud = X_taddN'*Theta;
u(k) = u(k-1) + ud;
if u(k)<u_min %给u(t)一些限制条件
u(k) = u_min;
ud = u_min - u(k-1);
elseif(u(k)>u_max)
u(k) = u_max;
ud = u_max - u(k-1);
end
ud_space(k)=ud;
end
run_time=toc;
figure(5);
uicontrol('Style','text','Position',[10 0 150 20],'String',['运行时间: ',num2str(run_time),'s']);
%运行时间显示
subplot(211);
plot(t,yr,'b--',t,y,'r-');
grid on;
title('简单的 广义预测自适应控制 直接算法仿真');
%xlim([First_t Last_t]);
axis([First_t,Last_t,-10,60]);
ylabel('输出y(k)');
legend('设定值yr','实际值y','Location','Best');
subplot(212);
plot(t,ud_space);
grid on;
xlim([First_t Last_t]);
%axis([First_t,Last_t,-40,40]);
ylabel('控制增量u_d(k)');
xlabel('k')
%--------------------------------------------------5 编辑返回值
y = [y(1,1-First_t:1+Last_t-First_t)]; %k = 0 ~ Last_t
u = [u(1,1-First_t:1+Last_t-First_t)];
ud_space = [ud_space(1,1-First_t:1+Last_t-First_t)];
Theta_His = [Theta_His(:,1-First_t:1+Last_t-First_t)];
DataTXT = fopen('.\GPC_simulate_data\GPC_d3__data.txt','w');%打开txt文件
fprintf(DataTXT,'%s\t%s\t%s\t\t%s\r\n','时刻k','输出y','控制增量ud','各项估计参数θ(1~?)');
data_len = length(y(:));
theta_len = length(Theta_His(:,1));
for j=1:data_len
fprintf(DataTXT,'%d\t',j-1);
fprintf(DataTXT,'%.3f\t%.3f\t\t',y(j),ud_space(j));
for i = 1:theta_len
fprintf(DataTXT,'%.4f\t',Theta_His(i,j));
end
fprintf(DataTXT,'\r\n');
end
fclose(DataTXT);
⛳️ 运行结果
🔗 参考文献
🎈 部分理论引用网络文献,若有侵权联系博主删除
🎁 关注我领取海量matlab电子书和数学建模资料
👇 私信完整代码和数据获取及论文数模仿真定制
1 各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化、背包问题、 风电场布局、时隙分配优化、 最佳分布式发电单元分配、多阶段管道维修、 工厂-中心-需求点三级选址问题、 应急生活物质配送中心选址、 基站选址、 道路灯柱布置、 枢纽节点部署、 输电线路台风监测装置、 集装箱船配载优化、 机组优化、 投资优化组合、云服务器组合优化、 天线线性阵列分布优化、CVRP问题、VRPPD问题、多中心VRP问题、多层网络的VRP问题、多中心多车型的VRP问题、 动态VRP问题、双层车辆路径规划(2E-VRP)、充电车辆路径规划(EVRP)、油电混合车辆路径规划、混合流水车间问题、 订单拆分调度问题、 公交车的调度排班优化问题、航班摆渡车辆调度问题、选址路径规划问题
2 机器学习和深度学习方面
2.1 bp时序、回归预测和分类
2.2 ENS声神经网络时序、回归预测和分类
2.3 SVM/CNN-SVM/LSSVM/RVM支持向量机系列时序、回归预测和分类
2.4 CNN/TCN卷积神经网络系列时序、回归预测和分类
2.5 ELM/KELM/RELM/DELM极限学习机系列时序、回归预测和分类
2.6 GRU/Bi-GRU/CNN-GRU/CNN-BiGRU门控神经网络时序、回归预测和分类
2.7 ELMAN递归神经网络时序、回归\预测和分类
2.8 LSTM/BiLSTM/CNN-LSTM/CNN-BiLSTM/长短记忆神经网络系列时序、回归预测和分类
2.9 RBF径向基神经网络时序、回归预测和分类