三种策略改进的沙猫群优化算法(MSCSO),与白鲸、蜣螂、麻雀等多种算法进行比较,MATLAB代码...

文章介绍了沙猫群优化算法(SCSO)的基本原理,包括种群初始化、搜索阶段、捕食阶段以及平衡机制。针对SCSO的局限性,提出了三角形游走、Levy飞行和透镜成像反向学习三种改进策略,增强了全局探索能力和避免局部最优的能力。实验结果显示,改进后的MSCSO算法在与其他五种优化算法的对比中表现出色。
摘要由CSDN通过智能技术生成

沙猫群优化算法(sand cat swarm optimiza⁃ tion,SCSO)是 2022年提出的元启发式优化算法,该算法灵感来源于沙猫的捕食行为,沙猫群会通过搜索阶段和捕食阶段获得食物。其中算法额外使用自适应的rG和R以达到搜索阶段和捕食阶段的无缝 切换。该算法具有寻优能力强、收敛速度快等特点,但仍存在全局探索能力较弱、算法后期易陷入局部最优等缺点。

此文复现一篇于2022年十月由Di Wu提出的沙猫群优化算法(MSCSO),文献采用三种策略对SCSO算法进行改进:三角形游走策略Levy飞行游走策略透镜成像反向学习。三种策略同样适合改进其他任意的智能优化算法。

Part 1 SCSO原理介绍

  • 种群初始化

与所有的元启发式优化算法一样,SCSO算法首先在范围内生成一个均匀分布的随机种群。初始化的具体的公式为:

09178122c9e69d41d5a61406a461db32.png

  • 搜索阶段

沙猫的猎物搜索机制依赖于低频噪声发射 .每只沙猫的表达式为 Xi=(xi1,xi2,xi3,⋯,xid )。前面提到,沙猫可以感知低于2 kHz的低频,在数学模型中,这个值将随着迭代过程的进行从2线性地降低为0,以达到逐渐靠近猎物而不会丢失或跳过的作用。因此为了搜索猎物,假设沙猫的敏感范围为2 kHz到0,SM 模拟了沙猫的听觉特性,其值为2,即

b3680de88b00bbffa1bae32ad3089743.png

其中:t是当前迭代次数;T是最大迭代次数。在搜索步骤中,每个当前搜索代理的位置更新都是基于一个随机位置.这样,搜索代理就能够在搜索空间中探索新的空间。为避免陷入局部最优,每只沙猫的灵敏度范围是不同的,即

74b32e8e39b7f32ef74a5ad38b345659.png

每只沙猫会根据最优解Pbc、自己当前位置Pc和其灵敏度范围r 更新自己的位置.因此沙猫能找到其他最好的猎物位置,新的位置位于当前位置和猎物位置之间,同时随机性保证了算法的低运行成本和低复杂度。

049be2b62021a157dd07eefded8b5059.png

  • 捕食阶段

最优位置Pb与当前位置Pc的距离的计算式为:

04ede561bbbc5c20b2ffd9b56f39f755.png

同时假设沙猫的灵敏度范围是一个圆,这样移动的方向就可以通过圆上的一个随机角度θ确定。由于所选的随机角度在0°到360°之间,所以其值将在−1到1之间。群体中的每个成员都能够在搜索空间中沿着不同的圆周方向移动,移动的距离为Pmd。SCSO算法利用轮盘选择算法为每只沙猫选择一个随机角度,用这种方法,沙猫可以接近狩猎位置,从而达到避免陷入局部最优的效果。迭代过程中的位置更新如图。

7353110adcc13d3b1d5993e88e8efb26.png

  • 平衡机制 

控制搜索阶段和捕食阶段之间转换的主要参数是R,其允许SCSO在两个阶段之间无缝切换。当|R|≤1时,沙猫的下一个位置可以是当前位置与狩猎位置之间的任意位置,否则沙猫的任务是在全局寻找一种新的可能的解决方案 。R和X(t+1)计算式为:

4b759c14b38b2057b9cd5e99ecd49e1a.png

Part 2 改进策略原理介绍

  • 三角形游走策略

在沙猫进行搜索过程中,沙猫会逐渐的向猎物靠近。三角游走策略是沙猫在靠近猎物的同时在周围进行游走。首先,得到沙猫和猎物之间的距离L1,在获得沙猫游走的步长范围L2。

c6cf3f4cc34bc5f95f07c9a4956dd135.png

6477008104fa955d874c614d2ca5c714.png

之后,根据下述公式定义行走的方向f9a6c1540891e52159d8d67b23988e2d.png

0cb5feab5bd7dccb117f1ccbd4aedb38.png

再采用下述公式求出获得沙猫游走后得到的位置。

92d5824e215837c076887f3087db0647.png

b16a7b89adbb57389709486dab28e111.png

  • Levy飞行游走策略

在攻击猎物时,沙猫与猎物的距离十分的接近。Levy飞行是一种非常有效的提供随机因子的数学方法。Levy飞行可以提供步长符合Levy分布的随机游走方法。但Levy飞行有时步长过长,为了更加符合沙猫攻击猎物的行为,在Levy飞行乘以常数 C=0.35,从而减少步长,使沙猫尽可能在猎物旁边进行游走。Levy飞行游走策略的公式如下所示。

9759788164bf7115d7b2ed780ed9c1be.png

  • 透镜成像反向学习策略

透镜成像反向学习主要的思想是以当前坐标为基准通过凸透镜成像的原理生成一个反向位置来扩大搜索范围,这样可以既能跳出当前位置,又可以扩大搜索范围,提高了种群的多样性。基于透镜成像原理的反向学习公式如下:

300ac2c5e8cf8863935955af28a1dad6.png

Part 3 结果展示

