基于粒子群算法的PID参数优化

上传人:沈*** 文档编号:146346585 上传时间:2022-08-31 格式:DOC 页数:15 大小:226.84KB
收藏 版权申诉 举报 下载
基于粒子群算法的PID参数优化_第1页
第1页 / 共15页
基于粒子群算法的PID参数优化_第2页
第2页 / 共15页
基于粒子群算法的PID参数优化_第3页
第3页 / 共15页
资源描述:

《基于粒子群算法的PID参数优化》由会员分享,可在线阅读,更多相关《基于粒子群算法的PID参数优化(15页珍藏版)》请在装配图网上搜索。

1、基于粒子群算法的PID参数优化计算机控制理论与设计作业 姓名: 学号: 基于粒子群算法的PID参数优化基于粒子群算法的PID参数优化徐鹏翔 1501086 控制理论与控制工程3班摘 要:粒子群算法是计算智能领域,除蚁群算法、鱼群算法之外的一种群体智能优化算法,本文利用粒子群算法优化PID参数。选用常用的误差性能指标ITAE作为目标函数,在MATLAB环境下设计粒子群优化算法,搭建simulink仿真,实现了PID控制器的自动参数整定。仿真结果表明,该优化方法得到 PID 控制器的综合性能优于常规方法得到的PID。关键词:粒子群算法;PID;控制;优化;仿真1 引言在控制工程中,PID控制是最早

2、发展起来的得到广泛应用的控制策略之一,是指将偏差的比例、积分和微分通过线性组合构成控制量,对被控对象进行控制,具有结构简单、易于实现、鲁棒性好等特点。PID控制设计的核心问题就是根据被控对象的不同特性来确定P、I、D等3个参数的大小。传统的PID控制参数主要通过人工经验来调整,显然这种方法主观性太强,移植性差,也不能保证控制最优。早期用来优化PID控制器参数的方法主要有ZieglerNichols动态特性法、CohenCoon响应曲线法、ISE积分平方准则整定法。近些年随着智能控制算法的兴起,出现了专家智能型PID参数自整定技术、基于Fuzzy算法的PID参数自整定技术、基于GA的PID参数自

3、整定技术、基于蚁群算法的PID参数自整定技术等,与传统方法相比,这些方法都取得了更好的控制效果,但也存在算法复杂、适用性不强等不足。动物群体中信息的社会共享有利于群体在演化中获得优势,以此可以作为开发粒子群算法的基础。粒子群算法是一种基于群体的具有全局寻优能力的优化工具,但它没有遗传算法中用的交叉以及变异等复杂的遗传操作,其简单、易于实现,同时又有深刻的智能背景,既适合科学研究,又特别适合工程应用。从粒子群算法的基本原理出发,将其运用到PID控制器参数优化当中,得到很好的效果。2 PID控制器2.1 PID控制器基本原理PID控制器通过对反馈误差信号进行比例、积分和微分运算,以运算结果的加权和

4、来构成系统的控制信号,其传递函数描述可写为: (1)实际中常将控制器中的纯微分环节进行滤波处理,这样PID控制器的传递函数成为: (2) 其中是比例常数、和分别是积分和微分时间常数,为一个较大的正数(文中取N=50)。PID控制器的优化设计,就是寻找合适的、和在控制系统的快速性和稳定性之间进行平衡,尽量减小超调量和稳态误差,提高动态响应速度。2.2 PID控制器参数对控制性能的影响在系统稳定的前提下,加大Kp可以减少稳态误差,但不能消除稳态误差。因此Kp的整定主要依据系统的动态性能。Kp加大,将使系统响应速度加快,Kp偏大时,系统振荡次数增多,调节时间加长,Kp太小又会使系统的响应速度缓慢。K

5、p的选择以输出响应产生4:1衰减过程为宜。积分控制通常和比例控制或比例微分控制联合作用,构成PI控制或PID控制。积分控制有助于消除系统稳态误差,提高系统的控制精度,但若TI太大,积分作用太弱,则不能减少余差。积分控制通常影响系统的稳定性。TI太小,系统可能不稳定,且振荡次数较多;TI太大,对系统的影响将削弱;当TI较适合时,系统的过渡过程特性比较理想。微分控制通常和比例控制或比例积分控制联合作用,构成PD控制或PID控制。微分环节的加入,可以在误差出现或变化瞬间,按偏差变化的趋向进行控制。它引进一个早期的修正作用,有助于增加系统的稳定性。微分时间TD的增加即微分作用的增加可以改善系统的动态特

