MATLAB遗传算法PID大作业
- 格式:doc
- 大小:1.20 MB
- 文档页数:13
计算机控制技术实验报告题目PID控制算法的MATLAB仿真研究班级姓名学号一、 目的和要求1. 目的(1) 通过本课程设计进一步巩固PID 算法基本理论及数字控制器实现的认识和掌握,归纳和总结PID 控制算法在实际运用中的一些特性。
(2) 熟悉MATLAB 语言及其在控制系统设计中的应用,提高学生设计控制系统程序的能力。
2. 要求通过查阅资料,了解PID 算法的研究现状和研究领域,充分理解设计内容,对PID 算法的基本原理与运用进行归纳和总结,并独立完成设计实验和总结报告。
二、 基本内容及步骤1. 任务的提出采用纯滞后的一阶惯性环节作为系统的被控对象模型,传递函数为()1d sf Ke G s T sτ-=+,其中各参数分别为:, 630f T =,60d τ=。
对PID 控制算法的仿真研究可从以下四个方面展开。
(1) PID 控制器调节参数的整定。
PID 参数的整定对控制系统能否得到较好的控制效果是至关重要的,PID 参数的整定方法有很多种,可采用理论整定法(如ZN 法)或者实验确定法(如扩充临界比例度法、试凑法等),也可采用模糊自适应参数整定、遗传算法参数整定等新型的PID 参数整定方法。
选择某种方法对参数整定后,在MATLAB 上对系统进行数字仿真,绘制系统的阶跃响应曲线,从动态特性的性能指标评价系统控制效果的优劣。
(2)改变对象模型参数,通过仿真实验讨论PID 控制参数在被控对象模型失配情况下的控制效果。
由于在实际生产过程的控制中,用模型表示被控对象时往往存在一定误差,且参数也不可能是固定不变的。
在已确定控制器最优PID 调节参数下,仿真验证对象模型的三个参数()中某一个参数变化(不超过原值的±5%)时,系统出现模型失配时控制效果改变的现象并分析原因。
(3)执行机构非线性对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参数进行优化。
MATLAB实验遗传算法与优化设计遗传算法与优化设计一实验目的1 了解遗传算法的基本原理和基本操作选择交叉变异2 学习使用Matlab中的遗传算法工具箱 gatool 来解决优化设计问题二实验原理及遗传算法工具箱介绍1 一个优化设计例子图1所示是用于传输微波信号的微带线电极的横截面结构示意图上下两根黑条分别代表上电极和下电极一般下电极接地上电极接输入信号电极之间是介质如空气陶瓷等微带电极的结构参数如图所示Wt分别是上电极的宽度和厚度D是上下电极间距当微波信号在微带线中传输时由于趋肤效应微带线中的电流集中在电极的表面会产生较大的欧姆损耗根据微带传输线理论高频工作状态下假定信号频率1GHz电极的欧姆损耗可以写成简单起见不考虑电极厚度造成电极宽度的增加图1 微带线横截面结构以及场分布示意图1其中为金属的表面电阻率为电阻率可见电极的结构参数影响着电极损耗通过合理设计这些参数可以使电极的欧姆损耗做到最小这就是所谓的最优化问题或者称为规划设计问题此处设计变量有3个WDt它们组成决策向量[W D t] T待优化函数称为目标函数上述优化设计问题可以抽象为数学描述2其中是决策向量x1xn为n个设计变量这是一个单目标的数学规划问题在一组针对决策变量的约束条件下使目标函数最小化有时也可能是最大化此时在目标函数前添个负号即可满足约束条件的解X 称为可行解所有满足条件的X组成问题的可行解空间2 遗传算法基本原理和基本操作遗传算法 Genetic Algorithm GA 是一种非常实用高效鲁棒性强的优化技术广泛应用于工程技术的各个领域如函数优化机器学习图像处理生产调度等遗传算法是模拟生物在自然环境中的遗传和进化过程而形成的一种自适应全局优化算法按照达尔文的进化论生物在进化过程中物竞天择对自然环境适应度高的物种被保留下来适应度差的物种而被淘汰物种通过遗传将这些好的性状复制给下一代同时也通过种间的交配交叉和变异不断产生新的物种以适应环境的变化从总体水平上看生物在进化过程中子代总要比其父代优良因此生物的进化过程其实就是一个不断产生优良物种的过程这和优化设计问题具有惊人的相似性从而使得生物的遗传和进化能够被用于实际的优化设计问题按照生物学知识遗传信息基因Gene 的载体是染色体Chromosome 染色体中一定数量的基因按照一定的规律排列即编码遗传基因在染色体中的排列位置称为基因座Locus在同一个基因座上所有可能的基因就称为等位基因Allele生物所持有的基因以及基因的构成形式称为生物的基因型Genotype而该生物在环境中所呈现的相应性状称为该生物的表现型Phenotype在遗传过程中染色体上的基因能够直接复制给子代从而使得子代具有亲代的特征此外两条染色体之间也通过交叉 Crossover 而重组即两个染色体在某个相同的位置处被截断其前后两串基因交叉组合而形成两个新的染色体在基因复制时也会产生微小的变异Mutation从而也产生了新的染色体因此交叉和变异是产生新物种的主要途径由于自然选择在子代群体新产生的物种或染色体当中只有那些对环境适应度高的才能生存下来即适应度越高的被选择的概率也越大然后又是通过遗传和变异再自然选择一代一代不断进化因此生物遗传和进化的基本过程就是选择即复制交叉和变异遗传算法就是通过模拟生物进化的这几个基本过程而实现的①编码编码是设计遗传算法首要解决的问题在生物进化中选择交叉变异这些基本过程都是基于遗传信息的编码方式进行的即基于染色体的基因型而非表现型因此要模拟生物进化过程遗传算法必须首先对问题的可行解X决策向量进行某种编码以便借鉴生物学中染色体和基因等概念在遗传算法中将每一个决策向量X用一个染色体V来表示3其中每一个vi代表一个基因染色体的长度m不一定等于设计变量的数目n取决于染色体上基因的编码方式一般有两种编码方式二进制编码和浮点数编码如果是二进制编码每一个设计变量xi的真实值用一串二进制符号0和1按照一定的编码规则来表示每个二进制符号就代表一个基因因此染色体长度要远大于设计变量的数目这种由二进制编码构成的排列形式V就是染色体也称个体的基因型而基因型经过解码后所对应的决策向量X即可行解就是个体的表现型如果是浮点数编码每个设计变量用其取值范围内的一个浮点数表示构成染色体的一个基因vi因此个体的编码长度m也就等于决策变量的个数n由于这种编码方式使用的是决策变量的真实值所以也称真值编码方法无论哪种编码方式所有可能的染色体个体V构成问题的搜索空间种群遗传算法对最优解的搜索就是在搜索空间中搜索适应度最高的染色体后面叙述适应度的计算因此通过编码将一个问题的可行解从其解空间转换到了遗传算法能够处理的搜索空间经过个体的编码后就可以进行遗传算法的基本操作选择交叉和变异②选择复制操作选择也就是复制是在群体中选择适应度高的个体产生新群体的过程生物的进化是以集团为主体的与此相应遗传算法的运算对象是有M个个体或染色体组成的集合称为种群M也称为种群规模遗传算法在模拟自然选择时以个体的适应度Fitness高低为选择依据即适应度高的个体被遗传到下一代种群的概率较高而适应度低的个体遗传到下一代的概率则相对较低个体适应度由适应度函数计算适应度函数总是和个体表现型 ie X 的目标函数值f X 关联一般是由目标函数经过一定的变换得到一种最简单的方法就是直接使用目标函数f X 作为适应度函数4选定了适应度函数之后个体适应度也随之确定则在选择操作时个体被选中的概率5其中Fi为个体的适应度这种选择方式称为比例选择也称轮盘赌选择除此之外还有多种选择方法如随机竞争选择均匀选择无回放随机选择等不一一介绍③交叉操作所谓交叉就是以一定的概率交叉概率从群体中选择两个个体染色体按照某种方式交换其部分基因从而形成两个新的个体在遗传算法中它是产生新个体同时也是获得新的优良个体的主要方法它决定了遗传算法的全局搜索能力对于不同的编码方式交叉操作的具体方法也不相同对于浮点数编码一般使用算术交叉对于二进制编码有单点交叉和多点交叉等方式不论何种方式在交叉操作时首先应定义交叉概率Pc这个概率表明种群中参与交叉的个体数目的期望值是M 是种群规模通常交叉概率应取较大的值以便产生较多的新个体增加全局搜索力度但是Pc过大时优良个体被破坏的可能性也越大如果Pc 太小则搜索进程变慢影响算法的运行效率一般建议的取值范围是04–099④变异操作遗传算法中的变异操作就是将染色体上某些基因座上的基因以一定的变异概率Pm用其他的等位基因替代从而形成新的个体对于浮点数编码变异操作就是将变异点处的基因用该基因取值范围内的一个随机数替换对于二进制编码则是将变异点处的基因由1变成00变成1变异操作也有多种方法如均匀变异非均匀变异高斯变异等变异操作的概率Pm要比交叉操作的概率Pc小得多变异只是产生新个体的辅助手段但它是遗传算法必不可少的一个环节因为变异操作决定了算法的局部搜索能力它弥补了交叉操作无法对搜索空间的细节进行局部搜索的不足因此交叉和变异操作相互配合共同完成对搜索空间的全局和局部搜索以上简要介绍了遗传算法的基本原理和操作归纳起来基本遗传算法一般可以表示为一个8元组6式中C 个体的编码方法E 个体适应度评价函数P0 初始种群M 种群规模选择操作交叉操作变异操作是进化终止代数进化终止条件其中有4个运行参数需要预先设定M T PcPm 种群规模M一般取为20100 终止代数T一般取100500交叉概率Pc一般取04099 变异概率Pm一般取0000101最后给出遗传算法的基本步骤①选择二进制编码或浮点数编码把问题的解表示成染色体②随机产生一群染色体个体也就是初始种群③计算每一个个体的适应度值按适者生存的原则从中选择出适应度较大的染色体进行复制再通过交叉变异过程产生更适应环境的新一代染色体群即子代④重复第3步经过这样的一代一代地进化最后就会收敛到最适应环境适应度最大的一个染色体即个体上它就是问题的最优解图2给出了基本遗传算法设计流程图其中t代表当前代数T是进化终止代数图2 基本遗传算法设计流程图3 Matlab遗传算法工具箱 gatoolMatlab的遗传算法工具箱有一个精心设计的图形用户界面可以帮助用户直观方便快速地利用遗传算法求解最优化问题在Matlab命令窗口输入命令gatool可以打开遗传算法工具箱的图形用户界面如图3所示GA工具箱的参数设置步骤如下图3 遗传算法工具1 首先使用遗传算法工具箱必须输入下列信息Fitness function 适应度函数这里指的是待优化的函数也即目标函数该工具箱总是试图寻找目标函数的最小值输入适应度函数的格式为fitnessfun其中符号产生函数fitnessfun的句柄fitnessfun代表用户编写的计算适应度函数目标函数的M文件名该M文件的编写方法如下假定我们要计算Rastrigin函数的最小值7M函数文件确定这个函数必须接受一个长度为2的行向量X也即决策向量向量的长度等于变量数目行向量X的每个元素分别和变量x1和x2对应另外M文件要返回一个标量Z其值等于该函数的值下面是计算Rastrigin函数的M文件代码function Z Ras_fun XZ 20X 1 2X 2 2-10 cos 2piX 1 cos 2piX 2M文件编写保存后再在gatool工具箱界面Fitness function栏输入 Ras_funNumber of variable 变量个数目标函数中的变量数目也即适应度函数输入向量的长度在上例中它的值是22 其次设置遗传算法参数即Options设置以下只介绍部分运行参数的设置其他未提及的参数采用默认设置即可①种群参数 PopulationPopulation size 种群规模每一代中的个体数目一般是20-100之间种群规模大算法搜索更彻底可以增加算法搜索全局最优而非局部最优的概率但是耗时也更长Initial range 初始范围其值是两行的矩阵代表初始种群中个体的搜索范围实际上是决策向量X中每个变量xi的初始搜索范围矩阵的列数等于变量个数Number of variable第一行是每个变量的下限第二行是每个变量的上限如果只输入2 1的矩阵则每个变量的初始搜索范围都一样注意初始范围仅限定初始种群中个体或决策向量的范围后续各代中的个体可以不在初始范围之内初始范围不能设置太小否则造成个体之间的差异过小即种群的多样性降低不利于算法搜索到最优解②复制参数 ReproductionCrossover fraction 交叉概率一般取04099默认08③算法终止准则 Stopping Criteria提供了5种算法终止条件Generations最大的进化代数一般取100500默认是100当遗传算法运行到该参数指定的世代计算终止Time limit指明算法终止执行前的最大时间单位是秒缺省是Inf 无穷大Fitness limit 适应度限当最优适应度值小于或等于此参数值时计算终止缺省是-InfStall generation 停滞代数如果每一代的最佳适应度值在该参数指定的代数没有改善则终止计算缺省是50代Stall time 停滞时间如果每一代的最佳适应度值在该参数指定的时间间隔内没有改善则终止计算缺省是20秒3 设置绘图参数即Plots设置绘图参数Plots工作时可以从遗传算法得到图形数据当选择各种绘图参数并执行遗传算法时一个图形窗口在分离轴上显示这些图形下面介绍其中2个参数Best fitness 选择该绘图参数时将绘制每一代的最佳适应度值和进化世代数之间的关系图如图4的上图所示图中蓝色点代表每一代适应度函数的平均值黑色点代表每一代的最佳值Distance 选择此参数时绘制每一代中个体间的平均距离它反映个体之间的差异程度所以可用来衡量种群的多样性图4的下图显示的即是每一代个体间的平均距离图44 执行算法参数设置好了之后点击工具箱界面上的按钮Star 执行求解器在算法运行的同时Current generation当前代数文本框中显示当前的进化代数通过单击Pause按钮可以使计算暂停之后再点击Resume可以恢复计算当计算完成时Status and results窗格中出现如图5所示的情形图5其中包含下列信息算法终止时适应度函数的最终值即目标函数的最优值Fitness function value 0003909079476983379算法终止原因Optimization terminated imum number of generations exceeded 超出最大进化世代数最终点即目标函数的最优解[x1 x2] [-0004 -000193]两个变量的例子三实验内容1 Rastrigin函数的最小值问题函数表达式如 7 式函数图像如下图6所示它有多个局部极小值但是只有一个全局最小值Rastrigin函数的全局最小值的精确解是0出现在[x1 x2] [0 0]处图6 Rastrigin函数图像使用遗传算法工具箱近似求解Rastrigin函数的最小值首先编写计算适应度函数的M文件然后设置运行参数绘图参数Plots勾选Best fitness和Distance两项其它参数可以使用默认值执行求解器Run solver计算Rastrigin函数的最优值观察种群多样性对优化结果的影响决定遗传算法的一个重要性能是种群的多样性个体之间的距离越大则多样性越高反之则多样性越低多样性过高或过低遗传算法都可能运行不好通过实验调整Population 种群的Initial range 初始范围参数可得到种群适当的多样性取Initial range参数值[1 11]观察Rastrigin函数最小值的计算结果取Initial range参数值[1 100]观察Rastrigin函数最小值的计算结果取Initial range参数值[1 2]观察Rastrigin函数最小值的计算结果2 微带电极欧姆损耗的优化微带电极的欧姆损耗公式可由 1 式表示令设计变量[WDt] [x1 x2 x3] X变量的约束条件如下8根据 1 式和 8 式使用遗产算法工具箱优化设计电极的结构参数W 宽度 D 间距 t 厚度使得电极的欧姆损耗最小 1 式中用到的常数提示对约束条件 8 式的处理可以在编写计算适应度函数的M文件中实现方法是在M文件中引入对每个输入变量值范围的判断语句如果任一变量范围超出 8 式的限制则给该个体的适应度施加一个惩罚使得该个体被遗传到下一代的概率减小甚至为0一般可用下式对个体适应度进行调整9其中F x 是原适应度F x 是调整后的适应度P x 是罚函数为简单计本问题中我们可以给个体的适应度 com件的返回值Z 加上一个很大的数即可如正无穷Inf四思考题1 在遗传算法当中个体的变异对结果有何影响如果没有变异结果又将如何试以Rastrigin函数最小值的计算为例说明取变异概率为0即交叉概率Crossover fraction 102 遗传算法工具箱针对的是最小化函数值问题如果要利用该工具箱计算函数的最大值该如何实现。
基于遗传算法的PID控制器参数优化遗传算法是一种模拟生物进化过程的智能算法,适用于解决优化问题。
在PID控制器设计中,参数的选择对控制系统的性能和稳定性有很大影响。
使用遗传算法对PID控制器参数进行优化,能够自动找到最优参数组合,提高系统的控制性能。
PID控制器由比例(P)、积分(I)、微分(D)三个部分组成,其输出是通过对误差的线性组合得到的。
参数的选择直接影响控制器的稳定性、动态响应和抗干扰能力。
传统的方法通常是通过试错法进行参数整定,这种方法的缺点是效率低、调试过程繁琐且容易出错。
遗传算法是一种模拟自然界进化过程的智能优化算法,其中每个个体代表一组可能的参数,通过适应度函数来衡量个体的适应度,并选择适应度较高的个体进行遗传和变异操作,最终找到适应度最优的个体。
将遗传算法应用于PID控制器参数优化的步骤如下:1.确定优化目标:通过设置适应度函数来度量控制系统的性能指标,如超调量、调整时间和稳定性。
2.初始化种群:随机生成一组初始参数作为初始种群,并利用适应度函数来评估每个个体的适应度。
3.选择操作:根据适应度选择一部分适应度较高的个体作为父代,通过选择操作进行选择。
4.交叉操作:将选中的父代进行交叉操作,生成新的子代个体。
5.变异操作:对子代进行变异操作,引入新的个体差异。
6.评估适应度:利用适应度函数评估新生成的子代个体的适应度。
7.判断终止条件:判断是否满足终止条件,如达到最大迭代次数或找到满足条件的解。
8.更新种群:根据选择、交叉和变异操作的结果,更新种群。
9.重复步骤3-8,直到满足终止条件。
10.输出最优解:输出适应度最好的个体参数作为PID控制器的优化参数。
使用遗传算法进行PID控制器参数优化有如下优点:1.自动化:遗传算法能够自动寻找最优参数组合,减少了人工试错的过程。
2.全局:遗传算法具有全局的能力,能够参数空间的各个角落,找到更好的解决方案。
3.鲁棒性:遗传算法能够处理多变量、多模态和不连续的问题,具有较好的鲁棒性。
matlab课程设计大作业一、教学目标本课程的教学目标是使学生掌握MATLAB基本语法、编程技巧以及MATLAB 在工程计算和数据分析中的应用。
通过本课程的学习,学生将能够熟练使用MATLAB进行简单数学计算、线性方程组求解、函数图像绘制等。
1.掌握MATLAB基本语法和编程结构。
2.了解MATLAB在工程计算和数据分析中的应用。
3.熟悉MATLAB的函数库和工具箱。
4.能够使用MATLAB进行简单数学计算。
5.能够使用MATLAB求解线性方程组。
6.能够使用MATLAB绘制函数图像。
7.能够利用MATLAB进行数据分析和处理。
情感态度价值观目标:1.培养学生对计算机辅助设计的兴趣和认识。
2.培养学生团队合作和自主学习的能力。
二、教学内容本课程的教学内容主要包括MATLAB基本语法、编程技巧以及MATLAB在工程计算和数据分析中的应用。
1.MATLAB基本语法:介绍MATLAB的工作环境、基本数据类型、运算符、编程结构等。
2.MATLAB编程技巧:讲解MATLAB的函数调用、脚本编写、函数文件编写等编程技巧。
3.MATLAB在工程计算中的应用:介绍MATLAB在数值计算、线性方程组求解、图像处理等方面的应用。
4.MATLAB在数据分析中的应用:讲解MATLAB在数据采集、数据分析、数据可视化等方面的应用。
三、教学方法本课程采用讲授法、案例分析法、实验法等多种教学方法相结合的方式进行教学。
1.讲授法:通过讲解MATLAB的基本语法、编程技巧以及应用案例,使学生掌握MATLAB的基本知识和技能。
2.案例分析法:通过分析实际工程案例,使学生了解MATLAB在工程计算和数据分析中的应用。
3.实验法:安排上机实验,使学生在实际操作中巩固所学知识,提高实际编程能力。
四、教学资源本课程的教学资源包括教材、实验设备、多媒体资料等。
1.教材:选用《MATLAB教程》作为主要教材,辅助以相关参考书籍。
2.实验设备:为学生提供计算机实验室,配备有MATLAB软件的计算机。
遗传算法是一种模拟自然选择与遗传机制的优化算法,它模拟了生物进化的过程,通过优化个体的基因型来达到解决问题的目的。
在工程和科学领域,遗传算法被广泛应用于求解优化问题、寻找最优解、参数优化等领域。
而MATLAB作为一款强大的科学计算软件,拥有丰富的工具箱和编程接口,为实现遗传算法提供了便利。
下面将通过以下步骤介绍如何在MATLAB中实现遗传算法:1. 引入遗传算法工具箱需要在MATLAB环境中引入遗传算法工具箱。
在MATLAB命令窗口输入"ver",可以查看当前已安装的工具箱。
如果遗传算法工具箱未安装,可以使用MATLAB提供的工具箱管理界面进行安装。
2. 定义优化问题在实现遗传算法前,需要清楚地定义优化问题:包括问题的目标函数、约束条件等。
在MATLAB中,可以通过定义一个函数来表示目标函数,并且可以采用匿名函数的形式来灵活定义。
对于约束条件,也需要进行明确定义,以便在遗传算法中进行约束处理。
3. 设置遗传算法参数在实现遗传算法时,需要对遗传算法的参数进行设置,包括种群大小、交叉概率、变异概率、迭代次数等。
这些参数的设置将会直接影响遗传算法的收敛速度和优化效果。
在MATLAB中,可以通过设置遗传算法工具箱中的相关函数来完成参数的设置。
4. 编写遗传算法主程序编写遗传算法的主程序,主要包括对适应度函数的计算、选择、交叉、变异等操作。
在MATLAB中,可以利用遗传算法工具箱提供的相关函数来实现这些操作,简化了遗传算法的实现过程。
5. 运行遗传算法将编写好的遗传算法主程序在MATLAB环境中运行,并观察优化结果。
在运行过程中,可以对结果进行实时监测和分析,以便对遗传算法的参数进行调整和优化。
通过以上步骤,可以在MATLAB中实现遗传算法,并应用于实际的优化问题与工程应用中。
遗传算法的实现将大大提高问题的求解效率与精度,为工程领域带来更多的便利与可能性。
总结:遗传算法在MATLAB中的实现涉及到了引入遗传算法工具箱、定义优化问题、设置算法参数、编写主程序和运行算法等步骤。
matlab pid算例在MATLAB中,你可以使用Control System Toolbox来设计和分析PID控制器。
以下是一个简单的PID控制器设计示例:首先,我们需要定义一个目标系统。
假设我们正在控制一个简单的系统,如直流电机,其传递函数为:```matlabs = tf('s');P_motor = 1/(0.05*s + 1);```在这个例子中,`s`是Laplace变换的变量,`P_motor`是电机的传递函数。
接下来,我们可以设计PID控制器。
PID控制器的传递函数为:```matlabKp = 1; % 比例增益Ki = 1; % 积分增益Kd = 1; % 微分增益C_pid = tf([Kp Kd], [1 Ki]);```在这里,`Kp`、`Ki`和`Kd`是PID控制器的比例、积分和微分增益。
然后,我们可以创建一个系统模型,该模型包含我们的目标系统(电机)和PID控制器。
这个系统的传递函数为:```matlabsys = feedback(C_pid*P_motor, 1);```在这里,`feedback`函数创建了一个包含PID控制器和电机的反馈系统。
最后,我们可以使用`step`函数来模拟系统的响应。
例如,我们可以模拟系统对单位阶跃函数的响应:```matlabstep(sys);```这将生成一个图形,显示系统在单位阶跃输入下的响应。
需要注意的是,上述代码中的`Kp`、`Ki`和`Kd`值是随意选择的。
在实际应用中,你可能需要通过实验或优化算法来确定这些值,以便得到最佳的系统性能。
以上就是在MATLAB中设计PID控制器的一个基本示例。
如果你对控制系统有更深入的理解,你可以根据需要对PID控制器进行更复杂的设计和分析。
遗传算法matlab代码以下是一个简单的遗传算法的MATLAB 代码示例:matlab复制代码% 遗传算法参数设置pop_size = 50; % 种群大小num_vars = 10; % 变量数目num_generations = 100; % 进化的代数mutation_rate = 0.01; % 变异率crossover_rate = 0.8; % 交叉率% 初始化种群population = rand(pop_size, num_vars);% 开始进化for i = 1:num_generations% 计算适应度fitness = evaluate_fitness(population);% 选择操作selected_population = selection(population, fitness);% 交叉操作offspring_population = crossover(selected_population,crossover_rate);% 变异操作mutated_population = mutation(offspring_population,mutation_rate);% 生成新种群population = [selected_population; mutated_population];end% 选择最优解best_solution = population(find(fitness == max(fitness)), :);% 适应度函数function f = evaluate_fitness(population)f = zeros(size(population));for i = 1:size(population, 1)f(i) = sum(population(i, :));endend% 选择函数function selected_population = selection(population, fitness)% 轮盘赌选择total_fitness = sum(fitness);probabilities = fitness / total_fitness;selected_indices = zeros(pop_size, 1);for i = 1:pop_sizer = rand();cumulative_probabilities = cumsum(probabilities);for j = 1:pop_sizeif r <= cumulative_probabilities(j)selected_indices(i) = j;break;endendendselected_population = population(selected_indices, :);end% 交叉函数function offspring_population = crossover(parental_population, crossover_rate)offspring_population = zeros(size(parental_population));num_crossovers = ceil(size(parental_population, 1) *crossover_rate);crossover_indices = randperm(size(parental_population, 1),num_crossovers);以下是另一个一个简单的遗传算法的MATLAB 代码示例:matlab复制代码% 初始化种群population = rand(nPopulation, nGenes);% 进化迭代for iGeneration = 1:nGeneration% 计算适应度fitness = evaluateFitness(population);% 选择父代parentIdx = selection(fitness);parent = population(parentIdx, :);% 交叉产生子代child = crossover(parent);% 变异子代child = mutation(child);% 更新种群population = [parent; child];end% 评估最优解bestFitness = -Inf;for i = 1:nPopulationf = evaluateFitness(population(i, :));if f > bestFitnessbestFitness = f;bestIndividual = population(i, :);endend% 可视化结果plotFitness(fitness);其中,nPopulation和nGenes分别是种群大小和基因数;nGeneration是迭代次数;evaluateFitness函数用于计算个体的适应度;selection函数用于选择父代;crossover函数用于交叉产生子代;mutation函数用于变异子代。
控制系统pid参数整定方法的matlab仿真实验报告一、引言PID控制器是广泛应用于工业控制系统中的一种常见控制算法。
PID 控制器通过对系统的误差、误差积分和误差变化率进行调节,实现对系统的稳定性和动态性能的控制。
而PID参数的整定是保证系统控制性能良好的关键。
本实验旨在利用Matlab仿真,研究控制系统PID参数整定的方法,探讨不同整定策略对系统稳定性和动态性能的影响,为工程实际应用提供理论依据。
二、控制系统模型本实验采用了以二阶惯性环节为例的控制系统模型,其传递函数为:G(s) = K / (s^2 + 2ξω_ns + ω_n^2)其中,K为系统增益,ξ为阻尼比,ω_n为自然频率。
三、PID参数整定方法实验中我们探讨了几种典型的PID参数整定方法,包括经验法、Ziegler-Nichols方法和遗传算法。
1. 经验法经验法是一种简单粗糙的PID参数整定方法,根据实际系统的性质进行经验性调试。
常见的经验法包括手动调整法和试探法。
在手动调整法中,我们通过调整PID参数的大小,观察系统的响应曲线,从而找到满足系统性能要求的参数。
这种方法需要操作者有一定的经验和直觉,且对系统有一定的了解。
试探法是通过试验和试验的结果来确定PID参数的值。
在试探过程中,我们可以逐渐逼近最佳参数,直到满足系统性能要求。
2. Ziegler-Nichols方法Ziegler-Nichols方法是一种广泛应用的PID参数整定方法。
该方法通过系统的临界增益和临界周期来确定PID参数。
首先,在开环状态下,逐渐增加系统增益,当系统开始出现振荡时,记录下此时的增益值和周期。
然后根据临界增益和临界周期的数值关系,计算出PID参数。
3. 遗传算法遗传算法是一种基于生物进化原理的优化算法,可以用于自动化调整PID参数。
该方法通过对参数的种群进行进化迭代,逐渐找到最优的PID参数。
四、实验结果与分析我们利用Matlab进行了控制系统的PID参数整定仿真实验,并得到了不同整定方法下的系统响应曲线。
基于遗传优化算法对离散PID控制器参数的优化设计摘要PID控制作为一种经典的控制方法,从诞生至今,历经数十年的发展和完善,因其优越的控制性能业已成为过程控制领域最为广泛的控制方法;PID控制器具有结构简单、适应性强、不依赖于被控对象的精确模型、鲁棒性较强等优点,其控制性能直接关系到生产过程的平稳高效运行,因此对PID控制器设计和参数整定问题的研究不但具有理论价值更具有很大的实践意义,遗传算法是一种借鉴生物界自然选择和自然遗传学机理上的迭代自适应概率性搜索算法。
本论文主要应用遗传算法对PID调节器参数进行优化。
关键词:遗传优化算法PID控制器参数优化1.前言PID调节器是最早发展起来的控制策略之一,因为它所涉及的设计算法和控制结构都是简单的,并且十分适用于工程应用背景,此外PID控制方案并不要求精确的受控对象的数学模型,且采用PID控制的控制效果一般是比较令人满意的,所以在工业实际应用中,PID调节器是应用最为广泛的一种控制策略,也是历史最久、生命力最强的基本控制方式。
调查结果表明: 在当今使用的控制方式中,PID型占84. 5% ,优化PID型占68%,现代控制型占有15%,手动控制型66%,人工智能(AI)型占0.6% 。
如果把PID型和优化PID型二者加起来,则占90% 以上,这说明PID控制方式占绝大多数,如果把手动控制型再与上述两种加在一起,则占97.5% ,这说明古典控制占绝大多数。
就连科学技术高度发达的日本,PID控制的使用率也高达84.5%。
这是由于理论分析及实际运行经验已经证明了PID调节器对于相当多的工业过程能够起到较为满足的控制效果。
它结构简单、适用面广、鲁棒性强、参数易于调整、在实际中容易被理解和实现、在长期应用中己积累了丰富的经验。
特别在工业过程中,由于控制对象的精确数学模型难以建立,系统的参数又经常发生变化,运用现代控制理论分析综合要耗费很大的代价进行模型辨识,但往往不能达到预期的效果,所以不论常规调节仪表还是数字智能仪表都广泛采用这种调节方式。
Matlab实现遗传算法的⽰例详解⽬录1算法讲解1.1何为遗传算法1.2遗传算法流程描述1.3关于为什么要⽤⼆进制码表⽰个体信息1.4⽬标函数值与适应值区别1.5关于如何将⼆进制码转化为变量数值1.6关于代码改进2MATLAB⾃带ga函数2.1问题描述2.2⾃带函数使⽤3⾃编遗传算法各部分代码及使⽤3.1代码使⽤3.2Genetic1--主函数3.3PI(PopulationInitialize)--产⽣初始种群3.4Fitness--计算⽬标函数值3.5FitnessF--计算适应值3.6Translate--将⼆进制码转换3.7Probability--染⾊体⼊选概率3.8Select--个体选择3.9Crossing--交叉互换3.10Mutation--基因突变3.11Elitist--最优个体记录与最劣个体淘汰3.12完整代码这篇⽂章⽤了⼤量篇幅讲解了如何从零开始⾃⼰写⼀个遗传算法函数,主要是为了应对学⽣作业等情况,或者让⼤家对遗传算法有更充分的理解,如果要⽤于学术研究,最好还是使⽤⾃带遗传算法,之后可能会推出更多⾃带遗传算法⼯具箱的使⽤。
1 算法讲解1.1 何为遗传算法遗传、突变、⾃然选择、杂交,遗传算法是⼀种借鉴了进化⽣物学各类现象的进化算法。
看到⼀个很形象的⽐喻来描述各类进化算法的区别:爬⼭算法:⼀只袋⿏朝着⽐现在⾼的地⽅跳去。
它找到了不远处的最⾼的⼭峰。
但是这座⼭不⼀定是最⾼峰。
这就是爬⼭算法,它不能保证局部最优值就是全局最优值。
模拟退⽕:袋⿏喝醉了。
它随机地跳了很长时间。
这期间,它可能⾛向⾼处,也可能踏⼊平地。
但是,它渐渐清醒了并朝最⾼峰跳去。
这就是模拟退⽕算法。
遗传算法:有很多袋⿏,它们降落到喜玛拉雅⼭脉的任意地⽅。
这些袋⿏并不知道它们的任务是寻找珠穆朗玛峰。
但每过⼏年,就在⼀些海拔⾼度较低的地⽅射杀⼀些袋⿏。
于是,不断有袋⿏死于海拔较低的地⽅,⽽越是在海拔⾼的袋⿏越是能活得更久,也越有机会⽣⼉育⼥。
一种遗传算法优化模糊PID控制器的设计与仿真遗传算法是一种模拟生物进化过程的优化算法,通过模拟生物的自然选择和遗传交叉等过程,不断优化目标函数,达到寻找最优解的目的。
PID控制器是最常用的控制器之一,但是其参数的调节通常需要依靠经验或者试错法。
利用遗传算法优化模糊PID控制器的设计可以大大减少这种调参的耗时,并且可以获得更优的控制效果。
首先,在设计模糊PID控制器前,我们需要明确控制对象的模型和控制目标。
控制对象可以是任何具有反馈机制的系统,如机械控制系统、电子控制系统等。
控制目标可以是任何我们希望达到的状态,比如保持温度稳定、保持速度恒定等等。
接下来,我们需要确定需要优化的PID控制器的参数范围。
PID控制器有三个参数:比例增益Kp、积分增益Ki和微分增益Kd。
我们需要确定这三个参数的合理取值范围。
一般情况下,Kp和Ki的范围可以在0到10之间,而Kd的范围也可以在0到10之间。
然后,我们需要定义适应度函数。
适应度函数用于衡量每个个体的优劣程度。
在模糊PID控制器的设计中,适应度函数可以是控制器的误差指标,比如稳态误差、超调量等等。
我们希望优化的结果是最小化这些指标,因此适应度函数应该是一个相反的函数。
接下来,我们需要确定遗传算法的参数。
遗传算法的参数包括种群大小、交叉率、变异率等等。
种群大小决定了算法的空间大小,一般情况下设为几十到几百个个体。
交叉率和变异率决定了交叉和变异的概率,一般情况下设为0.8和0.1然后,我们需要编写遗传算法的代码。
遗传算法的代码可以使用任何编程语言来实现,如Python、Matlab等等。
在编写代码时,我们需要注意以下几点:首先,需要实现种群的初始化,可以使用随机数生成初始种群;其次,需要实现适应度函数的计算,根据控制目标计算每个个体的适应度;最后,需要实现选择、交叉和变异的操作,并根据适应度函数进行优化。
最后,我们需要进行仿真实验。
在仿真中,我们可以使用Matlab或者其他仿真软件来搭建控制对象的模型和控制系统,并将优化后的PID控制器与传统PID控制器进行比较。
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遗传算法实例Matlab遗传算法实例引言:遗传算法是一种模拟自然进化过程的优化算法,它通过模拟优胜劣汰、基因交叉和变异等自然选择机制,来寻找问题的最优解。
在Matlab中,我们可以利用遗传算法工具箱来快速实现遗传算法,并解决各种实际问题。
本文将介绍一个基于Matlab的遗传算法实例,以帮助读者更好地理解和应用遗传算法。
一、问题描述假设我们要在一个由0和1组成的二进制串中寻找最优解。
具体而言,我们定义了一个目标函数,目标函数的输入是一个二进制串,输出是一个实数值。
我们的目标是找到一个二进制串,使得目标函数的输出值最大化。
二、遗传算法的基本原理遗传算法是基于自然进化过程的优化算法,它的基本原理如下:1. 初始化种群:随机生成一组二进制串作为初始种群。
2. 评估适应度:根据目标函数计算每个个体的适应度值。
3. 选择操作:根据适应度值选择优秀个体作为父代,进行繁殖。
4. 交叉操作:对选出的父代个体进行基因交叉,生成新的子代个体。
5. 变异操作:对子代个体进行基因变异,引入新的基因信息。
6. 更新种群:用子代替换父代,生成新的种群。
7. 终止条件判断:判断是否满足终止条件,若满足则输出最优解,否则返回第3步。
三、Matlab代码实现以下是一个简单的Matlab代码实例,用于求解上述问题:```matlab% 目标函数定义function y = fitnessFunc(x)y = sum(x);end% 遗传算法主函数function [bestSolution, bestFitness] = geneticAlgorithm(popSize, numGen, pc, pm)% 初始化种群population = round(rand(popSize, numGen));% 迭代进化for t = 1:numGen% 评估适应度fitness = arrayfun(@fitnessFunc, population);% 选择操作[~, sortedIdx] = sort(fitness, 'descend');eliteIdx = sortedIdx(1:round(popSize/2));elite = population(eliteIdx, :);% 交叉操作crossIdx = rand(popSize, 1) < pc;crossPairs = reshape(population(crossIdx, :), [], 2);crossPoints = randi(numGen-1, size(crossPairs, 1), 1) + 1;offsprings = [elite; arrayfun(@(i) [crossPairs(i, 1:crossPoints(i)), crossPairs(i, crossPoints(i)+1:end)], 1:size(crossPairs, 1), 'UniformOutput', false)];population = vertcat(offsprings{:});% 变异操作mutateIdx = rand(popSize, numGen) < pm;population(mutateIdx) = 1 - population(mutateIdx);end% 输出结果fitness = arrayfun(@fitnessFunc, population);[bestFitness, bestIdx] = max(fitness);bestSolution = population(bestIdx, :);end% 调用遗传算法求解最优解popSize = 100; % 种群大小numGen = 100; % 进化代数pc = 0.8; % 交叉概率pm = 0.01; % 变异概率[bestSolution, bestFitness] = geneticAlgorithm(popSize, numGen, pc, pm);```四、实验结果与讨论根据上述Matlab代码实例,我们可以得到一个最优解,即一个二进制串。
基于遗传算法的PID参数整定1引言传统的比例、积分、微分控制,即PID控制具有算法简单、鲁棒性好和可靠性高等优点,已经被广泛用于工业生产过程。
但工程实际中,PID控制器的比例、积分和微分调节参数往往采用实验加试凑的方法由人工整定。
这不仅需要熟练的技巧,往往还相当费时。
更为重要的是,当被控对象特性发生变化,需要控制器参数作相应调整时,PID控制器没有自适应能力,只能依靠人工重新整定参数,由于经验缺乏,整定结果往往达不到最优值,难以满足实际控制的要求。
考虑生产过程的连续性以及参数整定费事费力,这种整定实际很难进行。
所以,人们从工业生产实际需要出发,基于常规PID控制器的基本原理,对其进行了各种各样的改进。
近年来许多学者提出了基于各种智能算法的PID整定策略,比如模糊PID、神经元网络PID等等。
然而,这些先进算法都要求对被控对象有很多的先验知识,在实际应用中往往难于做到。
随着计算技术的发展,遗传算法有了很大的发展。
将遗传算法用于控制器参数整定,已成为遗传算法的重要应用之一。
本文介绍基于遗传算法的PID参数整定设计方法。
这是一种寻求全局最优的控制器优化方法,且无需对目标函数微分,可提高参数优化效果,简化计算过程。
仿真实例表明该方法与其他传统寻优方法相比,在优化效果上具有一定的优势。
2遗传算法简介2.1 遗传算法的基本原理遗传算法是John H.Holland根据生物进化的模型提出的一种优化算法。
自然选择学说是进化论的中心内容。
根据进化论,生物的发展进化主要有三个原因:即遗传、变异和选择。
遗传算法基于自然选择和基因遗传学原理的搜索方法,将“优胜劣汰,适者生存”的生物进化原理引入待优化参数形成的编码串群体中,按照一定的适应度函数及一系列遗传操作对各个体进行筛选,从而使适应度高的个体被保留下来,组成新的群体;新群体包含上一代的大量信息,并且引入了新的优于上一代的个体。
这样周而复始,群体中各个体适应度不断提高,直至满足一定的极限条件。
遗传算法在调节控制系统参数中的应用【摘要】自动化控制系统多采用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;。