仿真图:

仿真主程序:

%遗传算法优化simulink仿真模型中的参数Kp Ki Kd
clear all;
close all;
Size=30;%种群中个体数,对应要优化的参数现有Size组(在后面会随机生成)
CodeL=3;%每个个体由codeL个元素,对应要优化的参数个数,对应要优化的参数Kp Ki Kd有3个

MinX(1)=zeros(1);
MaxX(1)=20.0*ones(1);
MinX(2)=zeros(1);
MaxX(2)=1.0*ones(1);
MinX(3)=zeros(1);
MaxX(3)=1.0*ones(1);%确定各优化参数的取值范围

E(:,1)=MinX(1)+(MaxX(1)-MinX(1))*rand(Size,1);
E(:,2)=MinX(2)+(MaxX(2)-MinX(2))*rand(Size,1);
E(:,3)=MinX(3)+(MaxX(3)-MinX(3))*rand(Size,1);%8-17代码就是在参数指定范围随机生成size组要优化的控制参数,产生种群E,后续的选择、复制、变异都是对该初始种群E进行处理

G=50;%迭代次数(次数少达不到最优值,次数多时间长)
BsJ=0;%目标函数值初始化为0

%*************** 开始运行***************
for kg=1:1:G
time(kg)=kg;%此处time为种群迭代次数

%****** Step 1 : 计算第kg代种群最小目标函数值 BestJ(kg) ******
for i=1:1:Size
x=E(i,:);

BsJ=GA_PID_Simulink_fitness(x,BsJ);%调用目标函数,输入种群E中的第一个个体x,该个体就是一组参数组成的向量;返回目标函数值BsJ。

BsJi(i)=BsJ;%将每一个个体(控制参数)在simulink中仿真,都会得到一个目标函数值,执行完for循环,所有控制参数依次带入simulink中仿真,得到的所有目标函数值存放在BsJi向量中。

end
 
[OderJi,IndexJi]=sort(BsJi); %将所有目标函数值从小到大排序,OderJi返回的是BsJi向量经过排序后的结果向量,IndexJi返回的是OderJi结果向量元素在BsJi中的下标(位置)
BestJ(kg)=OderJi(1);%找到目标函数值最小值
BJ=BestJ(kg);%将目标函数值最小值保存
Ji=BsJi+1e-10;    %因为优化的目的是目标函数值越小越好,那么就会有0结果,适应度fi是目标函数值的导数,所以加上1e-10是为了防止分母为零报错。

fi=1./Ji;%求适应度
   
   [Oderfi,Indexfi]=sort(fi);    %将所有适应度值从小到大排序
   Bestfi=Oderfi(Size);          %找到适应度最大值
   BestS=E(Indexfi(Size),:);  %适应度最大对应的目标函数最小对应的参数(个体)是整个种群中最优的参数(个体),找到适应度最大值对应个体在种群中的位置(第Indexfi(Size)个),即可找出适应度最大值对应最优参数,并保存给 BestS变量
   
   bfi(kg)=Bestfi;%保存第kg代种群的适应度最大值

kg %第kg代  
   BestS %第kg代群体中最优个体,也就是满足目标函数最小,对应的个体,个体就是三个参数(kp,ki,kd)组成的行向量
   BJ %第kg代群体对应的目标函数最小值
%****** Step 2 : 选择和复制计算******
   %都是固定套路不必研究,但种群E变量名要与之前的代码一致
   fi_sum=sum(fi);
   fi_Size=(Oderfi/fi_sum)*Size;
   
   fi_S=floor(fi_Size);                    % Selecting Bigger fi value
   r=Size-sum(fi_S);
   
   Rest=fi_Size-fi_S;
   [RestValue,Index]=sort(Rest);
   
   for i=Size:-1:Size-r+1
      fi_S(Index(i))=fi_S(Index(i))+1;     % Adding rest to equal Size
   end

