目录

  • 0背景
  • 1遗传算法介绍与发展
    • 1.1遗传算法的简单介绍
    • 1.2算子的操作与理解
    • 1.3遗传算法的研究发展
  • 2被控对象介绍
    • 2.1带时延二阶系统的传递函数
    • 2.2适应度评价函数的综述
  • 3PID参数整定
    • 3.1GA算法的PID参数整定
    • 3.2GA算法的PID参数整定仿真图
    • 3.3小结
  • 4参考文献

0背景

写在前面:
 1.本代码基于MATLAB2019a版本,低版本或者不同版本可能会报错,mdl文件或slx文件打开可能会失败;
 2.如果运行时间过长,请观察迭代次数是否有变化。
 3.本博客附上代码并详细介绍,如果转载请注明出处;
 4.如果本博客恰巧与您的研究有所关联,欢迎您的咨询qq1366196286
 5.源代码及程序文件下载链接:见评论区。


  接着上上篇博客【Simulink】PSO优化算法整定PID控制器参数(一)继续讲解本博客:【Simulink】GA优化算法整定PID控制器参数(三)—— 一阶带时延的被控对象

1遗传算法介绍与发展

1.1遗传算法的简单介绍

  遗传算法(Genetic algorithm,GA)是由J.hollland教授提出的一种将编码技术等同染色体基因的方法。首先对所需求解的变量或优化参数进行编码,在有限解集空间中进行启发式搜索;其次利用目标函数进行适应度计算,其中遗传算子的寻优规则是由概率所决定的;最后通过选择、交叉和变异多次迭代出最优解。遗传算法因其流程简单,适合复杂问题的优化在许多领域诸如参数整定、目标寻优、路径规划等得到广泛应用。GA算法应用于参数整定的基本步骤如下:
  ⑴确定编码方式并初始化种群。如设置种群迭代GEN=1,二进制编码等。
  ⑵构造目标优化函数。
  ⑶对种群中个体进行解码,并计算相应的适应度。
  ⑷判断是否达到控制要求,对种群中个体进行选择、交叉和变异来更新种群的适应度大小,多次迭代以满足控制要求。
  ⑸判断终止条件,输出最优解。如图3-1所示。


图3-1 遗传算法的基本操作

遗传算法的伪代码

BEGIN:
I = 0; //进化种群代数
Initialize P(I); //初始化种群
Fitness P(I); //“适者生存”遗传选择
While(not Terminate-Condition) //不满足终止条件时,循环
{I ++; //循环
GA-Operation P(I); //遗传算法运算or操作
Fitness P(I); //“适者生存”遗传选择
}

1.2算子的操作与理解

选择(轮盘赌法)

  又可以称比例选择方法.其基本思想是:各个个体被选中的概率与其适应度大小成正比.
具体操作如下:
(1)计算出群体中每个个体的适应度f(i=1,2,…,M),M为群体大小;
(2)计算出每个个体被遗传到下一代群体中的概率;

(3)计算出每个个体的累积概率;

(4)在[0,1]区间内产生一个均匀分布的伪随机数r;
(5)若r<q[1],则选择个体1,否则,选择个体k,使得:q[k-1]<r≤q[k] 成立;

(6)重复(4)、(5)共M次

轮盘赌法代码:

/*
* 按设定的概率,随机选中一个个体
* P[i]表示第i个个体被选中的概率
*/
int RWS()
{m =0;
r =Random(0,1); //r为0至1的随机数
for(i=1;i<=N; i++)
{/* 产生的随机数在m~m+P[i]间则认为选中了i
* 因此i被选中的概率是P[i]
*/
m = m + P[i];
if(r<=m) return i;
}
}


