三种策略改进的沙猫群优化算法(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

相关文章

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要