matlab遗传算法pid大作业
MATLAB遗传算法PID大作业

遗传算法在调节控制系统参数中的应用【摘要】自动化控制系统多采用PID 控制器来调节系统稳定性和动态性,PID 的Kp,Ki,Kd 参数需要合理选择方能达到目标。
遗传算法是一种模拟生物进化寻求最优解的有效算法,本文通过利用GAbx 工具箱实现对控制电机的PID 进行参数优化,利用matlab 的仿真功能可以观察控制效果。
1. 直流伺服电机模型 1.1物理模型图1 直流伺服电机的物理模型αu ---电枢输入电压(V ) a R ---电枢电阻(Ω) S L ---电枢电感(H ) q u ---感应电动势(V ) g T ---电机电磁转矩(N m ⋅) J---转动惯量(2m kg ⋅)B---粘性阻尼系数(s m N ⋅⋅) g i ---流过电枢的电流(A ) θ---电机输出的转角(rad )1.2传递函数利用基尔霍夫定律和牛顿第二定律得出电机基本方程并进行拉布拉斯变换)()()()()()()()()()()(2s s K s U K s I s T s Bs s Js s T s I s L R s I s U s U e q t a g g a a a a q a θθθ⋅=⋅=⋅+⋅=⋅+⋅=-式中:t K 为电机的转动常数(m N ⋅)A ;e K 为感应电动势常数(s V ⋅)radaa R s L +1S1 BJs +1i KC K)(s U a)(s U q)(s I a )(s T g)(s Ω)(s θ图2 直流伺服电机模型方框图消去中间变量得系统的开环传递函数:sK K B Js R s L K s U s s G C t a d ta ]))([()()()(+++==θ系统参数如下:s m uN B m mg J ⋅⋅=⋅=51.3,23.32A m N K K uH L R e t a a )(03.0,75.2,4⋅===Ω=2. PID 校正图3 PID 校正s K sK K s G d ip c ++=)( Kp,Ki,Kd 为比例,积分,微分系数 令Kp=15、Ki=0.8 、Kd=0.6M 文件:J=3.23E-6;B=3.51E-6; Ra=4;La=2.75E-6; Kt=0.03; num= Kt;den=[(J*La) ((J*Ra)+(La*B)) ((B*Ra)+Kt*Kt) 0]; t=0:0.001:0.2; step(num,den,t); Kp=15; Ki=0.8; Kd=0.6;numcf=[Kd Kp Ki]; dencf=[1 0];numf=conv(numcf,num); denf=conv(dencf,den);[numc,denc]=cloop(numf,denf); t=0:0.001:0.04; step(numc,denc,t);matlab 进行仿真,我们可以看出不恰当的PID 参数并不能使系统达到控制系统的要求,因此需要对PID参数进行优化。
用遗传算法实现PID参数整定

控制理论与应用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 控制无需知道被控对象的数学模型,算法简单,鲁棒性好且可靠性高,因此成为一种获得广泛应用的控制策略。
基于遗传算法的PID控制器参数优化

基于遗传算法的PID控制器参数优化基于遗传算法的PID控制器参数优化是一种智能化调节方法,通过遗传算法的优化过程,可以自动得到最佳的PID参数组合,并实现对控制系统的自动调节。
以下将详细介绍基于遗传算法的PID控制器参数优化的原理、步骤和应用情况。
一、基于遗传算法的PID控制器参数优化原理遗传算法是一种模拟自然选择和遗传的数学模型,通过模拟生物进化的过程,利用优胜劣汰的原则逐步优化求解问题。
在PID控制器参数优化中,可以将PID参数看作个体(染色体),通过遗传算法的选择、交叉和变异等操作,不断优化个体的适应度,最终得到最佳的PID参数组合。
二、基于遗传算法的PID控制器参数优化步骤(1)初始化种群:随机生成一组PID参数作为初始种群,设置种群大小和迭代次数。
(2)适应度函数定义:根据所需控制效果,定义适应度函数来评估每个个体的优劣程度。
(3)选择操作:根据适应度函数的值选择优秀的个体,采用轮盘赌等选择策略,将优秀的个体复制并加入下一代种群中。
(4)交叉操作:从选择的个体中,选取两个个体进行交叉操作,通过交叉操作生成新的个体,并加入下一代种群中。
(5)变异操作:对下一代种群中的一些个体进行变异操作,改变其染色体的一些位,以保持种群的多样性。
(6)重复上述步骤:迭代执行选择、交叉和变异操作,直到达到预定的迭代次数或找到满意的PID参数组合。
(7)输出最佳解:最终输出具有最佳适应度的PID参数组合,作为优化后的参数。
三、基于遗传算法的PID控制器参数优化应用情况(1)机械控制系统:如电机驱动、自动化装配线等,通过优化PID 参数可以提高系统的控制精度和动态性能。
(2)能源系统:如电力系统、风力发电等,通过优化PID参数可以实现能源的高效利用和稳定运行。
(3)化工过程控制:如温度控制、压力控制等,通过优化PID参数可以提高产品质量和生产效率。
(4)交通管理系统:如城市交通信号控制、车辆行驶控制等,通过优化PID参数可以实现交通流畅和事故减少。
Matlab遗传算法及实例

Matlab遗传算法及实例Matlab遗传算法工具箱函数及实例讲解转:最近硏究了一下遗传算法,因为要用遗传算法来求解多元非线性模型。
还好用遗传算法的工具箱予以实现了,期间也遇到了许多问题。
借此与大家分享一下。
首先,我们要熟悉遗传算法的基本原理与运算流程。
基本原理:遗传算法是一种典型的启发式算法,属于非数值算法范畴。
它是模拟达尔文的自然选择学说和自然界的生物进化过程的一种计算模型。
它是采用简单的编码技术来表示各种复杂的结构,并通过对一组编码表示进行简单的遗传操作和优胜劣汰的自然选择来指导学习和确定搜索的方向。
遗传算法的操作对象是一群二进制串(称为染色体、个体),即种群,每一个染色体都对应问题的一个解。
从初始种群出发,采用基于适应度函数的选择策略在当前种群中选择个体,使用杂交和变异来产生下一代种群。
如此模仿生命的进化进行不断演化,直到满足期望的终止条件。
运算流程:Step 1 :对遗传算法的运行参数进行赋值。
参数包括种群规模、变量个数、交叉概率、变异概率以及遗传运算的终止进化代数。
Step 2 :建立区域描述器。
根据轨道交通与常规公交运营协调模型的求解变量的约束条件,设置变量的取值范围。
Step 3 :在Step 2的变量取值范围内,随机产生初始群体,代入适应度函数计算其适应度值。
Step 4 :执行比例选择算子进行选择操作。
Step 5 :按交叉概率对交叉算子执行交叉操作。
Step 6 :按变异概率执行离散变异操作。
Step 7 :计算Step 6得到局部最优解中每个个体的适应值,并执行最优个体保存策略。
Step 8 :判断是否满足遗传运算的终止进化代数,不满足则返回Step 4,满足则输出运算结果其次,运用遗传算法工具箱。
运用基于Matlab的遗传算法工具箱非常方便,遗传算法工具箱里包括了我们需要的各种函数库。
目前,基于Matlab的遗传算法工具箱也很多,比较流行的有英国设菲尔德大学幵发的遗传算法工具箱GATBXGAOT以及Math Works公司推出的GADS实际上,GAD鉞是大家所看到的Matlab中自带的工具箱。
基于遗传算的PID参数优化及MATLAB实现

引言PID操纵器结构简单且鲁棒性强,在操纵领域一直被普遍应用。
运算机的进展为在线辩识提供了条件,从而也为在线整定PID参数提供了可能。
PID操纵是工业进程中应用最普遍的策略之一,因此PID 操纵器参数的优化成为人们关注的问题,它直接阻碍操纵成效的好坏,并和系统的平安、经济运行有着密不可分的关系。
目前PID参数的优化方式很多,如:间接寻优法,梯度法,登山法等,而在热工系统中单纯形法、专家整定法那么应用普遍。
尽管二者都具有良好的寻优特性,但却存在一些短处,单纯刑法对初值比较灵敏,容易陷入局部最优解,造成寻优失败。
专家整定法那么需要太多体会,不同的目标函数对应不同的体会,而整理知识库是一项长时刻的工程。
因此咱们选取遗传算法来进行参数寻优,该方式是一种不需要任何初始信息并能够寻求全局最优解的高效的优化组合方式。
第一章:遗传算法和PID操纵原理简介一遗传算法简介大体原理遗传算法是依照生物进化的模型提出的一种优化算法。
遗传算法是从代表问题可能潜在解集的一个群组(popuation)开始的,而一个种群那么由通过基因(gene)编码(coding)的必然数量的个体(individual)组成。
每一个个体事实上是染色体(chromosome)带有特点的实体。
染色体作为遗传物质的要紧载体,即多个基因组合,其内部表现(即基因型)是某种基因组合,它决定了个体的形状的外部表现。
因此,在一开始需要实现从表现型到基因型的映射即编码工作。
由于仿照基因编码的工作很复杂,咱们往往进行简化,如二进制编码。
初代种群产生以后,依照适者生存和优胜劣汰的原理,逐代(genetation)演化产生出愈来愈好的近似解。
在每一代,依照问题域中个体的适应度(fitness)大小挑选(selection)个体,并借助于自然遗传学的遗传算子(genetic operator)进行组合交叉.(crossover)和变异(mutation),产生出代表新的解集的种群。
遗传算法的pid控制器的设计本科毕业设计(论文)

13—16周
17—18周
应完成的
内容
调研
收集资料
掌握遗传算法的基本理论
确定总体方案
模型确立
方案分析
算法研究
软件设计及调试
设计总结
撰写论文
设计方法,它以误差积分型性能指标为目标函数,以设计参数的取值范围为约束条件建立了优化数学模型。之后,在Matlab环境下,将遗传算法同Simulink:仿真技术有机融合来求解该优化模型,数值实验表明:本方法简单直观,通用性强,所设计的PID性能优异,十分适合于工程应用。
2.文管类();3.外语类();4.艺术类()。
题目类型
1.毕业设计(√)2.论文()
题目来源
科研课题()生产实际()自选题目(√)
主
要
内
容
遗传算法是一种有效的搜索算法,用于复杂问题的优化可以达到良好的控制效果。
内容:1、学习遗传算法的基本原理,
2、设计完整的优化控制方案,
3、算法研究,
4、应用研究,5、仿真研究。
关键词:遗传算法;PID控制器;参数优化;仿真
Abstract
This paper puts forwarda new method of designing the parameters of PID controller.Adopting error integral criterion as the objective function along with the constraints described by the minimal gainand phase margin and the parameterranges,we get the mathematical model for optimization.A genetic algorithm developed under Matlab environment is well combined with Simulink techniques to solve the optimization problem.The numerical experiment shows that though the method is simple and perspicuous,it gives PID of high performance.Thus it is a very suitable method for designing PID in engineering application.
matlab模拟中央空调pid遗传算法

一、引言中央空调系统在现代建筑中扮演着至关重要的角色,对空调系统的控制效率和性能要求也越来越高。
PID控制器作为一种经典的控制算法,被广泛应用于中央空调系统中。
而遗传算法作为一种全局搜索和优化的方法,具有一定的优势和应用前景。
MATLAB作为一个功能强大的模拟工具,提供了丰富的工具箱和函数,可以用于模拟和优化中央空调系统的PID控制器参数。
二、MATLAB模拟中央空调PID控制器1. 使用MATLAB进行中央空调系统建模在MATLAB环境中,可以利用Simulink工具箱进行中央空调系统的建模。
建立空调系统的传递函数模型,包括室内外温度传感器、风机、制冷剂循环等部件,以及控制器的输入输出。
这一步可以帮助工程师理解系统的动态特性,并为下一步的控制器设计做准备。
2. 设计PID控制器在MATLAB中,可以利用Control System Toolbox设计PID控制器。
根据已建立的系统模型,利用PID Tuner或者手动调节的方式,得到合适的比例、积分和微分系数,使得系统能够快速、稳定地响应温度变化。
3. 仿真系统响应利用Simulink工具箱对设计的PID控制器进行仿真,观察系统的响应特性。
可以通过改变温度变化输入信号,观察系统的温度响应、控制器输出等参数,并评估PID控制器性能的优劣。
三、遗传算法在PID参数优化中的应用1. 遗传算法原理及优化遗传算法是一种模拟生物进化过程的优化方法,其基本思想是通过种群的选择、交叉和变异等操作,实现对问题的全局搜索和优化。
在PID参数优化中,可以利用遗传算法搜索合适的控制器参数,使得系统的性能指标达到最优。
2. MATLAB中的遗传算法工具MATLAB提供了遗传算法工具箱,可以方便地使用遗传算法对问题进行优化。
用户可以自定义适应度函数、遗传算子等参数,也可以选择内置的优化函数进行快速优化。
3. 将遗传算法与PID控制器相结合通过将遗传算法与PID控制器相结合,可以实现对PID参数的优化。
终MATLAB遗传算法程序

%Main主函数clear allclose allglobal fuzzpid youtSize=100;Gmax=20;Ps=0.95;Pc=0.95;Pm=0.5;CodeL=49*3;a=newfis('fuzzpid');a=addvar(a,'input','e',[-6,6]);a=addmf(a,'input',1,'NB','gausmf',[0.8493,-6]);a=addmf(a,'input',1,'NM','gaussmf',[0.8493,-4]); a=addmf(a,'input',1,'NS','gaussmf',[0.8493,-2]); a=addmf(a,'input',1,'Z','gaussmf', [0.8493,0]);a=addmf(a,'input',1,'PS','gaussmf',[0.8493,2]);a=addmf(a,'input',1,'PM','gaussmf',[0.8493,4]); a=addmf(a,'input',1,'PB','gaussmf',[0.8493,6]);a=addvar(a,'input','ec',[-6,6]);a=addmf(a,'input',2,'NB','gaussmf',[0.8493,-6]); a=addmf(a,'input',2,'NM','gaussmf',[0.8493,-4]); a=addmf(a,'input',2,'NS','gaussmf',[0.8493,-2]); a=addmf(a,'input',2,'Z','gaussmf', [0.8493,0]);a=addmf(a,'input',2,'PS','gaussmf',[0.8493,2]);a=addmf(a,'input',2,'PM','gaussmf',[0.8493,4]); a=addmf(a,'input',2,'PB','gaussmf',[0.8493,6]);a=addvar(a,'output','Kp',[-6,6]);a=addmf(a,'output',1,'NB','gaussmf',[0.8493,-6]); a=addmf(a,'output',1,'NM','gaussmf',[0.8493,-4]); a=addmf(a,'output',1,'NS','gaussmf',[0.8493,-2]); a=addmf(a,'output',1,'Z','gaussmf', [0.8493,0]);a=addmf(a,'output',1,'PS','gaussmf',[0.8493,2]); a=addmf(a,'output',1,'PM','gaussmf',[0.8493,4]); a=addmf(a,'output',1,'PB','gaussmf',[0.8493,6]); a=addvar(a,'output','Ki',[-6,6]);a=addmf(a,'output',2,'NB','gaussmf',[0.8493,-6]); a=addmf(a,'output',2,'NM','gaussmf',[0.8493,-4]); a=addmf(a,'output',2,'NS','gaussmf',[0.8493,-2]); a=addmf(a,'output',2,'Z','gaussmf', [0.8493,0]);a=addmf(a,'output',2,'PS','gaussmf',[0.8493,2]); a=addmf(a,'output',2,'PM','gaussmf',[0.8493,4]); a=addmf(a,'output',2,'PB','gaussmf',[0.8493,6]); a=addvar(a,'output','Kd',[-6,6]);a=addmf(a,'output',3,'NB','gaussmf',[0.8493,-6]); a=addmf(a,'output',3,'NM','gaussmf',[0.8493,-4]);a=addmf(a,'output',3,'NS','gausmf',[0.8493,-2]);a=addmf(a,'output',3,'Z','gaussmf', [0.8493,0]);a=addmf(a,'output',3,'PS','gaussmf',[0.8493,2]);a=addmf(a,'output',3,'PM','gaussmf',[0.8493,4]);a=addmf(a,'output',3,'PB','gaussmf',[0.8493,6]);E=ceil(rand(Size,CodeL)*7);E(Size,:)=[7 1 5 7 1 3 6 2 1 6 2 1 5 3 1 4 4 2 4 4 5 7 1 5 7 1 3 6 2 1 5 3 2 5 3 2 4 4 3 3 4 46 1 4 6 2 3 6 3 2 4 4 3 3 5 3 3 5 4 6 2 4 6 2 3 5 3 3 4 4 3 3 5 3 2 6 3 2 6 4 5 2 4 53 4 4 4 4 3 5 4 3 5 4 2 6 4 2 7 4 5 4 7 4 4 5 3 5 5 2 5 5 2 6 5 2 7 5 1 7 7 4 4 7 4 46 2 5 6 2 6 6 2 6 5 17 5 1 7 7];for kg=1:Gmaxfor s=1:SizeEs=E(s,:);fi(s)=fi_cal(Es,a);if s==Size & kg==Gmaxendend[fi_val,fi_ind]=max(fi);Bestfi(kg)=fi_val;BestS=E(fi_ind,:);E1=select_ga(E,Size,fi,Ps);E1=cross_ga(E1,Size,Pc,CodeL);E1=mutat_ga(E1,Size,Pm,CodeL);E=E1;E(Size,:)=BestS;kgendfi_cal(BestS,a);figure(1)plot(Bestfi)set(gcf,'Color',[1 1 1])xlabel('遗传代数')ylabel('适应度')figure(2)plot(yout(:,1),yout(:,2))set(gcf,'Color',[1 1 1])xlabel('times')ylabel('加速度')title('最优情况输出')figure(3)bar([1:CodeL],BestS)set(gcf,'Color',[1 1 1])xlabel('序号')ylabel('输出')%cross_ga 交叉子函数function E1=cross_ga(E,Size,Pc,CodeL)if Pc>randfor i=1:2:Size-1suiji1=ceil(rand(1,2)*(CodeL-2))+1;while suiji1(1)==suiji1(2)suiji1=ceil(rand(1,2)*(CodeL-2))+1;endjc1=min(suiji1);jc2=max(suiji1);E1(i,:)=[E(i,1:jc1-1) E(i+1,jc1:jc2) E(i,jc2+1:CodeL)];E1(i+1,:)=[E(i+1,1:jc1-1) E(i,jc1:jc2) E(i+1,jc2+1:CodeL)]; elseE1=E;end%fi_cal 适应度子函数function fi=fi_cal(x,a)global fuzzpid yout_data yout biaozhidyl=reshape(repmat([1:7],7,1),49,1);del=reshape(repmat([1:7],1,7),49,1);ds_wl=reshape(x,3,49)';dl_ql=ones(49,2);rulelist=[dyl del ds_wl dl_ql];a=addrule(a,rulelist);a=setfis(a,'DefuzzMethod','centroid');writefis(a,'fuzzpid');fuzzpid=readfis('fuzzpid');sim('mohupid')yout_data(end,2);if biaozhi(end)==0fi=1/sqrt(yout_data(end,2)/yout_data(end,1));elsefi= 0;end%mutat_ga变异子函数function E1=mutat_ga(E,Size,Pm,CodeL)for i=1:Sizeif Pm>randsuiji1=ceil(rand(1,2)*(CodeL-2))+1;while suiji1(1)==suiji1(2)suiji1=ceil(rand(1,2)*(CodeL-2))+1;endjc1=min(suiji1);jc2=max(suiji1);E1(i,:)=[E(i,1:jc1-1) E(i,jc2:-1:jc1) E(i,jc2+1:CodeL)];elseE1(i,:)=E(i,:);endend%select_ga选择子函数Function E1=select_ga(E,Size,fi,Ps)fi_sum=sum(fi);fi_gl=fi/fi_sum;mz=1;j=1;E1=E;if Ps>randfor i=1:Sizeif fi_gl>randE1(j,:)=E(i,:);j=j+1;endendend。
大作业 基于matlab的PID控制算法仿真 深圳大学

大作业基于matlab的PID控制算法仿真深圳大学大作业-基于matlab的pid控制算法仿真-深圳大学基于MATLAB的PID控制算法仿真要求:(1)利用MATLAB仿真工具Simulink制作了两种数字PID控制器算法(位置式和增量式)进行仿真(2)受控对象为一阶惯性连杆D(s)=1/(5S+1)(3)采样周期T=1s(4)仿真结果:确定pid相关参数,使得系统的输出能够很快的跟随给定数值变化,给出示例,输入和输出波形,程序列表和必要的分析。
首先,d(s)=1/(5s+1)Simulink模型建立如下:准备工作:(1)双击步骤并将sampletime设置为1,以满足采样周期T=1s的要求(2)选择的模拟时间为500图中\为积分器,\为微分器,\为比例系数。
\为积分时间常数,\为积分时间常数。
当P控制器的参数调整时,微分器和积分器的输出与系统断开。
在smulink中,断开微分器和积分器之间的输出连接。
同样,在设置PI控制器的参数时,断开微分器的输出连接。
第一步是先获取开环系统的单位阶跃响应,在simulink中,把反馈连线、微分器、积分器的输出连线都断开,并将’kp’的值置为1,连线如下图(下载)后,图片可调节变大)模拟完成后,双击“范围”得到下图将kp的值置为2,并连上反馈连线,得下图:上图显示了P控制下系统的单步响应。
接下来对pi控制整定,比例放大系数仍为kp=2,经多次输入ti的值,发现ti=2,即1/ti=0.5时,系统的输出最理想,如下图(下载后,图片可以调整和放大)选定仿真时间,仿真运行,运行元毕后.双击\得到以下结果当响应曲线有一定的超调量,系统响应因积分时间过长而不能稳定时,应缩短积分时间。
相反,如果过冲过大,则应增加积分时间,最后Ti=2最后,连上微分器,经多次输入调试,td的值置为2时,系统能最快地趋向稳定。
如下图双击范围以获取:(下载后,图片可调节变大)从以上三幅图可以看出,PI和PID控制的响应速度基本相同,系统的稳定输出值也相同。
遗传算法在PID控制中的应用

遗传算法在PID控制中的应用随着现代工业的发展,自动控制系统在生产过程中扮演着至关重要的角色。
PID(比例-积分-微分)控制是一种常用的自动控制算法,它通过不断调整控制器的参数,使得系统的输出能够准确地跟踪给定的参考值。
然而,在某些复杂的非线性系统中,传统的PID控制方法往往无法获得令人满意的性能。
为了解决这一问题,研究人员引入了遗传算法作为PID控制器参数优化的工具。
遗传算法是一种模拟生物进化过程的优化算法,通过模拟自然选择、交叉和变异等过程,寻找控制器参数的最优解。
遗传算法的应用步骤如下:首先,设定控制器参数的初始种群。
然后,根据设定的适应度函数,对每个个体进行评估和排序。
接下来,通过选择、交叉和变异运算,产生新一代的个体。
最后,重复上述步骤,直到满足停止准则。
相比于传统的试错法,遗传算法具有以下优势。
首先,遗传算法能够在大范围的参数空间中搜索最优解,从而更好地适应非线性系统的复杂性。
其次,遗传算法能够避免陷入局部最优解的问题,提高了全局搜索的能力。
此外,遗传算法还能够通过自适应机制,自动调整参数的交叉和变异概率,提高了搜索的效率。
然而,遗传算法在PID控制中的应用也存在一些挑战和限制。
首先,由于遗传算法的搜索过程需要大量的计算资源,因此在实时性要求高的控制系统中应用相对困难。
其次,遗传算法需要根据具体的系统特点设计适应度函数和参数范围,这需要一定的经验和专业知识。
总的来说,遗传算法在PID控制中的应用为解决复杂非线性系统的控制问题提供了一种有效的方法。
通过优化控制器参数,遗传算法能够提高系统的响应速度、稳定性和鲁棒性。
然而,为了更好地应用遗传算法,研究人员还需要进一步研究和探索,以解决其在实时性和参数选择上的限制。
车间作业调度问题遗传算法Matlab源码

newfarm{i+1}=b;
end
%新旧种群合并
FARM=[farm,newfarm];
%第四步:选择复制
FITNESS=zeros(1,2*N);
else
cp=unidrnd(n-1);%随机选择交叉点
a=[A(:,1:cp),B(:,(cp+1):n)];%双亲双子单点交叉
b=[B(:,1:cp),A(:,(cp+1):n)];
end
%--------------------------------------------------------------------------
% 输入参数列表
% M 遗传进化迭代次数
% N 种群规模(取偶数)
% Pm 变异概率
% T m×n的矩阵,存储m个款式n个工组的加工时间
pos=find(fitness==minfitness);
Xp=farm{pos(1)};
%第五步:变异
for i=1:N
if Pm>rand;%变异概率为Pm
X=farm{i};
I=unidrnd(m);
Ser=randperm(2*N);
for i=1:N
f1=FITNESS(Ser(2*i-1));
f2=FITNESS(Ser(2*i));
if f1<=f2
farm{i}=FARM{Ser(2*i-1)};
fitness=zeros(1,N);
plotif=0;
for i=1:(2*N)
X=FARM{i};
MATLAB中的遗传算法及其应用示例

MATLAB中的遗传算法及其应用示例引言:遗传算法是一种基于自然进化规律的优化方法,适用于求解复杂的问题。
作为MATLAB的重要工具之一,遗传算法在各个领域的优化问题中被广泛应用。
本文将介绍MATLAB中的遗传算法的原理及其应用示例。
一、遗传算法的原理遗传算法(Genetic Algorithm, GA)是一种基于进化的搜索算法,源于对达尔文进化论的模拟。
它模拟了自然界中生物个体基因遗传和自然选择的过程,通过优胜劣汰和进化操作寻找问题的最优解。
遗传算法的基本步骤包括:初始化种群、适应度评估、选择、交叉、变异和进化终止准则。
在初始化阶段,种群中的个体由一组基因表示,基因可以是二进制、实数或其他形式。
适应度评估阶段根据问题的特定要求对每个个体进行评估。
选择操作通过适应度大小选择出较优的个体,形成下一代种群。
交叉操作模拟自然界中的基因交换过程,将不同个体的基因进行组合。
变异操作引入新的基因,增加种群的多样性。
经过多次迭代后,算法会逐渐收敛,并得到一个近似的最优解。
二、遗传算法的应用示例:函数优化遗传算法在函数优化问题中有广泛应用。
以一个简单的函数优化问题为例,假设我们要求解以下函数的最小值:f(x) = x^2 + 5sin(x)首先,我们需要定义适应度函数,即f(x)在给定范围内的取值。
接下来,我们需要设置参数,例如种群数量、交叉概率和变异概率等。
然后,我们可以利用MATLAB中的遗传算法工具箱,通过以下步骤实现函数的最小化求解:1. 初始化种群:随机生成一组个体,每个个体表示参数x的一个取值。
2. 适应度评估:计算每个个体在函数中的取值,得到适应度。
3. 选择:根据适应度大小选择优秀的个体。
4. 交叉:随机选择两个个体进行基因交叉。
5. 变异:对个体的基因进行变异操作,引入新的基因。
6. 迭代:重复步骤2至步骤5,直到达到迭代终止条件。
通过上述步骤,我们可以较快地找到给定函数的最小值。
在MATLAB中,我们可以使用遗传算法工具箱的相关函数来实现遗传算法的迭代过程,如'ga'函数。
大作业-基于matlab的PID控制算法仿真-深圳大学

基于matlab的PID控制算法仿真要求:(1)用Matlab的仿真工具Simulink分别做出数字PID控制器的两种算法(位置式和增量式)进行仿真(2)被控对象为一阶惯性环节D(s) = 1 / (5s+1)(3)采样周期T = 1 s(4)仿真结果:确定PID相关参数,使得系统的输出能够很快的跟随给定值的变化,给出例证,输入输出波形,程序清单及必要的分析。
首先,D(s) = 1 / (5s+1)建立Simulink模型如下:准备工作:(1)双击step,将sample time设置为1以符合采样周期T = 1 s 的要求(2)选定仿真时间为500图中" Integrator" 为积分器,"Derivative" 为微分器, "Kp" 为比例系数。
"T i"为积分时间常数, " Td" 为积分时间常数。
进行P控制器参数整定时,微分器和积分器的输出与系统断开,在Smulink中,吧微分器与积分器的输出连线断开即可。
同理,进行PI控制器参数整定的时候,断开微分器的输出连线即可。
第一步是先获取开环系统的单位阶跃响应,在Simulink中,把反馈连线、微分器、积分器的输出连线都断开,并将’Kp’的值置为1,连线如下图(下载后,图片可调节变大)仿真运行完毕,双击“scope”得到下图将Kp的值置为2,并连上反馈连线,得下图:上图即为P控制时系统的单仲阶跃响应。
接下来对PI控制整定,比例放大系数仍为Kp=2,经多次输入Ti的值,发现Ti=2,即1/Ti=0.5时,系统的输出最理想,如下图(下载后,图片可调节变大)选定仿真时间,仿真运行,运行元毕后. 双击" Scope " 得到以下结果当响应曲线有一定超调量,当由于积分时间太长导致系统响应无法平稳的时候,应该减小积分的时间。
反之如果超调量过大,则应该增大积分时间,最后选定Ti=2.最后,连上微分器,经多次输入调试,Td的值置为2时,系统能最快地趋向稳定。
基于MATLAB遗传算法工具箱的PID参数优化研究

termFN 是终止函数, 一般由 maxGenTerm 或 optMaxGenTerm 两个函数
来判断是否 满足终止条件, 默认值为 maxGenTerm; termOps 通常是进
化代数 , 默认为 100; select FN 是选择函数 , 工具箱 中提供了 三种选择 函数 : roul ett e.m(轮盘赌 法), 这 个比较 常用 , normGeomSelect .m(基于归
startPop,opts,termFN,t ermOps,selectFN,sel ectOps,xOverFNs,xOverOps,
mut FNs,mutOps)
输出参数:
x 是运行中最好的个体, 最后一列为对应适应 度值; endPop 为最
终解; bPop 为 最好染色体的轨 迹; traceInfo 为每一 代的最好 个体和平
一化的优先 选择法) ,tournSel ect.m(竞 争选择法); selectOps 是给选择函
数的参 数表, 一般为 变异概率 , 默认为[0.08]; xOverFNs 是交 叉函数名
称表, 以空格分开, 如[’simpleXover arithXover heuri sticXover’], 二进制 与 浮 点 数 格 式 的 单点 交 叉 函 数 为 simpleXover, 算 术 交 叉函 数 为
ga.m 提供了遗传算法工具箱与外部的接口, 它通过调用适应度函数文
件与实际问题建立关联。 利用 GAOT 的一般步骤是先初始化参数, 然后确定或编制适应度
函数文件, 再设置主文件 ga.m 的若干参数运行即可。 ga.m 的基本调用方法为:
funct ion [x,endPop,bPop,traceInfo] =ga (bounds,evalFN,evalOps,
基于遗传算法的PID参数整定的MATLAB程序代码

基于遗传算法的PID参数整定1引言传统的比例、积分、微分控制,即PID控制具有算法简单、鲁棒性好和可靠性高等优点,已经被广泛用于工业生产过程。
但工程实际中,PID控制器的比例、积分和微分调节参数往往采用实验加试凑的方法由人工整定。
这不仅需要熟练的技巧,往往还相当费时。
更为重要的是,当被控对象特性发生变化,需要控制器参数作相应调整时,PID控制器没有自适应能力,只能依靠人工重新整定参数,由于经验缺乏,整定结果往往达不到最优值,难以满足实际控制的要求。
考虑生产过程的连续性以及参数整定费事费力,这种整定实际很难进行。
所以,人们从工业生产实际需要出发,基于常规PID控制器的基本原理,对其进行了各种各样的改进。
近年来许多学者提出了基于各种智能算法的PID整定策略,比如模糊PID、神经元网络PID等等。
然而,这些先进算法都要求对被控对象有很多的先验知识,在实际应用中往往难于做到。
随着计算技术的发展,遗传算法有了很大的发展。
将遗传算法用于控制器参数整定,已成为遗传算法的重要应用之一。
本文介绍基于遗传算法的PID参数整定设计方法。
这是一种寻求全局最优的控制器优化方法,且无需对目标函数微分,可提高参数优化效果,简化计算过程。
仿真实例表明该方法与其他传统寻优方法相比,在优化效果上具有一定的优势。
2遗传算法简介2.1 遗传算法的基本原理遗传算法是John H.Holland根据生物进化的模型提出的一种优化算法。
自然选择学说是进化论的中心内容。
根据进化论,生物的发展进化主要有三个原因:即遗传、变异和选择。
遗传算法基于自然选择和基因遗传学原理的搜索方法,将“优胜劣汰,适者生存”的生物进化原理引入待优化参数形成的编码串群体中,按照一定的适应度函数及一系列遗传操作对各个体进行筛选,从而使适应度高的个体被保留下来,组成新的群体;新群体包含上一代的大量信息,并且引入了新的优于上一代的个体。
这样周而复始,群体中各个体适应度不断提高,直至满足一定的极限条件。
遗传算法优化的matlab案例

遗传算法(Genetic Algorithm,GA)是一种模拟生物进化过程的搜索和优化算法,通过模拟生物的遗传、交叉和变异操作来寻找问题的最优解。
它以一种迭代的方式生成和改进解决方案,并通过评估每个解决方案的适应度来选择下一代解决方案。
在Matlab中,遗传算法优化工具箱提供了方便的函数和工具,可以帮助用户快速开发和实现遗传算法优化问题。
下面,我们以一个简单的最优化问题为例,演示在Matlab中如何使用遗传算法优化工具箱进行优化。
假设我们要优化一个简单的函数f(x),其中x是一个实数。
我们的目标是找到使得f(x)取得最小值的x值。
具体来说,我们将优化以下函数: f(x) = x² - 4x + 4首先,我们在Matlab中定义目标函数f(x)的句柄(用于计算函数值)和约束条件(如果有的话)。
代码如下:function y = testfunction(x)y = x^2 - 4*x + 4;end接下来,我们需要使用遗传算法优化工具箱的函数ga来进行优化。
我们需要指定目标函数的句柄、变量的取值范围和约束条件(如果有的话),以及其他一些可选参数。
以下是一个示例代码:options = gaoptimset('Display', 'iter'); % 设置显示迭代过程lb = -10; % 变量下界ub = 10; % 变量上界[x, fval] = ga(@testfunction, 1, [], [], [], [], lb, ub, [], options);在上面的代码中,gaoptimset函数用于设置遗传算法的参数。
在这里,我们使用了可选参数'Display',它的值设置为'iter',表示显示迭代过程。
变量lb和ub分别指定了变量的取值范围,我们在这里将其设置为-10到10之间的任意实数。
横线[]表示没有约束条件。
控制仿真实验报告

实验名称:基于MATLAB/Simulink的PID控制器参数优化仿真实验日期:2023年11月10日实验人员:[姓名]实验指导教师:[指导教师姓名]一、实验目的1. 理解PID控制器的原理及其在控制系统中的应用。
2. 学习如何使用MATLAB/Simulink进行控制系统仿真。
3. 掌握PID控制器参数优化方法,提高控制系统的性能。
4. 分析不同参数设置对系统性能的影响。
二、实验原理PID控制器是一种广泛应用于控制领域的线性控制器,它通过将比例(P)、积分(I)和微分(D)三种控制作用相结合,实现对系统输出的调节。
PID控制器参数优化是提高控制系统性能的关键。
三、实验内容1. 建立控制系统模型。
2. 设置PID控制器参数。
3. 进行仿真实验,分析系统性能。
4. 优化PID控制器参数,提高系统性能。
四、实验步骤1. 建立控制系统模型使用MATLAB/Simulink建立被控对象的传递函数模型,例如:```G(s) = 1 / (s^2 + 2s + 5)```2. 设置PID控制器参数在Simulink中添加PID控制器模块,并设置初始参数,例如:```Kp = 1Ki = 0Kd = 0```3. 进行仿真实验设置仿真时间、初始条件等参数,运行仿真实验,观察系统输出曲线。
4. 分析系统性能分析系统在给定参数下的响应性能,包括超调量、调节时间、稳态误差等指标。
5. 优化PID控制器参数根据分析结果,调整PID控制器参数,优化系统性能。
可以使用以下方法:- 试凑法:根据经验调整参数,观察系统性能变化。
- Ziegler-Nichols方法:根据系统阶跃响应,确定参数初始值。
- 遗传算法:使用遗传算法优化PID控制器参数。
6. 重复步骤3-5,直至系统性能满足要求五、实验结果与分析1. 初始参数设置初始参数设置如下:```Kp = 1Ki = 0Kd = 0```仿真结果如图1所示:从图1可以看出,系统存在较大的超调量和较长的调节时间,稳态误差较大。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
遗传算法在调节控制系统参数中的应用【摘要】自动化控制系统多采用PID 控制器来调节系统稳定性和动态性,PID 的Kp,Ki,Kd 参数需要合理选择方能达到目标。
遗传算法是一种模拟生物进化寻求最优解的有效算法,本文通过利用GAbx 工具箱实现对控制电机的PID 进行参数优化,利用matlab 的仿真功能可以观察控制效果。
1. 直流伺服电机模型 1.1物理模型图1 直流伺服电机的物理模型αu ---电枢输入电压(V ) a R ---电枢电阻(Ω) S L ---电枢电感(H ) q u ---感应电动势(V ) g T ---电机电磁转矩(N m ⋅) J---转动惯量(2m kg ⋅)B---粘性阻尼系数(s m N ⋅⋅) g i ---流过电枢的电流(A ) θ---电机输出的转角(rad )1.2传递函数利用基尔霍夫定律和牛顿第二定律得出电机基本方程并进行拉布拉斯变换)()()()()()()()()()()(2s s K s U K s I s T s Bs s Js s T s I s L R s I s U s U e q t a g g a a a a q a θθθ⋅=⋅=⋅+⋅=⋅+⋅=-式中:t K 为电机的转动常数(m N ⋅)A ;e K 为感应电动势常数(s V ⋅)radaa R s L +1S1 BJs +1i KC K)(s U a)(s U q)(s I a )(s T g)(s Ω)(s θ图2 直流伺服电机模型方框图消去中间变量得系统的开环传递函数:sK K B Js R s L K s U s s G C t a d ta ]))([()()()(+++==θ系统参数如下:s m uN B m mg J ⋅⋅=⋅=51.3,23.32A m N K K uH L R e t a a )(03.0,75.2,4⋅===Ω=2. PID 校正图3 PID 校正s K sK K s G d ip c ++=)( Kp,Ki,Kd 为比例,积分,微分系数 令Kp=15、Ki=0.8 、Kd=0.6M 文件:J=3.23E-6;B=3.51E-6; Ra=4;La=2.75E-6; Kt=0.03; num= Kt;den=[(J*La) ((J*Ra)+(La*B)) ((B*Ra)+Kt*Kt) 0]; t=0:0.001:0.2; step(num,den,t); Kp=15; Ki=0.8; Kd=0.6;numcf=[Kd Kp Ki]; dencf=[1 0];numf=conv(numcf,num); denf=conv(dencf,den);[numc,denc]=cloop(numf,denf); t=0:0.001:0.04; step(numc,denc,t);matlab 进行仿真,我们可以看出不恰当的PID 参数并不能使系统达到控制系统的要求,因此需要对PID参数进行优化。
图4 系统阶跃响应(Kp=15,Ki=0.8,Kd=0.6)3.遗传算法3.1 遗传算法和工具箱简介遗传算法(GA)是基于自然选择和基因遗传学原理的优化搜索方法。
它借鉴了达尔文的进化论和孟德尔的遗传学说。
其本质上是一种高效、并行、全局搜索的方法,它能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地控制搜索过程以求得最优解。
遗传算法操作使用适者生存的原则,在潜在的解决方案种群中逐次产生一个近似最优的方案。
在遗传算法的每一代中,根据个体在问题域中的适应度值和从自然遗传学中借鉴来的再造方法进行个体选择,产生一个新的近似解。
在这个过程导致种群中个体的进化,得到的新个体比原个体更能适应环境,就像自然界中的改造一样。
表3.1遗传学和遗传算法中基本用语对照表遗传学遗传算法染色体(Chromosome) 解的编码(算法的操作对象)基因(Gene)解中每一分量等位基因(Allele)特性值基因座(Locus)二进制串中位置基因型(Genptype)结构表现型(Phenotype)参数集、候选解个体(Individual)解适者生存在算法停止时,最优目标值的解有最大可能被留住适应性(Fitness)适应度函数值群体(Population)选定的一组解复制(Reproduction)根据适应度函数值选取的一组解交配(Crossover)通过交配产生一组新解的过程变异(Mutation)编码的某一个分量发生变化的过程英国谢菲尔德大学开发的遗传算法工具箱把参数,选择,交叉,变异等过程封装成函数进行操作,其基本搜索过程不变。
表3.2 遗传算法工具箱常用函数创建种群crtbase 创建基向量crtbp 创建任意离散随即种群crtrp 创建实值初始种群(bs2rv)适应度计算ranking 常用的基于秩的适应度计算scaling 比率适应度计算选择函数reins一致随机和基于适应度的重插入rws 轮盘选择select高级选择例程sus 随机遍历采样变异算子mut 离散变异mutate高级变异函数mutbga 实值变异交叉算子recdis 离散重组recint 中间重组reclin 线性重组recmut 具有变异特征的线性重组recombine高级重组算子xovdp 两点交叉算子xovdprs 减少代理的两点交叉xovmp 通常多点交叉xovsh 洗牌交叉xovshrs 减少代理的洗牌交叉xovsp 单点交叉xovsprs 减少代理的单点交叉子种群的支持migrate 在子种群间交换个体实用函数bs2rv 二进制串到实值的转换rep 矩阵的复制3.2 利用遗传算法优化过程1)根据遗传算法优缺点这里选择遗传代数为100,种群大小为30,变量维数为3其中10≤Kp≤20,0≤Ki≤1,0≤Kd≤1,要求精度0.0001所以二进制串编码长度为17故Kp 精度为(20-10)/(-1) Ki,Kd精度为(1-0)/(-1),代沟为0.9,交叉概率为0.6,变异概率为0.01。
2)适应度函数的设计PID 优化设计的目的是使系统某些性能指标最优,然而,单纯的误差性能指标很难同时满足系统对快速性、稳定性和鲁棒性的要求,因此在适应度函数中引入超调量、上升时间和累计绝对误差指标项。
设σ=(|y p -y ref |/y ref )×100%为系统的超调量,y p 和y ref 分别为输出峰值和输入参考值;t *r 为上升时间,将其定义为输出从0第1次达到0.95yref 的时间;e k =y k -y ref 为采样时刻k 的输出误差;w j (j=1,2,3)为权重系数。
则多目标适应度函数为:∑=++=nk k r e w t w w f 13*21σ (5)通过对权重系数的调整,可以改变系统对快速性和稳定性的要求。
如系统要求较小的超调,可以适当增大w 1;若系统要求快速的动态响应,则可以适当增大w 2。
计算机控制是一种采样控制,它只能根据采样时刻的偏差值计算控制量。
因此连续PID 控制算法不能直接使用,需要采用离散化方法。
在计算机PID 控制中,使用的是数字PID 控制器。
图3.2 增量式PID 控制系统增量式PID 控制是数字控制器的输出只是控制器的增量△u(k)。
当执行机构需要的是控制量的增量时,应采用增量式PID 控制,采样时刻点kT (T 为采样周期)代表连续时间t 。
做如下近似变换来离散化:()()00()()(1)k tj t kT e t Te j de t e k e k dtT =⎧⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎩=≈--≈∑⎰ 可得离散的PID 表达式:1(1)(2)(1)(1)()k p i dj e k e k u k k e k k e j T k T==----=-++∑增量式PID 控制算法:()2(1)(2)()(()(1))()e k e k e k u k kp e k e k kie k T kdT--+-∆=--++增量式PID 控制算法不需多次累加,控制增量△u(k)仅与最近3次得采样有关,所以误动作时的影响相对较小图3.3 基于GA 算法参数调整的PID 控制系统采样时间取1ms ,为获取满意的过渡过程动态特性,采用误差绝对值时间积分性能指标作为参数选择的目标函数。
为防止控制量过大,在目标函数中加入控制输入的平方项。
选用下式作为参数选取的最优指标20(0.999|()|0.001())2uJ e t u t dt t ∞=++⎰()e t 为系统偏差,()u t 为PID 控制器输出,u t为上升时间。
为避免超调了,采用惩罚功能,一旦产生超调,将超调量作为最优指标的一项,此时最优指标为20()0(0.999|()|0.001()100|()|)2uif e t J e t u t e t dt t ∞<=+++⎰J 值越小,对应的PID 参数越优良。
但是,由于GA 算法用于求解最大值问题,所以需要对J 做一个简单变形,从而得到算法的适应度函数:1f J =3)依据遗传算法的步骤编写程序并仿真图3.4 BestKpKiKd优化值时的阶跃响应图3.5 J随进化代数的变化曲线图3.6 优化得到BestKpKiKd及此时的LeastJ4.程序代码1.GA.m文件%GA(Generic Algorithm) Program to optimize Parameters of PIDclcclear all;close all; %清除命令,变量,关闭窗口global rin yout timef %输入,输出,离散时间%******Initialization******%MAXGEN=100; %遗传代数NIND=30; %种群大小NVAR=3; %变量维数PRECI=17; %变量精度GGAP=0.9; %代沟(Generation gap)Pc=0.6; %交叉概率Pm=0.01; %变异概率FieldD=[PRECI,PRECI,PRECI;10,0,0;20,1,1; 1,1,1;0,0,0;1,1,1;1,1,1]; %区域描述器Chrom=crtbp(NIND,NVAR*PRECI); %初始种群for i=1:1:MAXGENgen(i)=i; %遗传代数%****** Step 1 : Evaluate LeastJ ******KpKiKdlsj=bs2rv(Chrom,FieldD); %各代种群由二进制串转化为实值for j=1:1:NINDJ=0;KpKiKd=KpKiKdlsj(j,:);[KpKiKd,J]=pidf(KpKiKd,J); %计算本代种群中各个个体的目标函数值Lsj(j,1)=J;end[OderLsj,IndexLsj]=sort(Lsj); %本代种群中各个个体的目标函数值升序排列genlstj(i)=OderLsj(1); %升序排列中第一个最小,为本代最优BestKpKiKd=KpKiKdlsj(IndexLsj(1),:);%BestKpKiKdLsj=Lsj+1e-10; %Avoiding deviding zero 1*10^(-10)Msj=1./Lsj; %设置适应度函数[OderMsj,IndexMsj]=sort(Msj); %Arranging fi small to bigger适应度值升序排列genmost=OderMsj(NIND) ; % Let Bestfi=max(fi)升序中最后一个最大,为本代最优moststring=Chrom(IndexMsj(NIND),:); %本代中对应最优的PID参数%****** Step 2 : Select and Reproduct Operation******FitnV = ranking(Lsj); %分配适应度值(Assign fitness values)SelCh=select('sus',Chrom,FitnV,GGAP); %选择%************ Step 3 : Crossover Operation ************SelCh=recombin('xovsp', SelCh,Pc); %交叉%************ Step 4: Mutation Operation **************SelCh=mut(SelCh,Pm); %变异SelCh(NIND,:)=moststring; %保证交叉后的新种群Temp2包含原种群中的最优个体%*************Step 5:Reinsert Operation***************ObjV=FitnV;KpKiKdlsj=bs2rv(SelCh,FieldD); %计算ObjVSelfor j=1:1:NINDJ=0;KpKiKd=KpKiKdlsj(j,:);[KpKiKd,J]=pidf(KpKiKd,J);Lsj(j,1)=J;endLsj=Lsj+1e-10;Msj=1./Lsj;ObjVSel=Msj;[Chrom ObjV] = reins(Chrom, SelCh, 1, 1, ObjV,ObjVSel); %重插入endLeastJ=genlstj(MAXGEN) %最优目标函数值(性能指标)BestKpKiKd %最优PID参数(实值)figure(1);plot(gen,genlstj);xlabel('gen(s)');ylabel('genlstj');figure(2);plot(timef,rin,'r',timef,yout,'b');xlabel('Time(s)');ylabel('rin,yout');2.pidf.m函数文件function [KpKiKd,J]=pidf(KpKiKd,J)global rin yout timeftz=0.001;sys=tf(0.03,[8.8825e-12,1.2920e-05,9.1404e-04,0]);zsys=c2d(sys,tz,'z');[num,den]=tfdata(zsys,'v');rin=1.0;u_1=0.0;u_2=0.0;u_3=0.0;y_1=0.0;y_2=0.0;y_3=0.0;K=[0,0,0]';error_1=0;Tup=1;m=0;final=100;for t=1:1:finaltimef(t)=t*tz;r(t)=rin;u(t)=KpKiKd(1)*K(1)+KpKiKd(2)*K(2)+KpKiKd(3)*K(3);if u(t)>=10u(t)=10;endif u(t)<=-10u(t)=-10;endyout(t)=-den(2)*y_1-den(3)*y_2-den(4)*y_3+num(2)*u_1+num(3)*u_2+num(4)*u_3; error(t)=r(t)-yout(t);%------------ Return of PID parameters -------------u_3=u_2;u_2=u_1;u_1=u(t);y_3=y_2;y_2=y_1;y_1=yout(t);K(1)=error(t); % Calculating PK(2)=(error(t)-error_1)/tz; % Calculating DK(3)=K(3)+error(t)*tz; % Calculating Ierror_1=error(t);if m==0if yout(t)>0.95&yout(t)<1.05Tup=timef(t);m=1;endendendfor t=1:1:finalJ=J+0.999*abs(error(t))+0.001*u(t)^2; if t>1erry(t)=yout(t)-yout(t-1);if erry(t)<0J=J+100*abs(erry(t));endendendJ=J+2*Tup;。