【MATLAB】自适应果蝇优化算法整定PID控制器参数(六)—— 一阶带时延的被控对象
目录
0研究背景
写在前面:
1.本代码基于MATLAB2019a版本,低版本或者不同版本可能会报错,mdl文件或slx文件打开可能会失败;
2.如果运行时间过长,请观察迭代次数是否有变化。
3.本博客附上算法运行图并详细介绍,如果转载请注明出处;
参考前面的几篇博客
【Simulink】PSO优化算法整定PID控制器参数(一)一一一高阶不稳定系统
【Simulink】PSO算法优化Simulink模型的参数在线整定(二)一一一高阶不稳定系统
【MATLAB】GA优化算法整定PID控制器参数(三)—— 一阶带时延的被控对象
【MATLAB】NSGA-2优化算法整定PID控制器参数(四)—— 一阶带时延的被控对象
【MATLAB】FOA优化算法整定PID控制器参数(五)—— 一阶带时延的被控对象
1自适应果蝇优化算法的改进介绍
复现的期刊论文如下:
[1] 李明辉,曹泽,王玉洁.基于自适应果蝇优化算法的PID参数优化[J].机床与液压,2018,46(20):144-147.
1.1 搜索步长的改进设计
果蝇优化算法在寻优第(2)步中(果蝇位置的初始化 )搜寻范围一直是[-1,1]之间,即半径为1的区域。这样的弊端是在搜索前期可能会因选择步长较小而使搜索效率下降,在搜索后期又因步长较大而错过最优解。为此在搜寻过程当中引入半径调节系数 λ \lambda λ。自适应果蝇优化算法(Improved Fruit-fly Optimization Algorithm,IFOA)调整搜寻范围的策略是果蝇个体采用嗅觉搜寻食物,其随机方向和距离为:
x i = x + ω × ( 2 rand ( ) − 1 ) x_{i}=x+\omega \times(2 \operatorname{rand}()-1) xi=x+ω×(2rand()−1)
其中, ω = ω × λ i \omega=\omega \times \lambda^{i} ω=ω×λi,初始值设定为 ω = 1 \omega=1 ω=1, i i i为当前迭代次数。在搜索初期,可以先进行全局搜索,在搜索后期随着迭代次数的增加,搜索范围逐步减小,进行局部搜索。这样可以根据果蝇搜索初期和后期的不同阶段,使搜索范围随迭代次数自适应调整。
1.2 搜索方向的改进设计
基本果蝇优化算法在第(3)步(计算果蝇味道浓度判定值 )计算果蝇味道浓度判定值
S
i
S_{i}
Si时始终为正值,从而得出的适应度函数不精确。为了便于处理,直接将气味浓度判定值
S
i
=
S_{i}=
Si=
x
x
xi,从而计算出最小的气味浓度适应度值。自适应果蝇优化算法(Improved Fruit-fly Optimization Algorithm,IFOA)具体流程如图1所示。
图1 自适应果蝇优化算法的具体流程
2被控对象与适应度函数的设计
2.1 被控对象的传递函数
以下式二阶Ⅰ型时延系统的传递函数为例,运用NSGA-2算法进行PID参数优化,其中系统设置为采样时间1 ms,指令为单位阶跃信号,仿真运行时间为1.0 s。其中,性能优化函数Best_J采取时间与误差绝对值乘积的积分方程(Integral of Time Multiplied by the Absolute Value of Error,ITAE),同时为避免控制量过大而产生超调,在性能优化函数Best_J中添加PID控制器输入量的平方项。这仅仅是其中某个目标的适应度函数,此外还需设计另外目标的适应度函数,如2.2适应度函数的设计。
二阶Ⅰ型时延系统的传递函数,如下所示。可按照自己的实际系统进行设计,既可以.m文件进行编写
2.2 适应度函数的设计
为获取较为满意的过渡过程,采用误差绝对值时间积分性能指标作为适应度评价函数Best_J。同时为防止控制输入过大,在Best_J加入控制输入的评分项,如式(1-2)所示。
式(1-2)中e(t)为系统输出误差,u(t)为PID控制器输入量,ρ1,ρ2为权重值。
为避免超调,采用罚函数对超调量进行优先处理,则如式(1-3)所示。
式(1-3)中ρ3>>max(ρ1,ρ2和ρ4),且y(t)为被控对象输出,ey(t)=y(t)-y(t-1)。
以此作为目标适应度函数的设计。
2.3 IFOA算法的PID参数整定实现
最佳指标适应度值如下
阶跃响应输出如下
3与FOA算法的PID参数整定结果对比
论文算法对比图如下
最佳指标适应度值如下
阶跃响应输出如下