6、性,如减少超调量,缩短调节时间等。适当加大比例控制,可以减少稳态误差,提高控制精度。但TD值偏大或偏小都会适得其反。另外微分作用有可能放大系统的噪声,降低系统的抗干扰能力。3 粒子群算法粒子群算法是Kennedy和Eberhart等受鸟群在寻觅食物时的行为启示,于1995年提出的一种优化算法。该算法通过群体之间的信息共享和个体对自身经验的总结来修正个体的行动策略,进而求得优化问题的解。标准的粒子群算法初始化为一群随机粒子,然后通过迭代找到最优解。在每一次迭代中,粒子通过跟踪两个“极值”来更新粒子在空间中的飞行速度和位置。第一个极值就是当前第 i个粒子本身所找到的最优解,称为个体极值,记为。另一

7、个极值是当前整个种群找到的最优解,称为全局极。若将第i个粒子的速度记为,表示一次迭代计算引起的粒子位置变化量。而每个粒子的位置记为 。代表一个优化问题的潜在解。则每一次迭代计算中,第i个粒子的速度和位置由下式来更新: (3) (4)其中i表示粒子序号,t是迭代次数,n为解空间的维数。w是一个小于1的常数,称为惯性权重,表示过去速度对当前速度的影响,一般在优化初期取值较大,后期逐渐变小;c1和c2是正常数,称为加速因子,分别用于表示粒子自身的认知(cognitive)和群体中粒子间的信息共享(social),用于解决全局和局部搜索能力之间的矛盾;r1和r2是0,1之间满足正态分布的随机数。近年来

8、,Clerc等对标准的粒子群算法进行了改进,提出带收缩因子的粒子群算法。研究表明,在标准粒子群算法中引入收缩因子,可以提高粒子群算法算法的收敛速度。带收缩因子的粒子群算法的速度更新算式写为: (5)其中称为收缩因子,典型的收缩因子计算式为: (6)其中,。带收缩因子粒子群算法的位置更新算式与式(4)相同。PID控制器的优化设计可视为一个多目标的优化问题。PID的参数整定,就是在控制系统的快速性与稳定性之间进行折衷。常规的PID参数整定方法很难同时兼顾多项性能指标,得到的PID控制器参数通常不是最优的。而采用粒子群算法来对PID参数进行优化设计,利用粒子群算法的全局搜索和多目标优化能力,可以克服

9、常规PID参数整定方法的缺点,获得具有满意性能的PID控制器。PID参数整定的粒子群算法算法的实现实现步骤具体如下:步骤1:初始化。t=0时,初始化随机地产生由n个粒子组成的种群其中表示第j个粒子在解空间的坐标量,也就是PID控制器的三个待优化的参数。为使初始的PID参数不至于偏离最优解太远,将每个初始化的PID参数取为Ziegler-Nichols法整定的PID参数值附近的随机数,初始速度。步骤2:粒子性能评估。为优化PID参数,本文选取常用的误差性能指标ITAE作为目标函数即: (7)对每组参数链接simulink仿真并计算目标函数值,评价参数值的优劣。对于种群中的每个粒子,设个体的最佳位

10、置为(适应度最小),则在初始种群中,找出适应度最小的个体,种群中的最佳位置即为步骤3:更新速度和位置。根据式(5)和式(4)更新当前代中每个粒子的速度和位置。步骤4:计算对应的适应度。根据当前代中每个粒子的位置计算对应的适应度,如果则更新个体的最佳位置。否则,。步骤5:更新当前全局最优解。寻找当前种群中具有最小Q的粒子,设为第k个粒子。若,则更新全局最佳位置,否则若终止条件满足(文中设为迭代次数达到最大值),则算法结束,否则t=t+1,转到步骤3。4 被控对象建模 以不稳定系统 (8)在Matlab的Simulink环境中建立模型如图1所示,文件保存为pidsim2.mdl。图1中,输出端口1

11、即为式(7)所示的ITAE指标,通过将时间及误差绝对值的乘积进行积分后得到。图1 系统仿真图5 仿真取粒子个数100,迭代次数100,惯性权重由0.95到0.45线性递减,加速因子,收缩因子取a=0.729,为了加快最优解的求取,对经验调试结果进行优化,搜索区间选取经验包含经验值在内的区间:scope=30,40,-0.1,0.1;0.1,0.3,-0.01,0.01;30,50,-0.1,0.1,依次表示PID各维系数的搜索区间和搜索速度,在Matlab环境中运行相关程序后,得到系统性能指标ITAE即目标函数的变化曲线如图2,系统单位阶跃响应曲线如图3。图2 目标函数变化曲线图3 系统单位阶

