遗传算法的参数整定报告
- 格式:doc
- 大小:119.50 KB
- 文档页数:8
控制理论与应用Control Theory and Applications《自动化技术与应用》2004年第23卷第7期用遗传算法实现PID 参数整定万佑红1,李新华2(1.南京邮电学院电子工程系,江苏 南京 210003; 2.安徽大学电子工程系,安徽 合肥 230001)摘要:PI D 参数整定一直是控制领域中的重要研究问题。
本文在M AT LAB 平台上将遗传算法应用于PI D 参数的自动整定,算法实例仿真取得了良好的效果,为PI D 参数整定方法提供了一种新的尝试。
关键词:PI D 参数;遗传算法中图分类号:TP27312 文献标识码:A 文章编号:100327241(2004)0720007202PID Tu nin g Bas e d O n Ge netic Alg orit h m sWAN You -hong 1,LI Xin -hua 2(1.E lectronics Department of Nanjing University of P osting T echnology ,Nanjing 210003,China ;2.E lectronics Department of AnHui University ,Hefei 230001,China )Abstract :A new method to s olve the tuning of PI D paramrters is proposed in this paper.I t is showed that g ood control effect can be obtained by usingG enetic Alg orithms (G A ).K ey w ords :PI D paramrters ;G A1 引言PI D 控制无需知道被控对象的数学模型,算法简单,鲁棒性好且可靠性高,因此成为一种获得广泛应用的控制策略。
遗传算法实验报告一、实验目的1、 掌握遗传算法原理;2、 学会编写遗传算法程序寻找函数最大值。
二、实验设备装有matlab7.0以上版本软件的PC 机一台三、实验原理传统的优化理论都是通过调整模型的参数来得到期望的结果,而遗传优化算法是根据生物界的遗传和自然选择的原理来实现的,它的学习过程是通过保持和修改群体解中的个体特性,并且保证这种修改能够使下一代的群体中的有利于与期望特性相近的个体在整个群体份额中占有的比例越来越多。
与基于代数学的优化方法一样,遗传算法是通过连续不断地队群体进行改进来搜索函数的最大值。
遗传算法的搜索结果会有很大的差异。
遗传学习的基本机理是使那些优于群体中其他个体的个体具有生存、繁殖以及保持更多基因给下一代的机会。
遗传算法实质上是在群体空间中寻求较优解。
四、实验步骤及内容1、实验步骤:(1)群体初始化;(2)评价群体中每一个体性能;(3)选择下一代个体;(4)执行简单的操作算子(如交叉、变异);(5)评价下一代群体的性能;(6)判断终止条件满足否?若不,则转(3)继续,若满足,则结束。
2、实验内容:寻找函数 22212121(,)100()(1)f x x x x x =-+- 的最大值及所对应的x1和x2的值。
( 2.048 2.048i x -≤≤)五、实验程序clc;clear;%**************************遗传算法*****************************num=80;A1=rand(num,10); %生成随机数A2=rand(num,10);A1=round(A1); %编码A2=round(A2);times=100;for k=1:times %遗传次数SIZE(k)=size(A1,1);for i=1:size(A1,1)B1(i)=binvec2dec(A1(i,:));%二进制转换十进制B2(i)=binvec2dec(A2(i,:));X1(i)=4.096*B1(i)/1023-2.048;%映射到实际取值范围X2(i)=4.096*B2(i)/1023-2.048;H(i)=100*(X1(i)^2-X2(i))^2+(1-X1(i))^2;%计算函数值endJ=1./H;[J1,IX]=sort(J);Hm(k)=H(IX(1)); %得本次迭代的函数最大值Xm1(k)=X1(IX(1));%得本次迭代的使函数值最大的X1值Xm2(k)=X2(IX(1));%得本次迭代的使函数值最大的X2值S=sum(H)/size(H,2); %求适应度C1=[];C2=[];for i=1:size(A1,1)%复制过程if round(H(i)/S)==0 %为0则淘汰C1=C1;C2=C2;elseif round(H(i)/S)==1 %为1保留一次C1=[C1;A1(i,:)];C2=[C2;A2(i,:)];elseif round(H(i)/S)==2 %为2保留两次C1=[C1;A1(i,:);A1(i,:)];C2=[C2;A2(i,:);A2(i,:)];elseif round(H(i)/S)==3 %为3保留三次C1=[C1;A1(i,:);A1(i,:);A1(i,:)];C2=[C2;A2(i,:);A2(i,:);A2(i,:)];elseif round(H(i)/S)==4 %为4保留四次C1=[C1;A1(i,:);A1(i,:);A1(i,:);A1(i,:)];C2=[C2;A2(i,:);A2(i,:);A2(i,:);A2(i,:)];else %其他值时保留五次C1=[C1;A1(i,:);A1(i,:);A1(i,:);A1(i,:);A1(i,:)]; C2=[C2;A2(i,:);A2(i,:);A2(i,:);A2(i,:);;A2(i,:)]; endendA1=C1;A2=C2;for i=1:size(A1,1) %交叉a=rand;%生成本次交叉概率b=round(rand*9+1);%确定交叉位置if a>=0.6c=round(rand*(size(A1,1)-1)+1);%开始交叉D=A1(i,1:b);A1(i,1:b)=A2(c,1:b);A2(c,1:b)=D;endendfor i=1:size(A1,1) %变异e=rand;%生成变异概率f=round(rand*9+1);%确定变异位置if e<=0.1A1(i,f)=~A1(i,f);%开始变异A2(i,f)=~A2(i,f);endendendHH=1./Hm;[Q,IY]=sort(HH);Hmax=Hm(IY(1)) %最优解X1you=Xm1(IY(1)) %最优解时X1值X2you=Xm2(IY(1)) %最优解时X2值t=IY(1)%寻得最优解时的迭代次数s=SIZE(t)%训得最优解时种群中个体个数%************************寻优曲线********************** count=1:times;%figure(1);subplot(2,1,1);plot(count,Hm,'r.-');grid on;title('寻优曲线');xlabel('迭代次数');ylabel('函数取值');%figure(2);subplot(2,1,2);plot(count,SIZE,'b.-');grid on;title('种群个数曲线');xlabel('迭代次数');ylabel('种群个数');六、实验结果第一次运行结果:Hmax = 3.9059e+003 ,X1you = -2.0480,X2you = -2.0480,t =26,s = 42(此结果是最优解)第二次运行结果:Hmax = 3.8855e+003,X1you =-2.0440,X2you =-2.0480,t = 27,s =44(此结果不为最优解)第三次运行结果:Hmax = 3.9059e+003,X1you = -2.0480,X2you =-2.0480,t =17,s =60(此结果是最优解)改变初始种群个体个数为30Hmax = 3.8308e+003,X1you = -2.0440,X2you =-2.0040,t = 7,s = 24 (此结果不为最优解)改变迭代次数为30Hmax =3.8805e+003,X1you = -2.0440,X2you =-2.0440,t = 28,s = 57(此次不为最优解)七、分析实验结果在初始种群为80,迭代次数为100情况下,第一次和第三次运行结果寻得了最优解,而第二次并没寻得最优解,并且第一次和第三次寻得最优解时的迭代次数t和寻得最优解时的种群中个体个数s也不一样。
PID控制是工业过程控制中应用最广的策略之一,因此PID控制器参数的优化成为人们关注的问题,它直接影响控制效果的好坏,并和系统的安全、经济运行有着密不可分的关系。
目前PID参数的优化方法有很多,如间接寻优法、梯度法、爬山法等,而在热工系统中单纯形法专家整定法则应用较广。
虽然这些方法都具有良好的寻优特性,但存在着一些弊端,单纯形法对初值比较敏感,容易陷入局部最优化解,造成寻优失败。
专家整定法则需要太多的经验,不同的目标函数对应不同的经验,而整理知识库则是一项长时间的工程。
因此我们选取了遗传算法来进行参数寻优,该方法是一种不需要任何初始信息并可以寻求全局最优解的、高效的优化组合方法。
采用遗传算法进行PID三个系数的整定,具有以下优点:(1)与单纯形法相比,遗传算法同样具有良好的寻优特性,且克服了单纯形法参数初值的敏感性。
在初始条件选择不当的情况下,遗传算法在不需要给出调节器初始参数的情况下,仍能寻找到合适的参数,使控制目标满足要求。
同时单纯形法难以解决多值函数问题以及在多参数寻优(串级系统)中,容易造成寻优失败或时间过长,而遗传算法的特性决定了它能很好地客服以上问题。
(2)与专家整定相比,它具有操作方便、速度快的优点,不需要复杂的规则,只通过字串进行简单地复制、交叉、变异,便可达到寻优。
避免了专家整定法中前期大量的知识库整理工作及大量的仿真实验。
(3)遗传算法是从许多点开始并行操作,在解空间进行高效启发式搜索,克服了从单点出发的弊端及搜索的盲目性,从而使寻优速度更快,避免了过早陷入局部最优解。
(4)遗传算法不仅适用于单目标寻优,而且也适用于多目标寻优,根据不同的控制系统,针对一个或多个目标,遗传算法均能在规定的范围内寻找到合适参数。
遗传算法作为一种全局优化算法,得到越来越广泛的应用。
近年来,遗传算法在控制上的应用日益增多。
二、基于遗传算法的PID整定原理1、参数的确定及表示首先确定参数范围,该范围一般是由用户给定,然后由精度的要求,对其进行编码。
反馈是一个非常有用的概念。
反馈控制的使用常常带来革命性的结品控制器采用的是引入微分增益的实际PID 控制算法,其传递函数形式果,极大地改善了控制性能。
PID 控制是到目前为止实际使用中最主要的反馈控制形式。
PID 控制是比例积分微分控制的简称。
积分、比例和微分反馈分别基于过去(I )、现在(P )和将来(D )的控制偏差。
在生产过程自动控制的发展历程中,PID 控制是历史最久、生命力最强的基本控制方式。
PID 控制器的传统整定方法,如Ziegler-Nichols (Z-N )法、响应曲线法、临界比例法、继电型自整定法、单纯形法等,或是依赖于对象模型,或是易于陷入局部极小,均存在一定的应用局限性,且难以实现高性能的整定效果,常常超调较大、调整时间较长、误差指标过大等。
近年来,遗传算法作为一种新兴的优化和自学习算法在控制工程中逐渐受到重简单来说,PID 控制器各校正环节的作用是:视,它是一种基于生物进化论的并行搜索算法,搜索空间大,通过设计合1)比例环节:成比例地反映控制系统的偏差信号,偏差一旦产生,适的算法参数和策略能够避免陷入局部最小。
由于其独到的解决问题的能控制器立即产生控制作用,以减小偏差;力,其应用已渗透到控制领域诸多方面(系统辨识和模型降阶、最优控2)积分环节:主要用于消除静差。
积分作用的强弱取决于积分时间制、线性和非线性控制、滑模控制、鲁棒控制、模糊逻辑控制、神经网络控制和自适应控制等)。
3)微分环节:反映偏差信号的变化趋势(变化速率),并能在偏差信号变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系1 PID控制器原理统的动作速度,减少调节时间。
PID 控制是一种负反馈控制。
其反馈控制原理图如图1所示。
2 基于遗传算法的PID参数整定遗传算法是模拟生物在自然环境中的遗传和进化过程而形成的一种自适应全局优化概率搜索算法。
随着火电机组单机容量和参数的不断提高,系统变得日趋复杂,热工过程越来越表现出非线性、慢时变、大迟滞、强耦合性和不确定性,这对热工过程自动控制系统则提出了更高的要求,传统的PID 控制已经无法满足这种要求,必须采用先进的控制策略进行优化控制。
遗传算法实验报告遗传算法实验报告引言:遗传算法是一种模拟生物进化过程的优化算法,通过模拟自然选择、遗传变异和交叉等操作,逐步优化问题的解。
本实验旨在探究遗传算法在解决优化问题中的应用,并通过实验验证其效果。
一、实验背景遗传算法最早由美国科学家约翰·霍兰德于20世纪60年代提出,其灵感来源于达尔文的进化论。
遗传算法通过基因编码、适应度评估、选择、交叉和变异等操作,模拟了进化过程中的遗传和变异,从而找到问题的最优解。
二、实验目的本实验旨在通过遗传算法解决一个经典的优化问题,验证其在解决实际问题中的有效性。
同时,对遗传算法的参数设置和操作过程进行调整和优化,以提高算法的性能。
三、实验步骤1. 问题定义:选择一个经典的优化问题,例如旅行商问题(TSP)或背包问题。
2. 解空间建模:将问题的解表示为染色体,设计基因编码方式。
3. 适应度函数定义:根据问题的特点,设计一个能够评估染色体解的适应度函数。
4. 初始化种群:随机生成一组初始染色体,作为种群。
5. 选择操作:根据适应度函数,选择一部分较优秀的染色体作为父代。
6. 交叉操作:通过交叉操作,生成新的子代染色体。
7. 变异操作:对子代染色体进行变异操作,引入新的基因变异。
8. 适应度评估:计算新的子代染色体的适应度。
9. 父代替换:根据适应度函数,选择一部分较优秀的子代染色体替换掉父代染色体。
10. 终止条件判断:判断是否满足终止条件,若满足则结束算法,否则返回步骤5。
11. 输出结果:输出最优解及其适应度值。
四、实验结果与分析通过实验,我们得到了一组优化问题的最优解,并计算出其适应度值。
通过观察实验结果,我们可以发现遗传算法在解决优化问题中的有效性。
同时,我们还可以通过调整遗传算法的参数和操作过程,进一步提高算法的性能。
五、实验总结通过本次实验,我们深入了解了遗传算法的原理和应用。
遗传算法作为一种优化算法,具有较强的适应性和鲁棒性,在解决实际问题中具有广泛的应用前景。
摘要本文使用的是遗传算法对PID控制器参数的整定,PID控制器是过程控制中应用最为广泛的控制方法,PID控制理论成熟、算法简单、鲁棒性好、可靠性高。
控制器参数的选择决定了控制的稳定性和快速性,关乎系统的可靠性。
因此,PID 控制器参数整定问题是自动控制领域研究的一个重要内容。
实际工业生产过程往往具有非线性、时变性,人工试凑的参数整定方法往往整定不良、性能不佳,对运行工况的适应性很差。
本文基于遗传算法对数字PID控制器进行参数整定,可以提高优化性能,缩短整定时间。
关键词:数字PID控制器;参数整定;遗传算法;二次性能指标1引言PID控制作为比较成熟的控制技术广泛应用于工业生产过程,目前绝大多数底层控制都采用PID控制器。
实际应用中控制器的参数往往采用实验试凑的方法人工整定,该方法往往整定不良、性能不佳,而且对运行工况的适应性很差。
近年来随着计算机技术的广泛应用,人工智能算法PID整定策略发展迅速,如模糊PID、专家PID、神经元网络PID以及遗传算法等。
这些算法能够实现提高优化性能,缩短整定时间,实际应用方便的控制目标。
2PID控制器PID控制器是将偏差的比例(P)、积分(I)、微分(D)通过线性组合构成控制量,对被控对象进行控制的。
模拟PID控制的系统原理图如图1所示。
图1. 模拟PID 控制的系统原理图模拟PID 控制规律为位置式:()()()()01=++tp DI de t u t k e t e t dt T T dt ⎡⎤⎢⎥⎣⎦⎰(1) 当系统采样周期为T 时,对上式离散化处理,可得到离散位置式PID 控制表达式:()()()()()=1--1=++kp i dj e k e k u k k e k k e j T k T ∑(2) 式中=/i p I k k T ,=d p D k k T 。
增量式PID 控制表达式可以表示为:()()()=-1+u k u k u k ∆(3)()()()()()()()()()=--1++-2-1+-2p i d u k k e k e k k e k k e k e k e k ∆(4)3 遗传算法遗传算法(Genetic Algorithm )是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,将达尔文生物进化理论引入参数寻优之中,适应度高的个体越容易被保留,经过若干代数遗传操作,种群各个体的适应度不断提高,直至满足一定的极限条件,获得优化问题最优解。
遗传算法实验报告豆实验报告:遗传算法在问题求解中的应用1. 引言遗传算法是一种模拟自然进化过程的优化算法,适用于解决复杂的优化问题。
在遗传算法中,通过模拟“遗传、变异、选择”等进化过程,逐渐进化出最优解。
本实验旨在通过编写代码,使用遗传算法解决一个优化问题,并对结果进行评估与分析。
2. 实验目标本实验要求使用遗传算法解决一个函数极值求解问题。
具体要求如下:- 目标函数:f(x) = 3x^4 - 4x^3 - 12x^2 + 2x + 6- 变量范围:-10 <= x <= 10- 求解目标:找到使得f(x)取得最大值的x的取值。
3. 实验步骤本次实验采用Python语言编写代码,使用遗传算法进行求解。
具体步骤如下:(1)初始化种群:随机生成一定数量的个体,并将其编码成二进制串表示。
(2)选择操作:通过计算适应度函数值,按照一定的策略选择个体。
这里采用轮盘赌选择策略,适应度越高的个体被选中的概率越大。
(3)交叉操作:随机选择两个个体,按照一定的概率进行交叉操作。
采用单点交叉的方法,将两个个体的某一位进行交换。
(4)变异操作:对选中的个体按照一定的概率进行变异操作。
这里采用单点变异的方法,随机选择一个位点进行变异。
(5)迭代操作:重复上述步骤,直到满足终止条件(迭代次数达到设定值或者达到了较好的适应度值)为止。
4. 实验结果与分析经过运行1000次实验,并进行统计,得到了一组实验结果。
最终,遗传算法找到了一个较好的近似解,f(x)取得最大值时的x的取值为2.976,并且f(x)取得的最大值为102.441。
下面对结果进行详细分析。
4.1. 初始种群影响初始种群的选择对于遗传算法的收敛速度和找到全局最优解的准确性都有一定的影响。
本次实验,我们随机生成了一定数量的个体作为初始种群,经过实验发现,初始种群越大,算法在相同条件下的迭代次数越少,收敛速度越快。
4.2. 参数选择遗传算法中的参数选择也对算法求解效果有一定影响。
遗传算法实验报告遗传算法实验报告引言:遗传算法是一种模拟自然选择和遗传机制的优化算法,它通过模拟基因的变异和交叉来寻找问题的最优解。
本实验旨在通过编写遗传算法程序,探索其在求解优化问题中的应用。
一、实验背景遗传算法最初是为了模拟达尔文的进化论而提出的。
通过模拟自然界中的进化过程,遗传算法可以逐步优化解空间,找到问题的最优解。
遗传算法适用于各种优化问题,如旅行商问题、背包问题等。
二、实验目的本实验旨在通过编写遗传算法程序,研究其在求解优化问题中的效果。
具体目标如下:1. 熟悉遗传算法的基本原理和流程;2. 实现一个简单的遗传算法程序;3. 运用该程序求解一个具体的优化问题。
三、实验步骤1. 确定问题:选择一个具体的优化问题,如旅行商问题;2. 设计编码方式:将问题转化为遗传算法可以处理的编码形式,如二进制编码;3. 初始化种群:随机生成一定数量的个体作为初始种群;4. 评估适应度:根据问题的目标函数,计算每个个体的适应度;5. 选择操作:根据适应度选择优秀的个体作为父代,采用轮盘赌等方法进行选6. 交叉操作:对选出的父代进行交叉操作,生成新的个体;7. 变异操作:对新个体进行变异操作,引入随机性;8. 更新种群:将原种群和新生成的个体合并,更新种群;9. 判断终止条件:判断是否满足终止条件,如达到最大迭代次数或找到最优解;10. 输出结果:输出找到的最优解。
四、实验结果本实验选择旅行商问题作为优化问题进行求解。
旅行商问题是一个经典的组合优化问题,目标是找到一条最短路径,使得旅行商可以依次访问一系列城市并回到起点。
经过多次实验,得到了如下结果:- 初始种群大小为100个个体;- 迭代次数为1000次;- 交叉概率为0.8,变异概率为0.01;- 最优解为路径长度为1000的路径。
五、实验分析通过对遗传算法的实验结果进行分析,可以得出以下结论:1. 遗传算法能够在一定程度上寻找到问题的最优解,但并不能保证一定找到全局最优解;2. 实验中的参数设置对算法的性能有很大影响,不同的参数设置可能导致不同的结果;3. 遗传算法适用于解决各种优化问题,但对于复杂问题可能需要更多的优化和六、实验总结通过本次实验,我们深入了解了遗传算法的原理和应用。
1.定义种群和个体定义种群为S , 种群数N=50, 其中x,y 是染色体中的两个基因组。
2. 算法设计(1)确定编码设计由于原函数的变量取值包含负数,不方便进行编码,所以将原函数的变量进行转换,从[-10 10]转换成[0 20],相应的,函数也要进行变换。
根据要求分辨率为0.0001,即编码范围至少为[0 200000],设编码位数为n+1,则20/(2^(n+1)-1)<=0.0001,所以求得n=18。
因此将变量域[0 20]离散化为二值域[0 2^18-1]即[0 262143],若由a, b 代表随机二值数,则x=20*a/262143, y=20*b/262143。
(2)确定目标函数和适应度函数由于所求目标函数值包含负数,若直接当做适应度函数值,负数无法被选择,会产生一定的不公平现象,故采用下界构造法,将函数值整体上移,使得被选择的机会相对公平。
而且由于变量域进行了变化,故目标函数为sin(10)sin(10)(,)*11010x y f x y x y --=+-- 而适应度函数,还要将负值转化为零(一般采用下界构造法后没有负值)。
(3)产生种群Init 函数实现种群的初始化,函数变量为种群规模N 以及染色体位数length 。
采用随机函数rand 生成随机矩阵,并使用round 函数对产生的随机数进行四舍五入,即进行二值化操作,每一行代表一个个体。
(4)选择复制选择和复制操作是可以决定哪些个体可以进入下一代。
选择的方法通常有轮盘赌选择法、锦标赛选择法、随机遍历选择法等。
由于相对来说轮盘赌选择法编程简单,故本次采用轮盘赌选择法,但是这里采用连续均匀分布的随机函数unifrnd ,可以提高公平性。
根据方程i f i i i sumf f P f ==∑ 1)计算fsum 和Pi2)产生{0,1}的随机数,求s=unifrnd(0,1,1,36)*fsum3) 求fi 和>=s 中最小的个体并选择复制。
基于遗传算法的PID 控制器参数整定报告一、 遗传算法。
遗传算法(GAs )是基于自然界生物进化机制的搜索寻优技术。
用遗传算法来整定PID 参数,可以提高优化性能,对控制系统有良好的控制精度、动态性能和鲁棒性。
一般的,Gas 包括三个基本要素:复制、交叉和突变。
二、PID Optimal-TuningPID 控制:对偏差信号e(t)进行比例、积分和微分运算变换后形成的一种控制规律。
(1)可调参数:比例度δ(P )、 积分时间Ti (I )、微分时间Td (D )。
通常,PID 控制准则可以写成下面传递函数的形式: )1()(s T T s K s G d ip ++= (2) Kp 、Ti 和Td 分别是比例放大率、积分时间常量和微分时间常量。
1) 比例控制(P ):是一种最简单的控制方式。
其控制器的输出与输入误差信号成比例关系。
当仅有比例控制时系统输出存在稳态误差(Steady state error ),比例度减小,稳态误差减小;2) 积分(I )控制:在积分控制中,控制器的输出与输入误差信号的积分成正比关系。
3) 微分(D )控制:在微分控制中,控制器的输出与输入误差信号()()()()⎥⎦⎤⎢⎣⎡++=⎰t e dt d T d e T t e K t u d t i p 01ττ的微分(即误差的变化率)成正比关系。
文中,性能指标是误差平方的时间加权积分,表示为:),,1,0(,02n k dt e t J it k ==⎰ (3)其中n 是非负整数,i t 是积分周期。
此外,其他标准项如超调量、上升时间和稳定时间也被一个合成性能指标选择:))(1(s s r r c t c t c os J ++= (4)s r os t t 、、分别代表超调量、上升时间和稳定时间。
s r c 、c 两个系数有用户定义或决定。
预期的性能指标的最下化可以认为是小的超调量、短的上升时间和稳定时间。
三个PID 参数的编码方式如下:10101011:S 1010100011100111p K i K d Kp K 、i K 和d K 都是八位二进制字符格式。
自适应函数的选择关系到性能指标,如:101)(JJ F F == (5) 实际上,)(J F 可以是任何一个能切实表达F 和J 关系的非线性函数。
遗传操作是模拟生物基因遗传的操作,从优化搜索的角度而言,遗传操作可使问题的解一代一代地优化,并逼近最优解,主要包括三个遗传算子:选择、交叉和变异。
关于他们的具体方法这里不在赘述。
三、 计算机实现作者编程使用的事TURBO C 。
程序包括两个部分:一个是仿真PID 控制系统的闭环阶跃响应;另一个是实施对一代所有成员的遗传算法的仿真,这里遗传算法将一代作为一个整体。
在第一代生物的二进制代码随机产生之后,这个过程重复直至迭代次数达到预选的次数。
步长、PID 参数X 围、性能指标、自适应函数和方法得时间延迟都是从一个文件中读取。
而遗传算法的的参数,诸如世代数、交叉概率、变异概率、选择概率等通过菜单选择。
整个闭环系统仿真的完成可以用四阶龙格库塔法或直接时域计算。
在程序中,复制的实现是通过轮盘赌博法的线性搜索,面积加权于上一代成员的适应值。
交叉发生在每一对复制产生的成员。
交叉操作是将一个随机产生的一个在0到1之间数与交叉概率比较决定是否需要交叉。
如果需要交叉,则在1到47之间随机产生一个交叉位置代码。
变异,对新一代所有成员都随机产生一个0到1之间的数与变异概率比较,然后再决定是否改变代码的一位。
同理,反转也是这样判定和操作的。
另一需要说明的事,两个反转位置代码是在1~48之间随机选择的。
同样,依据随机的预选概率,预选操作是用好的后代取代不好父代。
除了这些基本操作,另一个过程叫做存储也在程序中进行,它是存储老一代适应值高的成为新一代。
程序实现过程列出如下:(1) 将d P K K K 和、i 三个参数编码成二进制字符串;(2) 生成第一代成员编码成字符串;(3) 将字符串解码成三个参数:d P K K K 和、i ;(4) 计算所有的传递函数;(5) 使用四阶龙格库塔仿真闭环系统的阶跃响应;(6) 计算自适应函数;(7) 用轮盘赌博法复制(繁殖)新一代的48位二进制字符串;(8) 交叉,对新一代中每对进行交叉操作,交叉位置随机产生;(9) 变异,依据变异概率对新一代所以成员进行变异操作;(10) 反转,依据反转概率对新一代所以成员进行反转操作;(11) 预选,依据预选概率对新一代所以成员进行反转操作;(12) 存储老一代中自适应值高的使之成为新一代;(13) 重复(3)~(12),迭代直至结果被接受。
在程序中,不同的性能指标可以选择,如误差的平方时间加权的积分。
通过改变性能指标组合或增加一些系数来改变那些不完全满足要求的成员的适应值。
四、数值例子在这里研究者共做了四个数值例子。
使用了ZN 和遗传两种算法,对于遗传算法每个例子分别又使用了三个性能指标函数:)0.1c -where ))(r c 40==s c J ITSE J ISE J (和(、。
(注:由于论文中只是指出了c J 的表达式,其他数据都是取自于其他论文。
所以在后面的数值仿真中,本文只使用自适应函数为c J 来进行实现PID 参数整定。
)Example 2 )]44.01)(3.01/[()(33.02S S e S P S ++=-;研究者的数值结果详见附录参考文献。
本人对文中第二个例子进行了仿真:样本个数为30,采用二进制编码方式,交叉概率:Pc=0.6,变异概率:Pm=0.001,种群大小M=30,终止迭代进化次数G=100。
得到最佳样本Bests=[1011100011 0110111111 1101101101];最终PID 参数整定为Ki=15.5816;Ki=0.9912;Kd=0.7136。
图1为系统阶跃响应,图2为目标函数J 的优化过程。
五、结论通过对仿真结果的对比,发现GA 得到的结果总是好于ZN 。
GA 成功的降低了不希望的超调量并且达到较少的上升和稳定时间。
可以有效的解释作者提出的工作指标效果更好,在例1和例2中得到了充分的体现。
图1 带延迟的二阶系统的阶跃响应图2 目标函数J的优化过程MATLAB主程序:%基于GA(Generic Algorithm)算法的PID参数整定clear all;close all;global rin yout timefG=100;%迭代次数Size=30;%种群大小CodeL=10;%编码长度/3MinX(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);E=round(rand(Size,3*CodeL)); %初始化编码BsJ=0;for kg=1:1:Gtime(kg)=kg;for s=1:1:Size %译码m=E(s,:);y1=0;y2=0;y3=0;m1=m(1:1:CodeL);for i=1:1:CodeLy1=y1+m1(i)*2^(i-1);endKpid(s,1)=(MaxX(1)-MinX(1))*y1/1023+MinX(1);m2=m(CodeL+1:1:2*CodeL);for i=1:1:CodeLy2=y2+m2(i)*2^(i-1);endKpid(s,2)=(MaxX(2)-MinX(2))*y2/1023+MinX(2);m3=m(2*CodeL+1:1:3*CodeL);for i=1:1:CodeLy3=y3+m3(i)*2^(i-1);endKpid(s,3)=(MaxX(3)-MinX(3))*y3/1023+MinX(3);%****** 第一步1 : 评估个体BestJ(个体编码)****** Kpidi=Kpid(s,:);[Kpidi,BsJ]=pidzd(Kpidi,BsJ); %调用M文件BsJi(s)=BsJ;end[OderJi,IndexJi]=sort(BsJi);BestJ(kg)=OderJi(1);BJ=BestJ(kg);Ji=BsJi+1e-10;fi=1./Ji;[Oderfi,Indexfi]=sort(fi);Bestfi=Oderfi(Size);BestS=Kpid(Indexfi(Size),:);Bestfi=Oderfi(Size);BestS=E(Indexfi(Size),:);kgBJBestS;%****** 第二步: 选择和复制操作n****** fi_sum=sum(fi);fi_Size=(Oderfi/fi_sum)*Size;fi_S=floor(fi_Size);kk=1;for i=1:1:Sizefor j=1:1:fi_S(i)TempE(kk,:)=E(Indexfi(i),:);kk=kk+1;endend%************ 第三步:交叉操作************ pc=0.60;n=ceil(20*rand);for i=1:2:(Size-1)temp=rand;if pc>temp %交叉条件for j=n:1:20TempE(i,j)=E(i+1,j);TempE(i+1,j)=E(i,j);endendendTempE(Size,:)=BestS;E=TempE;%************ 第四步: 变异操作************** pm=0.001-[1:1:Size]*(0.001)/Size;for i=1:1:Sizefor j=1:1:3*CodeLtemp=rand;if pm>temp %变异条件if TempE(i,j)==0TempE(i,j)=1;elseTempE(i,j)=0;endendendendTempE(Size,:)=BestS;E=TempE;%******************************************************* endBestfi %最大适应值BestS %最佳个体编码Kpidi %参数整定结果Best_J=BestJ(G)%迭代最后种群规模figure(1);plot(time,BestJ);%种群规模随时间的变化xlabel('Times');ylabel('Best_J');figure(2);plot(timef,rin,'r',timef,yout,'b');xlabel('Time(s)');ylabel('rin,yout');%单位阶跃响应子程序:function [Kpidi,BsJ]=pidzd(Kpidi,BsJ)global rin yout timefts=0.001;%采样时间sys=tf(12.5,[1,2.58,12.5]);dsys=c2d(sys,ts,'z');[num,den]=tfdata(dsys,'v');rin=1.0; %输入的信号u_1=0.0;u_2=0.0;y_1=0.0;y_2=0.0;x=[0,0,0]';B=0;error_1=0;tu=1;s=0;P=1000;for k=1:1:Ptimef(k)=k*ts;r(k)=rin;u(k)=Kpidi(1)*x(1)+Kpidi(2)*x(2)+Kpidi(3)*x(3); %控制规律if u(k)>=10u(k)=10;endif u(k)<=-10u(k)=-10;endyout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2; %差分方程形式error(k)=r(k)-yout(k); %控制方案%------------ 返回PID参数-------------u_2=u_1;u_1=u(k);y_2=y_1;y_1=yout(k);x(1)=error(k); % 计算Px(2)=(error(k)-error_1)/ts; % 计算D 微分x(3)=x(3)+error(k)*ts; % 计算I 积分error_2=error_1;error_1=error(k);if s==0if yout(k)>0.95&yout(k)<1.05tu=timef(k);s=1;endendendfor i=1:1:PJi(i)=0.999*abs(error(i))+0.01*u(i)^2*0.1;B=B+Ji(i);if i>1erry(i)=yout(i)-yout(i-1);if erry(i)<0B=B+100*abs(erry(i));endendendBsJ=B+0.2*tu*10;plot(time,BestJ);%种群规模随时间的变化xlabel('Times');ylabel('Best_J');figure(2);plot(timef,rin,'r',timef,yout,'b');xlabel('Time(s)');ylabel('rin,yout');%单位阶跃响应。