m基于模糊控制与遗传优化的自适应ADRC双闭环控制策略matlab仿真

简介: m基于模糊控制与遗传优化的自适应ADRC双闭环控制策略matlab仿真

1.算法仿真效果
matlab2013b仿真结果如下:

35bb8f09b31fa729e8fd54d28c32084b_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
99e0ae39229f16d85106dfefa1c56d60_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
74885706ee44ba8fd9c83009602a808d_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
48c33a4acfa7917d7b0de366f60bba4b_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
2220987928c6e3eb34b30e9c456204ae_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

    遗传优化的优化迭代过程仿真图:

e60dfb2d90f38c1de64485372281c93f_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

这个是我们采用的优化算法的有过过程,通过优化,可以得到超调量最小的控制器仿真参数。

08146913ba256c5e61c5ad847c586c5d_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
a9048ea2c637f30b5b568a68b0a5e25a_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
e0dad6bccfad85282e6a7de9e53c6393_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

2.算法涉及理论知识概要

   模糊控制的基本概念是由美国加州大学查德教授首先提出来的,模糊控制是以模糊语言变量、模糊集合论和模糊逻辑推理为基础的一种新型控制理论。模糊控制算法是一种非线性智能控制,它很适合于工业生产过程和大系统控制过程,并且其可以和神经网络、预测控制、遗传算法和混沌理论等新学科相结合。模糊控制器的基本原理图如图1所示。

63c4af23938c89ab8b0b2f3b2d0ecd31_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

   图1虚线方框中的几个模块为模糊控制算法的几个主要步骤,其主要是由计算控制程序来实现的,具体操作流程如下所示:通过控制输出的反馈信息和参考信息进行做差计算,得到差作为控制算法的误差输入信号,这个误差输入信号作为模糊控制器的输入。同时,通过模糊化处理,将这个数值形态的误差信号转换为模糊语言的集合,并根据预先定义的模糊规则进行模糊聚餐,并得到模糊控制量,最后通过逆模糊化处理,将模糊控制量转换为实际的数值信息作为控制输出,并作用到控制对象上。 

   本系统所采用的模糊神经网络系统结构如图2所示,其中输入t表示本文所设计的控制器是针对炼焦炉烘炉过程高温段进行设计的。

22b168164be152da6dbb00bae40f805d_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
25628205957ff89f4beeff050cc96e44_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

这里,我们最后其实主要要实现的改进结构如下所示:
d349d9a1624ef4c3c0632c5902826c1c_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

3.MATLAB核心程序

1095479ce3fdea00f3f8761b14e6af4b_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
cd757ea509a1f237162ff30621a28dce_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

w2              = zeros(MAXGEN,1);
w3              = zeros(MAXGEN,1);
w4              = zeros(MAXGEN,1);
w5              = zeros(MAXGEN,1);
w6              = zeros(MAXGEN,1);
w7              = zeros(MAXGEN,1);
w8              = zeros(MAXGEN,1);
w9              = zeros(MAXGEN,1);
 
Error           = zeros(MAXGEN-2,1);
fitness         = zeros(MAXGEN-2,1);
gen             = 0;
 
 
for jj=1:1:NIND 
    %初始化参数,这个和parameter参数相同
    w1_NIND(jj)         = 0.8;      
    w2_NIND(jj)         = 0.01;
    w3_NIND(jj)         = 100;
    w4_NIND(jj)         = 65;  
    w5_NIND(jj)         = 80; 
    w6_NIND(jj)         = 100;      
    w7_NIND(jj)         = 10;
    w8_NIND(jj)         = 0.75;
    w9_NIND(jj)         = 0.05;  
 
    %计算对应的目标值
    parameter;
    sim('mains1.mdl');
    tmps    = object.signals.values;
    %计算最大超调值
    [V,I]   = max(tmps);
    tmps2   = mean(tmps(length(tmps)/2:length(tmps)));
    %计算超调量
    CTL     = (V-tmps2)/tmps2;
    %计算收敛速度
    SLX     = I/10000;
    
    J(jj,1) = (CTL);
