您现在的位置:首页 >> 智能控制 >> 内容

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

时间:2023/3/3 19:41:49 点击:

  核心提示:08_030_m,包括程序操作录像+说明文档+参考文献...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/ZJWcmp9v

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览




3.算法概述

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

4.部分源码

..............................................................

w1              = zeros(MAXGEN,1);

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

08_030_m

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168