✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
⛄ 内容介绍
在控制过程中,按偏差的比例(P),积分(I)和微分(D)进行控制的PID控制器(亦称PID调节器)是发展最早的控制算法之一.该算法出现于20世纪30,40年代,它原理简单,易于实现,控制参数相对独立;而且对于控制的典型对象-"一阶滞后+纯滞后"与"二阶滞后+纯滞后"的控制系统,PID控制器的一种最优的.它的参数整定方式简便,结构改变灵活,有比例调节,比例积分调节以及比例积分加微分调节.然而,随着控制过程日益复杂,控制要求不断提高,很多产品的生产过程要求不允许超过设定值,例如在葡萄酒的酿制过程中,任何一种原料的一点点超标都会影响葡萄酒的整体口味,因此生产过程中的无超调控制是非常重要的.文章应用非洲秃鹫优化算法对粮食库温度,湿度PID控制器参数开展了寻优研究,建立了相应的优化目标函数,利用寻优得到的参数构成温湿度PID控制器,对粮食库空气处理的温湿度进行优化控制.并在Matlab环境下开展了基于非洲秃鹫优化PID控制的粮食库温湿度控制仿真试验,验证了利用这种算法获得的良好控制效果.
AVOA是受非洲秃鹫觅食和导航行为启发提出的一种元启发式优化算法。AVOA数学描述如下。
a avoa通过通过所有适应度适应度适应度适应度炙鹤移动。
式中Ri(t) —除最优、次优蒸鹇外的其他蒸鹱位置; BestV1 、 BestV2 —最优蒸鹛和次优蒸鹛位置; L1 、 L2 —于0和1之间待测量为1 ; pi —选择最佳蒸鹇的概率; fi —其他蒸鹛合适度; t —当前代次数;其他参数含义相同。
b)秃鹫秃鹫觅食,若经常觅食状态状态状态状态状态状态状态状态状态状态能量能量能量能量能量能量能量能量能量能量能量能量能量能量能量能量能量更强壮的猎鹰附近察觉食物。食物率数据描述为:
式中F —秭兔饲料食用率; T —最大延迟次数; z — 1和1之间的随机数; h — 2和2之间的随机数; rand1 — 0和1之间的随机数; w —控制探索过程序参数,随着w值增加,计算进入研究阶段的概率增加大,反知概率减少。
c)探索阶段。炙鹤工具具有很高的视觉能力和很好的嗅觉能力。在AVOA中,炙鹤通式(5)随机搜索不同域。
式中Pi(t+1)—第t+1次迭代秃鹫位置;Pi(t)—第t次迭代秃鹫位置;X—秃鹫随机移动的地方,以保护食物免受其他秃鹫夺取,X=2×rand,rand表示0和1之间的随机数;P1—探索阶段选择参数;rand2、rand3、randP1—0和1之间的随机数;ub、lb—搜索空间上、下限值;其他参数意义同上。
d)开发阶段。AVOA中,开发阶段分为开发一阶段和开发二阶段2种策略,并通过开发阶段选择参数P2、P3决定采用何种策略进行位置更新。开发第一阶段秃鹫位置更新描述如下:
式中rand4、rand5、rand6、randP2—0和1之间的随机数;P2—开发第一阶段更新策略选择参数;其他参数意义同上。
开发第二阶段秃鹫位置更新描述如下:
式中BestV1(t)、BestV2(t)—第t次迭代最优、次优秃鹫位置;randP3—0和1之间的随机数;P3—开发第二阶段更新策略选择参数;Levy(d)—随即游走,其每一步方向完全随机而各向同性,步长为重尾分布;其他参数意义同上。
⛄ 部分代码
function [current_vulture_X] = exploitation(current_vulture_X, Best_vulture1_X, Best_vulture2_X, ...
random_vulture_X, F, p2, p3, variables_no, upper_bound, lower_bound)
% phase 1
if abs(F)<0.5
if rand<p2
A=Best_vulture1_X-((Best_vulture1_X.*current_vulture_X)./(Best_vulture1_X-current_vulture_X.^2))*F;
B=Best_vulture2_X-((Best_vulture2_X.*current_vulture_X)./(Best_vulture2_X-current_vulture_X.^2))*F;
current_vulture_X=(A+B)/2;
else
current_vulture_X=random_vulture_X-abs(random_vulture_X-current_vulture_X)*F.*levyFlight(variables_no);
end
end
% phase 2
if abs(F)>=0.5
if rand<p3
current_vulture_X=(abs((2*rand)*random_vulture_X-current_vulture_X))*(F+rand)-(random_vulture_X-current_vulture_X);
else
s1=random_vulture_X.* (rand()*current_vulture_X/(2*pi)).*cos(current_vulture_X);
s2=random_vulture_X.* (rand()*current_vulture_X/(2*pi)).*sin(current_vulture_X);
current_vulture_X=random_vulture_X-(s1+s2);
end
end
end
⛄ 运行结果
⛄ 参考文献
[1] 师佳楠,夏娇,李宇帅,等.基于Matlab的PID控制算法仿真[J].电子质量, 2020(7):10.
[2] 刘雁林,蔡淮,刘胜国.基于退火遗传算法的Fuzzy-PID温控系统[J].成都信息工程学院学报, 2005(06):72-75.DOI:CNKI:SUN:CDQX.0.2005-06-016.