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

本文主要是介绍三种策略改进的沙猫群优化算法(MSCSO),与白鲸、蜣螂、麻雀等多种算法进行比较,MATLAB代码...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

沙猫群优化算法(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 
clcPD_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

这篇关于三种策略改进的沙猫群优化算法(MSCSO),与白鲸、蜣螂、麻雀等多种算法进行比较,MATLAB代码...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/461703

相关文章

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

SpringBoot中4种数据水平分片策略

《SpringBoot中4种数据水平分片策略》数据水平分片作为一种水平扩展策略,通过将数据分散到多个物理节点上,有效解决了存储容量和性能瓶颈问题,下面小编就来和大家分享4种数据分片策略吧... 目录一、前言二、哈希分片2.1 原理2.2 SpringBoot实现2.3 优缺点分析2.4 适用场景三、范围分片

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)