end
Objv  = J;
gen   = 0; 
Error  = [];
Error2 = [];
LEN    = 32;
while gen < MAXGEN;   
      gen
      FitnV=ranking(Objv);    
      Selch=select('sus',Chrom,FitnV);    
      Selch=recombin('xovsp', Selch,0.95);   
      Selch=mut( Selch,0.05);   
      phen1=bs2rv(Selch,FieldD);   
      for jj=1:1:NIND  
          if  gen == 1
              %初始化参数,这个和parameter参数相同
              w1_NIND(jj)        = 2;      
              w2_NIND(jj)        = 0.01;
              w3_NIND(jj)        = 100;
              w4_NIND(jj)        = 65;  
              w5_NIND(jj)        = 80; 
              w6_NIND(jj)        = 100;      
              w7_NIND(jj)        = 10;
              w8_NIND(jj)        = 0.75;
              w9_NIND(jj)        = 0.05;   
          else   
              w1_NIND(jj)         = phen1(jj,1);       
              w2_NIND(jj)         = phen1(jj,2);  
              w3_NIND(jj)         = phen1(jj,3);  
              w4_NIND(jj)         = phen1(jj,4);   
              w5_NIND(jj)         = phen1(jj,5);  
              w6_NIND(jj)         = phen1(jj,6);      
              w7_NIND(jj)         = phen1(jj,7);  
              w8_NIND(jj)         = phen1(jj,8);  
              w9_NIND(jj)         = phen1(jj,9);    
          end
 
          %计算对应的目标值
          parameter;
          sim('mains1.mdl');
          tmps    = object.signals.values;
          %计算最大超调值
          [V,I]   = max(tmps);
          tmps2   = mean(tmps(length(tmps)/2:length(tmps)));
          %计算超调量
          CTL     = (V-tmps2)/tmps2;
          %计算收敛速度
          SLX     = I/10000;
          JJ(jj,1) = (CTL);
      end 
 
      Objvsel      = JJ;    
      [Chrom,Objv] = reins(Chrom,Selch,1,1,Objv,Objvsel);   
      gen          = gen+1; 
 
      %保存参数收敛过程和误差收敛过程以及函数值拟合结论
      w1(gen)      = mean(w1_NIND);
      w2(gen)      = mean(w2_NIND);
      w3(gen)      = mean(w3_NIND);
      w4(gen)      = mean(w4_NIND);
      w5(gen)      = mean(w5_NIND);
      w6(gen)      = mean(w6_NIND);
      w7(gen)      = mean(w7_NIND);
      w8(gen)      = mean(w8_NIND);
      w9(gen)      = mean(w9_NIND);     
      Error        = [Error,mean(JJ)];
      if gen <= LEN
         Error2  = [Error2,mean(Error(1:gen))];
      else
         Error2  = [Error2,mean(Error(gen-LEN+1:gen))];
      end      
end 
 
w1_best         = w1(end)      
w2_best         = w2(end)
w3_best         = w3(end)
w4_best         = w4(end) 
w5_best         = w5(end) 
w6_best         = w6(end)      
w7_best         = w7(end)
w8_best         = w8(end)
w9_best         = w9(end)
 
figure;
plot(Error2,'b-s');
xlabel('迭代次数');
ylabel('目标优化');
 
 
save R.mat w1_best w2_best w3_best w4_best w5_best w6_best w7_best w8_best w9_best Error2
相关文章
|
4月前
|
存储 传感器 分布式计算
针对大尺度L1范数优化问题的MATLAB工具箱推荐与实现
针对大尺度L1范数优化问题的MATLAB工具箱推荐与实现
|
4月前
|
机器学习/深度学习 供应链 算法
【电动车】基于削峰填谷的电动汽车多目标优化调度策略研究(Matlab代码实现)
【电动车】基于削峰填谷的电动汽车多目标优化调度策略研究(Matlab代码实现)
191 0
|
4月前
|
机器学习/深度学习 算法 新能源
基于动态非合作博弈的大规模电动汽车实时优化调度电动汽车决策研究(Matlab代码实现)
基于动态非合作博弈的大规模电动汽车实时优化调度电动汽车决策研究(Matlab代码实现)
150 0
|
4月前
|
机器学习/深度学习 存储 人工智能
基于双层共识控制的直流微电网优化调度(Matlab代码实现)
基于双层共识控制的直流微电网优化调度(Matlab代码实现)
173 0
|
4月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
234 0
|
4月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
495 0
|
4月前
|
算法 定位技术 计算机视觉
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
378 0
|
4月前
|
算法 机器人 计算机视觉
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
174 0
|
4月前
|
新能源 Java Go
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
187 0
|
4月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
256 8

热门文章

最新文章