图3-2 遗传算子的选择操作(图片来源:https://zhuanlan.zhihu.com/p/49055485)

交叉(单点交叉和多点交叉)

可以参考这篇博客遗传算法中的变异和交叉

  单点交叉又称为简单交叉,它是指在个体编码串中只随机设置一个交叉点,然后在该点相互交换两个配体个体的部分染色体。图3-3为单点交叉运算的示意图。

  多点交叉或称广义交叉,是指在个体编码串中随机设置多个交叉点,然后进行基因交换。其操作过程与单点交叉和两点交叉相类似。


图3-3 遗传算子的交叉操作(图片来源:https://zhuanlan.zhihu.com/p/49055485)

变异
  变异算子的基本内容是对群体中的个体串的某些基因座上的基因值作变动。依据个体编码表示方法的不同,可以有以下的算法:
  a)实值变异
  b)二进制变异。

  一般来说,变异算子操作的基本步骤如下:

  a)对群中所有个体以事先设定的变异概率判断是否进行变异
  b)对进行变异的个体随机选择变异位进行变异。

  遗传算法引入变异的目的有两个:一是使遗传算法具有局部的随机搜索能力。当遗传算法通过交叉算子已接近最优解邻域时,利用变异算子的这种局部随机搜索能力可以加速向最优解收敛。显然,此种情况下的变异概率应取较小值,否则接近最优解的积木块会因变异而遭到破坏。二是使遗传算法可维持群体多样性,以防止出现未成熟收敛现象。此时收敛概率应取较大值。

  遗传算法中,交叉算子因其全局搜索能力而作为主要算子,变异算子因其局部搜索能力而作为辅助算子。遗传算法通过交叉和变异这对相互配合又相互竞争的操作而使其具备兼顾全局和局部的均衡搜索能力。所谓相互配合.是指当群体在进化中陷于搜索空间中某个超平面而仅靠交叉不能摆脱时,通过变异操作可有助于这种摆脱。所谓相互竞争,是指当通过交叉已形成所期望的积木块时,变异操作有可能破坏这些积木块。如何有效地配合使用交叉和变异操作,是目前遗传算法的一个重要研究内容。

  基本变异算子是指对群体中的个体码串随机挑选一个或多个基因座并对这些基因座的基因值做变动(以变异概率P.做变动),(0,1)二值码串中的基本变异操作如下:

  基因位下方标有*号的基因发生变异。

  变异率的选取一般受种群大小、染色体长度等因素的影响,通常选取很小

  遗传算法的值,一般取0.001-0.1。