k=1;
   for i=Size:-1:1       % Select the Sizeth and Reproduce firstly  
      for j=1:1:fi_S(i)  
       TempE(k,:)=E(Indexfi(i),:);      % 通过上述选择复制产生新的个体,进而形成新的种群
         k=k+1;                            % k is used to reproduce
      end
   end
   
%************ Step 3 : 交叉计算 ************
%都是固定套路不必研究,但种群E变量名要与之前的代码一致
    Pc=0.90;%交叉概率
    for i=1:2:(Size-1)
          temp=rand;
      if Pc>temp                      %Crossover Condition
          alfa=rand;
          TempE(i,:)=alfa*E(i+1,:)+(1-alfa)*E(i,:);  
          TempE(i+1,:)=alfa*E(i,:)+(1-alfa)*E(i+1,:);
      end
    end
    TempE(Size,:)=BestS;
    E=TempE;%通过上述交叉产生新的个体,进而形成新的种群
    
%************ Step 4: 变异计算 **************
Pm=0.10-[1:1:Size]*(0.01)/Size;       %(变异概率计算,每个个体变异概率不一样)Bigger fi,smaller Pm
Pm_rand=rand(Size,CodeL);
Mean=(MaxX + MinX)/2; 
Dif=(MaxX-MinX);

for i=1:1:Size
      for j=1:1:CodeL
         if Pm(i)>Pm_rand(i,j)        %Mutation Condition
            TempE(i,j)=Mean(j)+Dif(j)*(rand-0.5);
         end
      end
   end
%Guarantee TempE(Size,:) belong to the best individual
   TempE(Size,:)=BestS;      
   E=TempE;%%通过上述变异产生新的个体,进而形成新的种群
end
%23-105代码实现G次迭代,迭代过程为计算当前种群最小目标函数,最大适应度,并找出对应的最优参数个体,然后对整个当前种群做选择、复制、交叉、变异,产生新的更好地种群,然后进行下一步迭代。
BestS %迭代完成后的种群里面的最优个体,也就是经过遗传寻优得到的最优参数向量
Bestfi %以经过迭代产生的最优参数,运行simulink模型,计算目标函数,再计算适应度,得到的最大适应度值
fi %以经过迭代后的种群所有个体(包括最优个体)运行simulink模型,计算目标函数,再计算适应度,得到所有适应度值
x %经过迭代后种群的最后一个个体(不一定是最优个体)
Best_J=BestJ(G)%以第G代群体中个体,运行simulink模型,计算目标函数,其中的目标函数最小值
figure(1);
plot(time,BestJ);%注意此处的time不是时间,而是迭代次数,所以此处作图以迭代次数为横坐标,迭代次数对应群体的最小目标函数值为纵坐标
xlabel('Times');ylabel('Best J');

完整程序:

基于遗传算法的simulink/PID参数整定(s函数)_simulink遗传算法整定pid-电子商务文档类资源-CSDN文库

仿真结果:

迭代50次,需等待几分钟。

