鹈鹕优化算法(Pelican Optimization Algorithm,POA)是2022年由Pavel Trojovský和Mohammad Dehghani 提出的,该算法模拟了鹈鹕在狩猎过程中的自然行为。该成果于2022年发表在知名SCI期刊Sensors上。目前谷歌学术上查询被引200次。
关于鹈鹕算法的具体原理公式可以查看这篇文章:智能优化算法之鹈鹕算法(POA),原理公式详解,附matlab代码
首先声明:本期算法由作者自行改进,内容与创新点足够支撑写一篇论文!且第一发布渠道就是微信公众号,此前作者并未在其他任何平台进行发布!也就是说这就是第一手资料!需要的速速下载!获取代码的方式放在文末了。
本期推出的新算法为:融合麻雀警戒机制与柯西变异的鹈鹕优化算法(IPOA),该简写只是为了区分原始鹈鹕算法而自己临时起的,大家可以根据自己的想法修改这个简写。
IPOA是作者在仔细考虑了原始鹈鹕算法公式的基础上,持续研究了很久才成功的。
改进亮点
①在五大经典测试集进行测试
在CEC2005,CEC2017,CEC2019,CEC2021,CEC2022五大经典测试集中,融合麻雀警戒机制与柯西变异的鹈鹕优化算法(IPOA)表现均为最佳!
②程序可一键运行,自动生成统计表格。
每个算法各跑30次,在当前目录下可自动生成excel表格,除了对每个算法的平均值,最佳值,标准差,最差值,中位值进行统计外,还有另外一个表格专门统计秩和检验的结果。
③与原始鹈鹕算法复杂度保持一致
本期推出的算法不会在循环中多次调用适应度函数,没有添加所谓的贪婪策略,反向学习等增添复杂度的手段。且改进前后的鹈鹕算法复杂度保持一致!
④与多种智能算法进行对比试验
本期算法一共与其余5种效率或热度较高的智能算法进行对比试验。包括:原始鹈鹕优化算法(POA),金豺算法(GJO),猫沙群算法(SCSO),减法优化器算法(SABO),北方苍鹰算法(NGO)。选用的这几个算法,都是近期比较热门,谷歌学术引用次数较多的算法,公信力较足!
改进策略详解
接下来直接上改进策略:
改进点1:加入Tent混沌映射,增加鹈鹕的多样性
由于基本鹈鹕优化算法的初始种群是随机生成的,无法保证个体的初始位置在搜索空间中的均匀分布,影响了算法的搜索速度和优化性能。在改进鹈鹕算法的初始化过程中引入了Tent 映射,增加初始种群的遍历性。
其中, 为第 只鹈鹕的位置; 为变量边界下限; 为变量边界上限; 为混沌序列;α是常数,一般取0.3。Tent映射图如下所示:
改进点2:在鹈鹕算法的移向猎物阶段引入非线性权重因子
协调元启发式算法的局部寻优能力和全局搜索能力是影响算法寻优精度与寻优速度的关键因素。由于鹈鹕个体位置的更新与当前鹈鹕的位置息息相关,因此使用非线性惯性权重因子 用于调整鹈鹕位置更新与当前鹈鹕位置信息的相关度。
在算法迭代初期,ω的值较小,寻优个体位置的更新受到当前鹈鹕位置的影响较小,有利于算法在更大的范围内进行搜索,提高算法的全局开发能力;随着寻优过程的推进,ω的值逐渐增大,寻优个体位置的更新受到当前鹈鹕位置的影响变大,缩小算法的寻优范围,有助于算法搜索最优解,不但提高了算法的局部勘探能力,而且提升了算法的收敛速度。
改进点3:在鹈鹕算法的掠过水面阶段引入柯西变异策略
在鹈鹕算法的掠过水面阶段,引入柯西变异策略。每次迭代都比较一下当前鹈鹕适应度值与种群平均适应度值的大小关系。当鹈鹕适应度值比种群平均适应度值高时,表示当前鹈鹕为聚集状态,此时为了增加鹈鹕多样性,采用柯西变异策略。当鹈鹕适应度值比种群平均适应度值低时,采用原始的鹈鹕位置更新方法。
改进点4:融合麻雀警戒机制
在鹈鹕算法掠过水面阶段,增加麻雀警戒机制。将鹈鹕融合麻雀的警戒机制,可以使得鹈鹕算法更快的提升收敛速度。当鹈鹕意识到危险时,群体边缘的鹈鹕会迅速向安全区域移动,以获得更好的位置,位于种群中间的鹈鹕则会随机走动,以靠近其它鹈鹕。
算法原理会在压缩包中,有专门的word文档讲清楚,有详细的原理公式!
结果展示
在CEC2005中测试:
这里截了一些图,可以看到在CEC2005函数的测试效果是非常不错的。了解智能算法的小伙伴一定知道,F6,F12,F13这几个函数最能考验一个算法的优劣,本文推出的新算法在这几个函数的测试均为最佳!将每个算法迭代500次,种群个数设置为30个,每个函数运行30次,求最优值,标准差,平均值,最差值,中位数共五个指标如下,秩和检验结果,箱线图等如下所示。
运行后会自动出现一个excel表格,用来统计五种指标结果:
秩和检验结果:
CEC2005测试集对应的箱线图:
在CEC2017中测试:
这里截了一些图,有维度为30和50的,可以看到在CEC2017函数的测试效果是非常不错的。
将每个算法迭代500次,种群个数设置为30个,每个函数运行30次,求最优值,标准差,平均值,最差值,中位数共五个指标如下,秩和检验结果,箱线图等如下所示。
五种指标结果:
秩和检验结果:
CEC2017测试集对应的箱线图:
在CEC2019中测试:
箱线图:
五种指标统计结果:
秩和检验结果:
在CEC2021中测试:
箱线图:
五种指标结果:
秩和检验结果:
在CEC2022中测试:
由于篇幅原因这里就只放箱线图了,从箱线图也完全能看出来算法的效果了。
代码展示
代码目录如下:
每个文件子目录如下,以为CEC2005举例展示:
每个文件都包含一个作图的程序(plotCEC2005_Main.m)和一个统计指标一键生成excel和箱线图的程序(runsCEC2005_Main.m)
运行runsCEC2005_Main.m后,会直接生成表格,其中result.xls即为最优值,标准差,平均值,最差值,中位数指标统计结果,ranksumresult.xls为秩和检验结果。
部分代码展示:
RESULT=[]; %统计标准差,平均值,最优值等结果
rank_sum_RESULT=[]; %统计秩和检验结果
F = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23];
if box_pp ==1
figure('Name', '箱型图', 'Color', 'w','Position', [50 50 1400 700])
end
for func_num = 1:length(F) %CEC2005有23个函数
% Display the comprehensive results
disp(['F',num2str(F(func_num)),'函数计算结果:'])
[lower_bound,upper_bound,variables_no,fhd]
=Get_Functions_details([
'F'
,num2str(F(func_num))]);
resu = []; %统计标准差,平均值,最优值等结果
rank_sum_resu = []; %统计秩和检验结果
box_plot = []; %统计箱型图结果
%% Run the IPOA algorithm for "run" times
for nrun=1:run
[final,position,iter]=IPOA(pop_size,max_iter,lower_bound,upper_bound,variables_no,fhd);
final_main(nrun)=final;
z1(nrun) = final;
end
box_plot = [box_plot;final_main]; %统计箱型图结果
zz = [min(final_main);std(final_main);mean(final_main);median(final_main);max(final_main)];
resu = [resu,zz];
disp(['IPOA:最优值:',num2str(zz(1)),' 标准差:',num2str(zz(2)),' 平均值:',num2str(zz(3)),' 中值:',num2str(zz(4)),' 最差值:',num2str(zz(5))]);
%% Run the GJO algorithm for "run" times
for nrun=1:run
[final,position,iter]=GJO(pop_size,max_iter,lower_bound,upper_bound,variables_no,fhd);
final_main(nrun)=final;
z2(nrun) = final;
end
box_plot = [box_plot;final_main]; %统计箱型图结果
zz = [min(final_main);std(final_main);mean(final_main);median(final_main);max(final_main)];
resu = [resu,zz];
rs = ranksum(z1,z2);
if isnan(rs) %当z1与z2完全一致时会出现NaN值,这种概率很小,但是要做一个防止报错
end
rank_sum_resu = [rank_sum_resu,rs]; %统计秩和检验结果
disp(['GJO:最优值:',num2str(zz(1)),' 标准差:',num2str(zz(2)),' 平均值:',num2str(zz(3)),' 中值:',num2str(zz(4)),' 最差值:',num2str(zz(5))]);
点击下方卡片获取更多代码!