12、跃响应曲线 由图3可见,大约在迭代50次后,控制器参数及性能指标趋于稳定,分别为Kp=37.51,Ki=0.216,Kd=33.398,ITAE=1.644。在粒子群算法算法过程中,性能指标ITAE不断减小,粒子群算法不断寻找更优的控制参数以逼近理想最优解,对于不稳定的控制对象,由粒子群算法设计出的PID控制器使得Kp,Ki和Kd配置合理,很好地控制了对象,达到了预期的效果。6 讨论与结论 本次作业利用粒子群算法优化PID参数,实现了PID参数的自动整定。在做作业的工程中也遇到了不少问题,比如matlab程序调试,算法代码实现等等。在解决这些问题过程中学到了很多知识,同时也提高了自己研究问题,

13、解决问题的能力。由于作者水平有限,算法在实现寻优过程中仍表现的不尽如人意,没有达到理想的效果,有待以后继续深入研究。尽管如此,粒子群算法在优化PID参数上仍不失为一个很好的工具,简单易行,比较容易掌握,使系统具有较好的动态性能。参考文献1智能优化方法/汪定伟等编著.-北京:高等教育出版社,2007.42肖理庆,邵晓根,石天明等利用改进粒子群算法整定PID参数J计算机应用,2010,30(6):1547-15493杨智,陈志堂,范正平基于改进粒子群优化算法的PID控制器整定J控制理论与应用,2010,27(10):1345-13524关守平.计算机控制理论与设计M.沈阳:东北大学出版社,2009

14、,49:555薛定宇基于MATLABSimulink的系统仿真技术与应用清华大学出版社,2002附录:仿真程序初始化粒子群InitSwarm程序functionParSwarm,OptSwarm=InitSwarm(SwarmSize,ParticleSize,ParticleScope)%功能描述:初始化粒子群,限定粒子群的位置以及速度在指定的范围内%ParSwarm,OptSwarm,BadSwarm=InitSwarm(SwarmSize,ParticleSize,ParticleScope,AdaptFunc)%输入参数:SwarmSize:种群大小的个数%输入参数:ParticleS