图3-4 遗传算子的变异操作(图片来源:https://zhuanlan.zhihu.com/p/49055485)

1.3遗传算法的研究发展

  遗传算法最早是由美国的 Holland 教授于 1975 年在他的专著《自然界和人工系统的适应性》所提出。经过大量学者的努力研究发展,如图3-3所示。

图3-5 遗传算子的研究发展(图片来源:https://zhuanlan.zhihu.com/p/56299083)

2被控对象介绍

2.1带时延二阶系统的传递函数

  以下式二阶Ⅰ型时延系统的传递函数为例,运用GA算法进行PID参数优化,其中系统设置为采样时间1 ms,指令为单位阶跃信号,仿真运行时间为1.0 s。其中,性能优化函数Best_J采取时间与误差绝对值乘积的积分方程(Integral of Time Multiplied by the Absolute Value of Error,ITAE),同时为避免控制量过大而产生超调,在性能优化函数Best_J中添加PID控制器输入量的平方项。

  二阶Ⅰ型时延系统的传递函数,如下所示。可按照自己的实际系统进行设计,既可以.m文件进行编写,也可以通过Simulink仿真进行搭建。


图3-6 二阶Ⅰ型时延系统的Simulink仿真模型

2.2适应度评价函数的综述

  一共复现了以下这几种,其实原理是一样的,只是所实现的算法与适应度函数不同而已,如下所示:


  选定ITSE和ITAE进行GA算法适应度函数的设计,如下所示:
  为获取较为满意的过渡过程,采用误差绝对值时间积分性能指标作为适应度评价函数Best_J。同时为防止控制输入过大,在Best_J加入控制输入的评分项,如式(1-2)所示。

式(1-2)中e(t)为系统输出误差,u(t)为PID控制器输入量,ρ1,ρ2为权重值。
  为避免超调,采用罚函数对超调量进行优先处理,则如式(1-3)所示。

式(1-3)中ρ3>>max(ρ1,ρ2和ρ4),且y(t)为被控对象输出,ey(t)=y(t)-y(t-1)。

3PID参数整定

3.1GA算法的PID参数整定

  GA算法中种群大小设置为50,交叉概率为0.7,变异概率为0.01,ρ1=0.999,ρ2=0.01。PID控制器中比例系数Kp取值范围为[0,30],积分系数Ki取值范围为[0,1.0],微分系数KD取值范围为[0,1.0],编码方式为实数编码,并设置迭代次数100。

主函数

%GA(Generic Algorithm) Program to optimize PID Parameters
close all;
clear;
clc;global rin yout timefSize=50;  % 种群大小30个 可行解
CodeL=3;  % 三个实数编码 三个决策变量MinX(1)=zeros(1);
MaxX(1)=20*ones(1);MinX(2)=zeros(1);
MaxX(2)=1.0*ones(1);MinX(3)=zeros(1);
MaxX(3)=1.0*ones(1);Kpid(:,1)=MinX(1)+(MaxX(1)-MinX(1))*rand(Size,1);
Kpid(:,2)=MinX(2)+(MaxX(2)-MinX(2))*rand(Size,1);
Kpid(:,3)=MinX(3)+(MaxX(3)-MinX(3))*rand(Size,1);G=100;    % 种群运行100次
BsJ=0;
sigma_data=zeros(1,G);
ts_data=zeros(1,G);%*************** Start Running ***************
for kg=1:1:Gtime(kg)=kg;%****** Step 1 : Evaluate BestJ ******
for i=1:1:Size
Kpidi=Kpid(i,:);  %单个可行解[Kpidi,BsJ,Ts,sigma]=chap5_3f(Kpidi,BsJ);BsJi(i)=BsJ;endsigma_data(1,kg)=sigma;ts_data(1,kg)=Ts;[OderJi,IndexJi]=sort(BsJi);
BestJ(kg)=OderJi(1);
BJ=BestJ(kg);
Ji=BsJi+1e-10;    % Avoiding deviding zerofi=1./Ji;
%  Cm=max(Ji);
%  fi=Cm-Ji;                     [Oderfi,Indexfi]=sort(fi);    %Arranging fi small to biggerBestfi=Oderfi(Size);          %Let Bestfi=max(fi)BestS=Kpid(Indexfi(Size),:);  %Let BestS=E(m), m is the Indexfi belong to max(fi)kg   BJBestS
%****** Step 2 : Select and Reproduct Operation******fi_sum=sum(fi);fi_Size=(Oderfi/fi_sum)*Size;fi_S=floor(fi_Size);                    % Selecting Bigger fi valuer=Size-sum(fi_S);Rest=fi_Size-fi_S;[RestValue,Index]=sort(Rest);for i=Size:-1:Size-r+1fi_S(Index(i))=fi_S(Index(i))+1;     % Adding rest to equal Sizeendk=1;for i=Size:-1:1       % Select the Sizeth and Reproduce firstly  for j=1:1:fi_S(i)  TempE(k,:)=Kpid(Indexfi(i),:);      % Select and Reproduce k=k+1;                            % k is used to reproduceendend%************ Step 3 : Crossover Operation ************Pc=0.90;for i=1:2:(Size-1)temp=rand;if Pc>temp                      %Crossover Conditionalfa=rand;TempE(i,:)=alfa*Kpid(i+1,:)+(1-alfa)*Kpid(i,:);  TempE(i+1,:)=alfa*Kpid(i,:)+(1-alfa)*Kpid(i+1,:);endendTempE(Size,:)=BestS;Kpid=TempE;%************ Step 4: Mutation Operation **************
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:Sizefor j=1:1:CodeLif Pm(i)>Pm_rand(i,j)        %Mutation ConditionTempE(i,j)=Mean(j)+Dif(j)*(rand-0.5);endendend
%Guarantee TempE(Size,:) belong to the best individualTempE(Size,:)=BestS;      Kpid=TempE;endBestfi;
BestS;
Best_J = BestJ(G);figure(1);
plot(time,BestJ);
xlabel('Times');ylabel('Best J');
title('GA算法优化PID三个参数');figure(2);
plot(time,ts_data);
xlabel('Times');ylabel('Ts');
title('调节时间随迭代次数的变化'); figure(3);
plot(time,sigma_data);
xlabel('Times');ylabel('sigma');
title('超调量随迭代次数的变化');figure(4);
plot(timef,rin,'r',timef,yout,'b');
xlabel('Time(s)');
ylabel('rin,yout');

3.2GA算法的PID参数整定仿真图

上述GA算法的PID参数整定的结果输出,如图3-7~图3-10所示。

图3-7 GA算法的适应度函数代价图

图3-8 调节时间随迭代次数的变化图

图3-9 超调量随迭代次数的变化图

图3-10 GA算法整定的结果输出图

3.3小结

1.由图3-7可知,GA算法整定PID参数是收敛的;
2.由图3-8~图3-9可知,调节时间与超调量是个矛盾量,单纯依靠单目标优化算法难以实现二者性能的最优化。**很明显可看出,在前50代超调量小,但调节时间长;在后50代调节时间下降变短,而超调量也随之上升。**为此,在后续博客中将多目标优化算法NSGA-2算法应用到此问题,用于解决这种不可调和的矛盾。
3.图3-10可知,最终整定优化所得的结果拥有极小的超调,且较快的响应速度。同时,GA算法在上述参数设置下耗时也较短。

4参考文献

[1]邓春燕. 遗传算法的交叉算子分析[J]. 农业网络信息, 2009(5):124-126.
[2]葛继科,邱玉辉,吴春明,蒲国林.遗传算法研究综述[J].计算机应用研究,2008(10):2911-2916.


【MATLAB】GA优化算法整定PID控制器参数(三)—— 一阶带时延的被控对象相关推荐

  1. 【MATLAB】自适应果蝇优化算法整定PID控制器参数(六)—— 一阶带时延的被控对象

    [MATLAB]自适应果蝇优化算法整定PID控制器参数(六)-- 一阶带时延的被控对象 目录 [MATLAB]自适应果蝇优化算法整定PID控制器参数(六)-- 一阶带时延的被控对象 0研究背景 1自适 ...

  2. 【MATLAB】不同优化算法整定PID控制器参数(七)—— 一阶带时延的被控对象

    [MATLAB]不同优化算法整定PID控制器参数(七)-- 一阶带时延的被控对象 [精品课设]不同优化算法整定PID控制参数 [MATLAB]不同优化算法整定PID控制器参数(七)-- 一阶带时延的被 ...

  3. 【MATLAB】FOA优化算法整定PID控制器参数(五)—— 一阶带时延的被控对象

    [MATLAB]FOA优化算法整定PID控制器参数(五)-- 一阶带时延的被控对象 目录 [MATLAB]FOA优化算法整定PID控制器参数(五)-- 一阶带时延的被控对象 1研究背景 2果蝇优化算法 ...

  4. 【精品课设】不同优化算法整定PID控制参数

    [精品课设]不同优化算法整定PID控制参数 0研究背景 1系列博客的相关链接 2博客资源的相关介绍 2.1 资源文件的截图 2.2 不同算法的对比 3总结 0研究背景 写在前面:  1.本代码基于MA ...

  5. PSO粒子群算法调节PID控制器参数

    概述 PSO(粒子群算法)在处理连续问题上有着较强的能力,因此很适合用来做参数优化,而PID控制器由三个参数组成,它们分别是: Kp.Ki.KdK_p.K_i.K_dKp​.Ki​.Kd​ 我们可以把 ...

  6. matlab pid 课设 参考文献,系统控制论文,关于Matlab在计算机控制技术课程“PID控制器参数整定”中的应用相关参考文献资料-免费论文范文...

    导读:本论文可用于系统控制论文范文参考下载,系统控制相关论文写作参考研究. 周少武陈敏沈红远 曾照福 (湖南科技大学信息与电气工程学院 湖南湘潭411201) 摘 要:传统PID参数整定的教学方法以定 ...

  7. 模糊PID控制器MATLAB仿真探讨,基于Matlab的模糊自整定PID控制器仿真研究

    1. 引言 传统的PID控制因其算法可靠简单,鲁棒优良,可靠度高,在工业过程中得到了广泛的应用,特别适用于建立一个精确的数学模型确定控制系统的确定性控制.李文宇等对PID控制进行了研究,并取得了一定的 ...

  8. 基于Matlab编辑器Z-N法整定PID参数

    简介 Ziegler-Nichols(Z-N)的PID整定方法在工程快速 计算方面具有很大的影响力,它的频率响应方法是通 过PID控制器的临界振荡试验获得被控对象重要的临界频率响应特性,并根据经验给出 ...

  9. 如何使用matlab得出pid控制参数值,基于MATLAB的PID控制器参数整定及仿真

    基于MATLAB的PID控制器参数整定及仿真 摘要:PID控制器结构和算法简单,应用广泛,但参数整定比较复杂,在此我探讨利用MATLAB实现PID参数整定及其仿真的方法,并分析比较比例.比例积分.比例 ...

  10. matlab中pid Tune控制器,基于MATLAB的PID控制器参数整定及仿真

    基于MATLAB的PID控制器参数整定及仿真 摘要:PID控制器结构和算法简单,应用广泛,但参数整定比较复杂,在此我探讨利用MATLAB实现PID参数整定及其仿真的方法,并分析比较比例.比例积分.比例 ...

最新文章

  1. LRU算法确定最后使用时间的顺序-栈
  2. 在Flex控件中使用XMLListCollection
  3. php中轮转图片js代码,js实现图片轮换效果代码
  4. Oracle数据加载之sqlldr工具的介绍
  5. leetcode 10 Regular Expression Matching
  6. UUID介绍与生成的方法
  7. java遍历集合元素_遍历java集合元素的方法
  8. html怎么使背景图片充屏,css如何使div背景图片填充
  9. python使用如下方法规范化数组_python – 根据数组的符号将数组中列的元素规范化为1或-1...
  10. python实现屏幕录制_JavaScript 屏幕录制 API 学习
  11. 聊天宝解散罗永浩退出;三大运营商回应提速降费;天猫 iPhone XS 最高降 2000 | 极客头条...
  12. windows上jupyter notebook主题背景、字体及扩展插件配置(集成vim环境)
  13. 计算机 数据挖掘 知识,计算机软考考试必备知识点:数据挖掘
  14. Python制作登陆界面(1)(超简单)
  15. 计算机cpi的公式,EAC=BAC/CPI;EAC=AC+( BAC-EV)/CPI公式分别在什么情况下使用?
  16. h61 nvme硬盘_免装系统!机械硬盘系统迁移至固态硬盘技巧
  17. tp交换机管理页面_tplink交换机设置步骤使用方法
  18. 大神详解开源 BUFF 增益攻略丨直播
  19. cacheable 表达式_springboot @Cacheable 基本使用
  20. RocketMq - Springboot2.x整合RocketMQ4.x - 发送消息(七)

热门文章

  1. ROS创建KDL tree
  2. 计算机毕业设计ssm宠物寄存中心计时收费系统
  3. linux网站如何添加swf支持,linux上查看swf文件.靠谱
  4. 系统与漏洞的风云人物
  5. Pymol一些命令及使用小技巧
  6. 爬虫练习三:爬取链家二手房信息
  7. 使用Xbrowser远程连接REHL6.5
  8. Nginx正反向代理的具体步骤讲解
  9. 一行代码,小龟机器人播放“生日快乐”
  10. 左/右移运算符,循环左/右移运算