独家原创!重磅推出!改进沙猫群优化算法,效果极好!五大经典测试集表现均为最佳!精品力荐!MATLAB代码...

沙猫群优化算法(Sand Cat Swarm Optimization,SCSO)是由Amir Seyyedabbasi和Farzad Kiani于2022年提出的一种新的元启发式算法,该算法是一种模仿自然界中沙猫生存行为的智能优化算法。目前该算法在谷歌学术可以查询被引次数为106次。沙猫群算法的原理简单,但算法的寻优效果确实极好的,而且现在还有很多人对该算法进行改进!

4707e7ecc9aca51d0a32ae90f070a967.jpeg

首先声明:本期算法由作者自行改进,内容与创新点足够支撑写一篇论文!且第一发布渠道就是微信公众号,此前作者并未在其他任何平台进行发布!也就是说这就是第一手资料!需要的速速下载!获取代码的方式放在文末了。

a733e25221b4f9670b7bbde5ac633a27.png

本期推出的新算法为:融合麻雀警戒机制与螺旋搜索的沙猫群优化算法(SSCSO),该简写只是作者为了区分原始沙猫群算法而自己临时起的,大家可以根据自己的想法修改这个简写。

融合麻雀警戒机制是作者在仔细考虑了原始沙猫群算法的基础上,持续研究了很久才成功的。

改进亮点

①在五大经典测试集进行测试

在CEC2005,CEC2017,CEC2019,CEC2021,CEC2022五大经典测试集中,融合麻雀警戒机制与螺旋搜索的沙猫群优化算法(SSCSO)表现均为最佳!

②程序可一键运行,自动生成统计表格。

每个算法各跑30次,在当前目录下可自动生成excel表格,除了对每个算法的平均值,最佳值,标准差,最差值,中位值进行统计外,还有另外一个表格专门统计秩和检验的结果。

③与经典麻雀算法复杂度保持一致

本期推出的算法不会在循环中多次调用适应度函数,没有添加所谓的贪婪策略,反向学习等增添复杂度的手段。

④与多种智能算法进行对比试验

本期算法一共与其余5种效率或热度较高的智能算法进行对比试验。包括:原始沙猫群算法(SCSO),蜣螂算法(DBO),鹈鹕优化算法(POA),减法优化器算法(SABO),哈里斯鹰优化算法(HHO)。

改进策略详解

关于沙猫群算法的原理网上有很多,之前小淘也介绍过沙猫群算法的原理,本文就不再详细介绍,接下来直接上改进策略:

改进点1:加入Cubic混沌映射,增加沙猫群多样性

加入Cubic混沌映射,主要是增加沙猫群初始化的多样性。想要替换为其他混沌映射的小伙伴可以参考这篇文章:10种混沌映射优化灰狼算法,可一键切换

Cubic混沌映射,公式如下:

取x0=0.3,ρ=2.595时,Cubic映射具有较好的混沌遍历性。以下两个图运行plotchaos.m可出现。

d9a2102481f4a1f47a7125f283ba0e5f.png

843c2f7438ee38f02db2741ad6cc8857.png

改进点2:在沙猫群的搜索猎物阶段加入螺旋搜索策略

在搜索猎物阶段加入螺旋搜索策略,使得沙猫拥有多种搜索路径来更好的调整自身位置,从而提高算法的全局搜索性能。

原始沙猫群算法的搜索猎物阶段公式为:

添加螺旋搜索策略因子:

融合螺旋搜索因子后的公式如下:

融入螺旋探索后,沙猫群将以螺旋形式在搜索空间中搜索,扩展了探索未知区域的能力,使算法跳出局部最优的可能性增加,有效提高算法的全局搜索性能。

改进点3:融合麻雀警戒机制

在沙猫群算法第二阶段结束后,增加麻雀警戒机制。沙猫群虽然长时间生活于沙漠之中,然而仍然会被捕食者发现。如野狗、狐狸、狼、一些毒蛇及各种猛禽等等。这些天敌的存在让沙漠猫变得十分敏感而又谨慎:因此笔者认为,将沙猫群融合麻雀的警戒机制,可以使得沙猫群算法更快的提升收敛速度。