15、ize:一个粒子的维数%输入参数:ParticleScope:一个粒子在运算中各维的范围;%输出:ParSwarm初始化的粒子群,位置速度适应值%输出:OptSwarm粒子群当前最优解与全局最优解%用法ParSwarm,OptSwarm,BadSwarm=InitSwarm(SwarmSize,ParticleSize,ParticleScope,AdaptFunc);%异常:首先保证该文件在Matlab的搜索路径中,然后查看相关的提示信息。%容错控制format long;%初始化粒子群矩阵%初始化粒子群矩阵,全部设为0-1随机数ParSwarm=rand(SwarmSize,2*Parti

16、cleSize+1);%对粒子群中位置,速度的范围进行调节for k=1:ParticleSize ParSwarm(:,k)=ParSwarm(:,k)*(ParticleScope(k,2)-ParticleScope(k,1)+ParticleScope(k,1); %调节速度,使速度与位置的范围一致ParSwarm(:,ParticleSize+k)=ParSwarm(:,ParticleSize+k)*(ParticleScope(k,4)-ParticleScope(k,3)+ParticleScope(k,3);end%对每一个粒子计算其适应度函数的值 fangzhen!for

17、k=1:SwarmSize Kp=ParSwarm(k,1); Ki=ParSwarm(k,2); Kd=ParSwarm(k,3);% 启动Simulinkset_param(pidsim2/Gain,Gain, num2str(Kp);set_param(pidsim2/Gain1,Gain, num2str(Ki);set_param(pidsim2/Gain2,Gain, num2str(Kd); t,x,y1,y2=sim(pidsim2,0:100); ParSwarm(k,2*ParticleSize+1)=y1(end);end%初始化粒子群最优解矩阵OptSwarm=zero

18、s(SwarmSize+1,ParticleSize+1);%粒子群最优解矩阵全部设为零minValue,row=min(ParSwarm(:,2*ParticleSize+1);%寻找适应度函数值最小的解在矩阵中的位置(行数)OptSwarm(1:SwarmSize,1:ParticleSize+1) = ParSwarm(1:SwarmSize,1:ParticleSize),ParSwarm(:,2*ParticleSize+1);OptSwarm(SwarmSize+1,:)=ParSwarm(row,1:ParticleSize),minValue;基本的粒子群算法的单步更新位置,速

19、度的算法function ParSwarm,OptSwarm=BaseStepPso(ParSwarm,OptSwarm,ParticleScope,MaxW,MinW,LoopCount,CurCount)%功能描述:全局版本:基本的粒子群算法的单步更新位置,速度的算法%ParSwarm,OptSwarm=BaseStepPso(ParSwarm,OptSwarm,AdaptFunc,ParticleScope,MaxW,MinW,LoopCount,CurCount)%输入参数:ParSwarm:粒子群矩阵,包含粒子的位置,速度与当前的适值%输入参数:OptSwarm:包含粒子群个体最优解

20、与全局最优解的矩阵%输入参数:ParticleScope:一个粒子在运算中各维的范围;%输入参数:AdaptFunc:适应度函数%输入参数:LoopCount:迭代的总次数%输入参数:CurCount:当前迭代的次数%返回值:含意同输入的同名参数%用法:ParSwarm,OptSwarm=BaseStepPso(ParSwarm,OptSwarm,AdaptFunc,ParticleScope,MaxW,MinW,LoopCount,CurCount)%异常:首先保证该文件在Matlab的搜索路径中,然后查看相关的提示信息。%开始单步更新的操作 %*%*更改下面的代码,可以更改惯性因子的变化*

21、%-%线形递减策略w=MaxW-CurCount*(MaxW-MinW)/LoopCount);%-%得到粒子群群体大小以及一个粒子维数的信息ParRow,ParCol=size(ParSwarm);%得到粒子的维数ParCol=(ParCol-1)/2;SubTract1=OptSwarm(1:ParRow,1:ParCol)-ParSwarm(:,1:ParCol);%?get %*%*更改下面的代码,可以更改c1,c2的变化*c1=2;c2=2;%con=1;%c1=4-exp(-con*abs(mean(ParSwarm(:,2*ParCol+1)-AdaptFunc(OptSwarm

22、(ParRow+1,:);%c2=4-c1;%*更改上面的代码,可以更改c1,c2的变化*%*for row=1:ParRow SubTract2=OptSwarm(ParRow+1,1:ParCol)-ParSwarm(row,1:ParCol);TempV=w.*ParSwarm(row,ParCol+1:2*ParCol)+2*unifrnd(0,1).*SubTract1(row,:)+2*unifrnd(0,1).*SubTract2; %限制速度的代码 for h=1:ParCol if TempV(:,h)ParticleScope(h,4) TempV(:,h)=Particl

23、eScope(h,4); end if TempV(:,h)ParticleScope(h,2) TempPos(:,h)=ParticleScope(h,2); end if TempPos(:,h)=ParticleScope(h,1) TempPos(:,h)=ParticleScope(h,1); endend%更新位置 ParSwarm(row,1:ParCol)=TempPos;%计算每个粒子的新的适应度值 Kp=ParSwarm(row,1); Ki=ParSwarm(row,2); Kd=ParSwarm(row,3); % 启动Simulink set_param(pidsi

24、m2/Gain,Gain, num2str(Kp); set_param(pidsim2/Gain1,Gain, num2str(Ki); set_param(pidsim2/Gain2,Gain, num2str(Kd); t,x,y1,y2=sim(pidsim2,0:100); ParSwarm(row,2*ParCol+1)=y1(end);if ParSwarm(row,2*ParCol+1)minValue OptSwarm(ParRow+1,:)=ParSwarm(row,1:ParCol),minValue;End一个循环n次的粒子群算法算法完整过程function Resul

25、t=PsoProcess(SwarmSize,ParticleSize,ParticleScope,InitFunc,StepFindFunc,LoopCount)%功能描述:一个循环n次的粒子群算法算法完整过程,返回这次运行的最优解%Result=PsoProcess(SwarmSize,ParticleSize,ParticleScope,InitFunc,StepFindFunc,LoopCount)%输入参数:SwarmSize:种群大小的个数%输入参数:ParticleSize:一个粒子的维数%输入参数:ParticleScope:一个粒子在运算中各维的范围;%输入参数:InitFu

26、nc:初始化粒子群函数%输入参数:StepFindFunc:单步更新速度,位置函数%输入参数:LoopCount:迭代的次数%返回值:Result为经过迭代后得到的最优解%异常:首先保证该文件在Matlab的搜索路径中,然后查看相关的提示信息。%初始化种群ParSwarm,OptSwarm=InitFunc(SwarmSize,ParticleSize,ParticleScope);Result=zeros(LoopCount,ParticleSize+1);%开始更新算法的调用for k=1:LoopCount %显示迭代的次数: disp(-) TempStr=sprintf(第 %g 此迭代,k); disp(TempStr); disp(-) %调用一步迭代的算法ParSwarm,OptSwarm=StepFindFunc(ParSwarm,OptSwarm,ParticleScope,0.95,0.45,LoopCount,k); Result(k,:)=OptSwarm(SwarmSize+1,:); if OptSwarm(SwarmSize+1,:)scope=11,185,-5,5;0.06,0.5,-0.01,0.01;13,235,-5,5;PID=PsoProcess(100,3,scope,InitSwarm,BaseStepPso,100)13

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!