基于遗传算法的simulink/PID参数整定(s函数)相关推荐

  1. 基于遗传算法的PID参数整定研究(七)

    基于遗传算法的PID参数整定研究 在前述深入了解PID参数的含义.基于常规人工的PID参数整定.以及所运用的遗传算法的介绍与应用后,紧接着进入应用遗传算法的PID参数整定,实现了Simulink仿真与 ...

  2. 基于遗传算法的PID参数整定研究(三)

    基于遗传算法的PID参数整定研究 在获得对象模型的基础上设计PID参数时常用的原理,经典的有经验试凑法.临界比例度法.极点配置原理.零极点相消原理.幅相裕度法等:现代的则往往借助于计算机,利用最优化方 ...

  3. 基于入门级粒子群算法的PID参数整定(MATLAB2016b-simulink)(超详细01)

    PID算法作为工业或日常生活中常用的控制算法,想必大家都不陌生,依靠误差反馈来消除误差,关于PID的原理部分相比看这篇博客的同学应该都十分清楚,有不清楚的同学可以百度或知网搜索.PID算法的应用程度很 ...

  4. 自动控制原理PID参数整定的Matlab实现

      以一道题为例介绍调节PID控制器系数的方法,有:试凑法(Trial-and-Error Method).齐格勒-尼科尔斯校正规则(Ziegler and Nichols First Method. ...

  5. 我的四轴专用PID参数整定方法及原理

    给四轴调了好久的PID,总算是调好了,现分享PID参数整定的心得给大家,还请大家喷的时候手下留情. 首先说明一下,这篇文章的主旨并不是直接教你怎么调,而是告诉你这么调有什么道理,还要告诉大家为什么'只 ...

  6. 我的四轴专用PID参数整定方法及原理---超长文慎入(转)

    给四轴调了好久的PID,总算是调好了,现分享PID参数整定的心得给大家,还请大家喷的时候手下留情. 首先说明一下,这篇文章的主旨并不是直接教你怎么调,而是告诉你这么调有什么道理,还要告诉大家为什么'只 ...

  7. matlab求系统根轨迹代码_根轨迹法、PID参数整定和matlab指令计算

    收获 (1)理解根轨迹的概念及其在控制系统设计中的作用: (2)手绘根轨迹草图,以及如何使用极端及绘制根轨迹: (3)熟悉在反馈控制系统中应用广泛的关键部件:PID控制器: (4)理解根轨迹在参数设计 ...

  8. 一个实例说明PID 参数整定

    引言:PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID控制的原理可以用人对炉温的手动控制来理解.     1.比例控制 ...

  9. 机器人控制——PID参数整定

    (1)首先选择一个合适的并且尽量短的采样时间让系统工作: (2)首先加入比例环节,调节比例系数,直到系统的输出出现临界振荡: (3)若单独的比例环节不能满足设计要求,则此时加入积分环节,调整好的比例系 ...

  10. 针对具有纯滞后环节的一阶惯性系统PID参数整定(衰减曲线法)

    假定被控系统的传递函数为: 一.建立开环结构图,观察系统对阶跃输入信号的跟随性. 由图二可知:开环系统的的上升时间很长,并且输出到达不了给定值,下面对该系统进行PID参数整定,进行PID控制. 图1 ...

最新文章

  1. sql大小写敏感吗_postgresql基础:表名字段名是大小写敏感的么
  2. 平正真诚——记红帆公司2011年秋季旅游·衡山
  3. Class.getResources()和classLoader.getResources()区别
  4. 小月金嗓再现经典版迟来的爱
  5. 如何选择一个合适的建站系统?
  6. 女人护肤品可与男人共用! - 健康程序员,至尚生活!
  7. JQUERY的parent()
  8. WEB框架研究笔记六(Spring WEB)
  9. 通过 Ruby 买卖Bitcoin:使用开放交易所OceanOne
  10. 八、非规则组织分析及其数学模型——平纹变化组织
  11. larvel 中的api.php_laravel route api.php 与 web.php 的区别
  12. XSS后台敏感操作(审计思路实现)
  13. 学术论文投稿与返修(Rebuttal)经验分享
  14. 计算机视觉知识点-人脸对齐
  15. 成为阿里云架构师的进阶之路——阿里云首批ACE认证通过者逸疏专访
  16. 无盘php,MZD无盘系统160台网吧安装实战教程
  17. 温故知新(五)——三参数陷波滤波器离散化推导及MATLAB实现
  18. Android设备获取mp3中的专辑封面信息
  19. 6本超实用平面设计书籍
  20. js 随机数时间戳函数

热门文章

  1. 个人经典音乐收藏(五)love to be loved by you,Marc Terenzi
  2. 用猎头的方式来找工作
  3. 分贝、电平、增益、音高、音分、声能、声强、声压...
  4. Spring核心接口ObjectProvider
  5. OSPF网络可以没有BDR(实验)
  6. SVD降维(相当好理解的文章)
  7. 【阅读源码系列】ThreadPoolExecutor源码
  8. 每日方法分享:免费一键抠图方法都有哪些?
  9. hibernate hbb.xml 映射关系
  10. 20189320《网络攻防》第二周作业