计算机控制原理与应用作业-基于遗传算法的PID参数整定.docx_第1页
计算机控制原理与应用作业-基于遗传算法的PID参数整定.docx_第2页
计算机控制原理与应用作业-基于遗传算法的PID参数整定.docx_第3页
计算机控制原理与应用作业-基于遗传算法的PID参数整定.docx_第4页
计算机控制原理与应用作业-基于遗传算法的PID参数整定.docx_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机控制原理与应用仿真作业基于遗传算法的数字PID控制器参数整定设计 控制工程专业2012年12月目录一、问题重述2二、问题分析及算法设计22.1遗传算法基本介绍22.2数字PID参数整定22.3基于遗传算法的PID参数整定2三、仿真实验设计23.1编码和解码23.2初始种群的确定23.3性能指标函数的确定23.4遗传算子的确定23.4.1 选择算子的确定23.4.2 交叉算子的确定23.4.3 变异算子的确定23.5程序算法设计23.5.1算法的流程图23.5.2 仿真程序2四、仿真实验结果及分析2五、总结与展望2基于遗传算法的数字PID控制器参数整定设计一、问题重述在工业过程控制系统中,PID控制仍是应用最为广泛的控制方法。PID控制器参数的整定对于系统的性能指标有很大的影响,除了工程上常用的过渡过程响应法,临界稳定测量法,归一参数整定法等,PID控制器的参数也可以直接根据离散的被控对象模型及其要求的性能指标来确定,可以通过参数寻优的方法来确定PID控制器的参数。对于式(1.1)的PID控制器(z变换形式),可以采用式(1.2)的二次型性能指标函数。uk=Kp+Ki11-z-1+Kd1-z-1ek (1.1)J=k=0e2(k)+u2(k) (1.2)其中为常数,取值范围为01。 已知某伺服系统的对象传递函数为Gs=1s(10s+1) (1.3)对此伺服系统设计PID控制器,利用参数寻优的遗传算法,求得使性能指标J取得极小值的控制器参数。二、问题分析及算法设计2.1遗传算法基本介绍遗传算法(Genetic Algorithm, GA),是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型。它是由美国Michigan大学的J. Holland教授于1975年首先提出的。遗传算法研究的兴起是在80年代末和90年代初期,无论是理论研究还是应用研究都成了十分热门的课题。遗传算法的应用领域也不断扩大。目前遗传算法所涉及的主要领域有自动控制、规划设计、组合优化、图象处理、信号处理、人工生命等。 遗传算法模拟自然选择和自然遗传过程中发生的繁殖、交叉和基因突变现象,在每次迭代中都保留一组候选解,并按某种指标从解群中选取较优的个体,利用遗传算子(选择、交叉和变异)对这些个体进行组合,产生新一代的候选解群,重复此过程,直到满足某种收敛指标为止。 遗传算法中最优解的搜索过程也是模仿生物的进化过程,通过染色体之间的交叉和染色体的变异来完成。通过所谓的遗传算子(genetic operators)作用于群体中,进行遗传操作,从而得到新一代群体。遗传算子包括选择算子,交叉算子,变异算子。遗传算法基本操作包括:编码(产生初始种群);遗传算子的运算(包括选择、交叉、变异);适应度函数的确定等。此节只做简单介绍,就具体问题的实际操作介绍见下节中算法设计。遗传算法具有以下的特点:(1) 遗传算法是对参数的编码进行操作,而非对参数本身;(2) 遗传算法是从许多点开始并行操作,而非局限于一点;(3) 遗传算法通过目标函数来计算适配值,而不需要其他推导,从而对问题的依赖性较小;(4) 遗传算法的寻优规则是由概率决定,而非确定性的;(5) 遗传算法在解空间进行高效启发式搜索,而非盲目地穷举或完全随机搜索;(6) 遗传算法对于待寻优的函数基本无限制,它既不要求函数连续,也不要求函数可微,既可以是数学解析式所表示的显函数,又可以是映射矩阵甚至是神经网络的隐函数,因此应用范围较广;(7) 遗传算法具有并行计算的特点,因而可以通过大规模并行计算来提高计算速度;(8) 遗传算法更适合大规模复杂问题的优化;(9) 遗传算法计算简单,功能强。2.2数字PID参数整定数字PID控制器源于模拟PID控制器,基本数字PID控制算法包括增量式PID控制算法(2.1)和位置式PID控制算法(2.2)。uk=Kpek-e(k-1)+Kiek+Kdek-2ek-1+e(k-2) (2.1)uk=uk-1+Kpek-ek-1+Kiek+Kdek-2ek-1+e(k-2) (2.2)其中u(t)为控制器输出;e(k)为偏差输入;Kp为比例系数;Ki为积分系数;Kd为微分系数。实际应用中究竟是使用位置式PID算法还是增量式PID算法,关键是看执行机构的特性。如果执行机构具有积分特性的部件(如步进电动机、具有齿轮传递特性的位置执行机构等),则应该采用增量式PID算法;如果执行机构没有积分特性部件,则应该采用位置式PID算法。2.3基于遗传算法的PID参数整定目前PID参数的优化方法有很多,如间接寻优法,梯度法,爬山法等。虽然这些方法都具有良好的寻优特性,但却存在着一些弊端,单纯形法对初值比较敏感容易陷入局部最优化解,造成寻优失败。因此我们选取了遗传算法来进行参数寻优。该方法是一种不需要任何初始信息并可以寻求全局最优解的高效的优化组合方法。遗传算法作为一种全局优化算法,得到了越来越广泛的应用。近年来,它在控制上应用日益增多。采用遗传算法进行PID三个参数的整定,具有以下优点:(1) 与单纯形法相比,遗传算法同样具有良好的寻优特性,且克服了单纯形法参数初值的敏感性。在初始条件选择不当的情况下,遗传算法在不需要给出调节器初始参数的情况下,仍能寻找到合适的参数,使控制目标满足要求。同时单纯形答难以解决多值函数问题以及在多参数寻优(如串级系统)中,容易造成寻优失败或时间过长,而遗传算法的特性决定了它能很好地克服以上问题。(2) 遗传算法是从许多点开始并行操作,在解空间进行高效启发式搜索,克服了从单点出发的弊端以及搜索的盲目性,从而使寻优速度更快,避免了过早陷入局部最优解。(3) 遗传算法不仅使用于单目标寻优,而且也使用于多目标寻优。根据不同的控制系统,针对一个或多个目标,遗传算法均能在规定的范围内寻找到合适的参数。三、仿真实验设计仿真实验就是把遗传算法在数字PID参数整定上的应用过程在计算机上实现出来,包括编码和解码,初始种群的确定,性能指标的确定,遗传算子的确定,算法设计几个部分。本文采用C语言编程,采用c-free软件编译执行。3.1编码和解码我们把待寻优的参数用一个二进制数来表示。若参数的变化范围为min,max,用m 位二进制数b来表示,则它们的关系为: =min+b2m-1max-min (3.1) 将所有表示参数的二进制数放入一个列向量中。该列向量的每个元素即为需要寻优的参数。该向量即为遗传算法可以操作的对象。此过程为编码。上述过程的反过程为解码。(1) PID参数的编码用长度为m=10位的二进制编码串可以表示从0到1023之间的1024个不同的数,故将的定义域离散化为1023个均等的区域,包括两个端点在内共有1024个不同的离散点。参数的取值范围为0,20,的取值范围为0,1,的取值范围为0,10。对于从离散点0到20,依次让它们分别对应于从0000000000(0)到1111111111(1023)之间的二进制编码;对于从离散点0到1,依次让它们分别对应于从0000000000(0)到1111111111(1023)之间的二进制编码。用长度为10位的二进制编码串来分别表示三个决策变量,再将它们放到一个列向量(染色体)中,例如:X=KP Ki KdT=0000110111 1101110001 1101110001T (3.2)其中三个元素分别代表 三个参数。 (2) PID参数的解码解码时需要分别将它们转换为对应的十进制整数代码,其中二进制编码分别记为。依据前述个体编码方法和对定义域的离散化方法可知,将代码转换为变量。根据解码公式得: Kp=20y1210-1+0; Kp=10y2210-1+0; Kp=1y3210-1+0; (3.3)3.2初始种群的确定适应函数应同目标函数相关,遗传算法寻优就是因为需要编程来实现各过程,所以采用计算机随机产生初始种群,针对二进制编码而言,利用计算机语言随机产生一组初始种群。此外,考虑到计算的复杂程度来规定种群的大小。种群中染色体越多 最终进化到最优解的可能性越大, 但势必造成计算时间的增加。因此其个数一般选为10 50。本文针对提出的问题选定种群的大小为30,用一个330的矩阵X来表示:X=X11X12 X21X22 X31X32 X1,30X2,30X3,30 (3.4)其中X的每一列都代表一个染色体。用C语言编写的产生初始种群的程序为:srand( (unsigned)time( NULL ) ); /*使用当前的时钟作为随机数的种子*/ for(i=0;i=2;i+) for(j=0;j=29;j+) geneij=randomi(1024); /*给初始种群随机初始化*/其中gene为种群矩阵。Randomi()为调用的产生随机数的函数。3.3性能指标函数的确定性能指标函数采用式(1.2),即J=k=0e2(k)+u2(k) 其中e(k) 为误差序列,u(k) 为控制量序列。两个序列产生于差分函数(2.2),通过迭代产生两组数列,然后带入(1.2)式中从而得出适值的大小J。用C语言编写的产生初始种群的程序为:J=0.0;for(k=0;k100;k+) /*计算适应值,即目标函数值*/ J=J+(Ek*Ek+0.5*Uk*Uk);3.4遗传算子的确定遗传算法有三个算子: 选择算子,交叉算子,变异算子。每个算子都有算子概率。选择概率通过适配值来确定,交叉概率决定了交叉的次数,过小导致搜索停滞不前; 而太大也会使高适配置的结构被破坏掉。因此, 交叉概率一般选取0.25 0.8 之间。变异概率一般为0.001 0.1 ,太大会引起不稳定,太小难以寻到全局最优解。3. 4.1 选择算子的确定在本文中的选择算子采用经典的轮盘赌方法选择下一代的种群。具体方式为先计算当前种群中每个个体的适应值,然后对适应值进行处理,也就是对每个适应值取倒数得到新的适应值。然后计算每个新的适应值在所有适应值总和中所占的比率pi。产生0-1之间的随机数来选择个体。这样pi值大的个体被选择到下一代的可能性就更大。用C语言编写的程序如下:for(i=0;i30;i+) pi=1.0/adap_valuei;float sum=0.0,ratio30;for(i=0;i30;i+) sum=sum+pi; /*制作轮盘*/for(i=0;i30;i+) ratioi=pi/sum; for(i=1;i30;i+) ratioi=ratioi+ratioi-1; srand( (unsigned)time( NULL ) ); /*进行选择*/ while(sumratioi)|(sumratio29) gene10j=gene0i+1; gene11j=gene1i+1; gene12j=gene2i+1; 3.4.2 交叉算子的确定交叉算子的运算可以看成在优秀个体的附近范围进行调整,也就是找到局部最优解。取交叉率为Pc=0.6,则交叉个数为0.6*30=18个,则随机选择九对个体进行交叉变异。例如:用C语言编写的程序如下:for(i=0;i18;i=i+2) for(j=0;j3;j+) tempj0=gene1ji&63; /*C语言按位操作复制字符串的后半部*/ for(j=0;j3;j+) tempj1=gene1ji+1&63; for(j=0;j3;j+) gene1ji=gene1ji&960+tempj1; gene1ji+1=gene1ji+1&960+tempj0; 3.4.3 变异算子的确定变异算子的引进是为了扩大搜索的范围,防止搜索陷入局优。突变算子的突变率为Pm=0.05,则在本次突变的数目为B=0.05*30*10=15.突变的位置则随机产生。例如:变异算子的C语言编写程序如下:for(k=0;k15;k+) i=randomi(30); for(j=0;j3;j+) step=randomi(10); posi=1step; gene1ji=gene1jiposi; for(i=0;i=2;i+) for(j=0;j=29;j+) geneij=gene1ij; 3.5程序算法设计3.5.1算法的流程图流程图如下:图3.1 算法的流程图算法如下:Step1:初始化程序,产生初始种群;Step2:计算种群的适应值函数,对适应值进行取倒数操作;Step3:分别进行选择算子、交叉算子、突变算子的运算;判断是否达到了迭代次数,达到就结束运算转到step4;否则转到step2.Step4:结束运算得出结果。3.5.2 仿真程序本题采用C语言编程,使用c-free编译软件进行编译,C语言源程序如下:#include #include #include#include main()int randomi(int num);float randomf();float decode(int a,int b,int c); int i,j,gen,gene330,gene1330;float adap_value30;srand( (unsigned)time( NULL ) ); /*使用当前的时钟作为随机树的种子*/ for(i=0;i=2;i+) for(j=0;j=29;j+) geneij=randomi(1024); /*给初始种群随机初始化*/ for(gen=0;gen=1000;gen+)float p30;for(i=0;i30;i+) /*计算每个种群的适值*/ adap_valuei=decode(gene0i,gene1i,gene2i); for(i=0;i30;i+) pi=1.0/adap_valuei; float sum=0.0,ratio30; for(i=0;i30;i+) sum=sum+pi; for(i=0;i30;i+) ratioi=pi/sum; for(i=1;i30;i+) ratioi=ratioi+ratioi-1; srand( (unsigned)time( NULL ) ); for(j=0;j30;j+) sum=randomf(); for(i=0;i29;i+) while(sumratioi)|(sumratio29) gene10j=gene0i+1; gene11j=gene1i+1; gene12j=gene2i+1; break; if(gen=1000) break; int temp32; for(i=0;i18;i=i+2) for(j=0;j3;j+) / /*交叉算子设计*/ tempj0=gene1ji&63; for(j=0;j3;j+) tempj1=gene1ji+1&63; for(j=0;j3;j+) gene1ji=gene1ji&960+tempj1; gene1ji+1=gene1ji+1&960+tempj0; int posi,step,k; for(k=0;k15;k+) i=randomi(30); for(j=0;j3;j+) /*变异算子设计*/ step=randomi(10); posi=1step; gene1ji=gene1jiposi; for(i=0;i=2;i+) for(j=0;j=29;j+) geneij=gene1ij; int best,k=0; float adap_best30,kp,ki,kd,J;for(i=0;i30;i+)adap_besti=decode(gene0i,gene1i,gene2i);for(i=0;iadap_besti) k=i; kp=(10*gene0k)/(pow(2.0,10.0)-1); ki=(0.5*gene1k)/(pow(2.0,10.0)-1); kd=(20*gene2k)/(pow(2.0,10.0)-1); J=decode(gene0k,gene1k,gene2k);printf(The best Parameter is kp=%2.2f ki=%2.2f kd=%2.2f n J=%2.2fn,kp,ki,kd,J); int randomi(int num) /*产生0-mun的随机整数*/ int a; a=rand()%num; return(a); float randomf() /*产生0-1的随机浮点数*/ float a; a=rand()/32767.0; return(a); float decode(int a,int b,int c) /*解码并且计算适应值*/ float kp,ki,kd,J; float R50,Y50,E50,U50,G50; int k; kp=(10*a)/(pow(2.0,10.0)-1); ki=(0.5*b)/(pow(2.0,10.0)-1); kd=(20*c)/(pow(2.0,10.0)-1); for(k=0;k50;k+) /*给输入赋值,输入为单位阶跃函数*/ Rk=1; Gk=1-pow(2.7183,-0.1*k); k=0; /*给定第一次第二次的迭代值*/ Ek=Rk-0.0; Uk=0.0+kp*(Ek-0.0)+ki*Ek+kd*(Ek-2.0*0.0+0.0); Yk=Uk*Gk; k=1; Ek=Rk-1-Yk-1; Uk=0.0+kp*(Ek-Ek-1)+ki*Ek+kd*(Ek-2.0*Ek-1+0.0); Yk=U

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论