当沙猫群意识到危险时,群体边缘的沙猫会迅速向安全区域移动,以获得更好的位置,位于种群中间的沙猫则会随机走动,以靠近其它沙猫。

算法原理会在压缩包中,有专门的word文档讲清楚!

结果展示

在CEC2005中测试:

 f4d76e32d7ff4b58297145f7a6dafb11.png

a469f1988d2d33a0a906d244a1f46262.png

37cc26190999599dd37e15e933d26c27.png

a89ab3ec2204bb2c00afd9e6c8d1bdda.png

517f8158cbf76db44ab331e7298ab5e1.png

这里截了一些图,可以看到在CEC2005函数的测试效果是非常不错的。

将每个算法迭代500次,种群个数设置为30个,每个函数运行30次,求最优值,标准差,平均值,最差值,中位数共五个指标如下,秩和检验结果,箱线图等如下所示。

五种指标结果:

694b7dd98c6d4efde2d2b44c7dcce32a.png

秩和检验结果:

b34e3b0bfd4eb0e7292c3438fbe891e2.png

箱线图:

9b72b451345f37e95c3f2bda41830695.jpeg

在CEC2017中测试:

272d1b35157d2cc7c2fdf2d41b8b9ade.png

12c4c8100b87281cad8a66c6788ee335.png

714c491a4a4c21c4303b548173868215.png

93d4d9686119e2fc5e2aa7b731bfde70.png

a902f84fc63f28caa807f66c0d2a834c.png

cb266c1726f0c41864bf9a4511e3e618.png

 这里截了一些图,可以看到在CEC2019函数的测试效果是非常不错的。

将每个算法迭代500次,种群个数设置为30个,每个函数运行30次,求最优值,标准差,平均值,最差值,中位数共五个指标如下,秩和检验结果,箱线图等如下所示。

五种指标结果:

32610e095f8e3b11c3d8bb63fb7878a6.png

秩和检验结果:

5de17b8b6be7d166ff3c685986c8f9f7.png

箱线图:

59132c6aaad6a2ef9a869a4c173fc4be.png

在CEC2019中测试:

由于篇幅原因这里就只放箱线图了,从箱线图也完全能看出来算法的效果了。

b89b413239eae330f8ba058a55bc1591.png

在CEC2021中测试:

由于篇幅原因这里就只放箱线图了,从箱线图也完全能看出来算法的效果了。

d8edb73bc141dece230de054331bebe1.png

在CEC2022中测试:

由于篇幅原因这里就只放箱线图了,从箱线图也完全能看出来算法的效果了。

a6aa108b4e4b8a19ba9ff7120a684713.png

代码展示

代码目录如下:

3e98f1f540f39ce253c0fcd40a6b655c.png

每个文件子目录如下,以为CEC2005和CEC2017举例展示:

299f880695b5c70c84565861e0c98ece.png

bff3a20486d09d3734d78f39e8363268.png

每个文件都包含一个作图的程序(plotCEC2005_Main.m,plotCEC2017_Main.m)和一个统计指标一键生成excel和箱线图的程序(runsCEC2005_Main.m,runsCEC2017_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 SSCSO algorithm for "run" times
    for nrun=1:run
        [final,position,iter]=SSCSO(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(['SSCSO:最优值:',num2str(zz(1)),' 标准差:',num2str(zz(2)),' 平均值:',num2str(zz(3)),' 中值:',num2str(zz(4)),' 最差值:',num2str(zz(5))]);
    %% Run the DBO algorithm for "run" times
    for nrun=1:run
        [final,position,iter]=DBO(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值,这种概率很小,但是要做一个防止报错
        rs=1;
    end
    rank_sum_resu = [rank_sum_resu,rs]; %统计秩和检验结果
    disp(['DBO:最优值:',num2str(zz(1)),' 标准差:',num2str(zz(2)),' 平均值:',num2str(zz(3)),' 中值:',num2str(zz(4)),' 最差值:',num2str(zz(5))]);
点击下方卡片获取更多代码!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淘个代码_

不想刀我的可以选择爱我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值