同样是在CEC2005函数集上进行测试,将改进的沙猫群优化算法(MSCSO)与白鲸优化算法(BWO),蜣螂优化算法(DBO),麻雀优化算法(SSA),霜冰优化算法(RIME),沙猫群优化算法(SCSO)共六种优化算法进行对比。实验结果如下:

1e62e181f231248dd173b27f90aefbd6.png

0f63c19e1ee35cac7fdb0df7a44201a9.png

c3bc784edc3c1595042181656f697e66.png

346048981423d3d2994907e2ac18124c.png

2a6808917e0cd5d7cab1d2e63420ea28.png

bc082afc3e3a915c5dd553247ab813f4.png

0497f09e885233e558e735c26fcced14.png

随机挑选了几个函数,经过测试效果还是相当不错的,经受住了来自五种算法的考验。

Part 4 代码展示

clear all 
clc


PD_no=100;      %Number of sand cat
F_name='F2';     %Name of the test function
Max_iter=1000;    %Maximum number of iterations
[LB,UB,Dim,F_obj]=CEC2005(F_name); %Get details of the benchmark functions




%% BWO    
[Best_pos,Best_score, BWO_cg_curve ] = BWO(PD_no,Max_iter,LB,UB,Dim,F_obj); % Call BWO
fprintf ('Best solution obtained by BWO: %s\n', num2str(Best_score,'%e  '));
display(['The best optimal value of the objective funciton found by BWO  for ' [num2str(F_name)],'  is : ', num2str(Best_pos)]);


%% DBO    
[Best_pos,Best_score, DBO_cg_curve ] = DBO(PD_no,Max_iter,LB,UB,Dim,F_obj); % Call DBO
fprintf ('Best solution obtained by DBO: %s\n', num2str(Best_score,'%e  '));
display(['The best optimal value of the objective funciton found by DBO  for ' [num2str(F_name)],'  is : ', num2str(Best_pos)]);


%% SSA    
[Best_pos,Best_score, SSA_cg_curve ] = SSA(PD_no,Max_iter,LB,UB,Dim,F_obj); % Call SSA
fprintf ('Best solution obtained by SSA: %s\n', num2str(Best_score,'%e  '));
display(['The best optimal value of the objective funciton found by SSA  for ' [num2str(F_name)],'  is : ', num2str(Best_pos)]);


%% RIME    
[Best_pos,Best_score, RIME_cg_curve ] = RIME(PD_no,Max_iter,LB,UB,Dim,F_obj); % Call RIME
fprintf ('Best solution obtained by RIME: %s\n', num2str(Best_score,'%e  '));
display(['The best optimal value of the objective funciton found by RIME  for ' [num2str(F_name)],'  is : ', num2str(Best_pos)]);


%% SCSO
[BsSCSO,BpSCSO,SCSO_cg_curve]=SCSO(PD_no,Max_iter,LB,UB,Dim,F_obj); % Call MSCSO
fprintf ('Best solution obtained by SCSO: %s\n', num2str(BsSCSO,'%e  '));
display(['The best optimal value of the objective funciton found by SCSO  for ' [num2str(F_name)],'  is : ', num2str(BpSCSO)]);


%% MSCSO
[Best_PD,PDBest_P,MSCSO_cg_curve]=MSCSO(PD_no,Max_iter,LB,UB,Dim,F_obj); % Call MSCSO
fprintf ('Best solution obtained by MSCSO: %s\n', num2str(Best_PD,'%e  '));
display(['The best optimal value of the objective funciton found by MSCSO  for ' [num2str(F_name)],'  is : ', num2str(PDBest_P)]);




CNT=40;
k=round(linspace(1,Max_iter,CNT)); %随机选CNT个点
% 注意:如果收敛曲线画出来的点很少,随机点很稀疏,说明点取少了,这时应增加取点的数量,100、200、300等,逐渐增加
% 相反,如果收敛曲线上的随机点非常密集,说明点取多了,此时要减少取点数量
iter=1:1:Max_iter;
figure('Position',[154   145   894   357]);
subplot(1,2,1);
func_plot(F_name);     % Function plot
title('Parameter space')
xlabel('x_1');
ylabel('x_2');
zlabel([F_name,'( x_1 , x_2 )'])
subplot(1,2,2);       % Convergence plot
h1 = semilogy(iter(k),SCSO_cg_curve(k),'m-^','linewidth',1);
hold on
h2 = semilogy(iter(k),DBO_cg_curve(k),'b-*','linewidth',1);
hold on
h3 = semilogy(iter(k),SSA_cg_curve(k),'k-s','linewidth',1);
hold on
h4 = semilogy(iter(k),RIME_cg_curve(k),'r-o','linewidth',1);
hold on
h5 = semilogy(iter(k),BWO_cg_curve(k),'y-+','linewidth',1);
hold on
h6 = semilogy(iter(k),MSCSO_cg_curve(k),'g-p','linewidth',1);
xlabel('Iteration#');
ylabel('Best fitness so far');
legend('SCSO','DBO','SSA','RIME','BWO','MSCSO');

参考文献

[1] Di Wu, Honghua Rao, Changsheng Wen, et al. Modified Sand Cat Swarm Optimization Algorithm for SolvingConstrained Engineering Optimization Problems[J]. Mathematics. 2022, 10(22), 4350.

[2]贾鹤鸣,王琢,文昌盛等.改进沙猫群优化算法的无人机三维路径规划[J].宁德师范学院学报(自然科学版),2023,35(02):171-179.

完整代码获取方式:点击下方卡片,后台回复关键字,不区分大小写

关键字:MSCSO

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

淘个代码_

不想刀我的可以选择爱我

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

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

打赏作者

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

抵扣说明:

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

余额充值