【智能优化算法】蛛蜂优化算法(Spider Wasp Optimizer,SWO)

蛛蜂优化算法(Spider Wasp Optimizer,SWO)是期刊“ARTIFICIAL INTELLIGENCE REVIEW”(中科院二区 IF=11.6)的2023年智能优化算法

01.引言

蛛蜂优化算法(Spider Wasp Optimizer,SWO)基于对自然界中雌性黄蜂的狩猎、筑巢和交配行为的复制。该算法具有多种独特的更新策略,适用于各种具有不同勘探开发要求的优化问题。

02.优化算法的流程

本文介绍了一种新的优化算法,该算法的灵感来自于某些种类的黄蜂的狩猎和筑巢行为,以及它们的专性幼虫寄生,即在每只蜘蛛的腹部产一个卵。首先,雌性蜘蛛黄蜂在周围环境中寻找合适的蜘蛛,将它们麻痹并拖到预先准备好的合适的巢穴中;这种行为代表了我们提出的算法的第一个灵感:SWO。在找到合适的猎物和巢穴并把它们拖进这些巢穴后,它们会在树上产卵蜘蛛腹部,合上巢。该算法在搜索空间内随机分布一定数量的雌蜂。然后,每只蜘蛛将在不断运动的搜索空间中寻找适合其后代性别的蜘蛛,这是由所有膜翅目昆虫中发现的单倍体性别决定系统根据它们的狩猎行为(即狩猎和跟随行为)决定的。在找到合适的蜘蛛后,雌性蜘蛛黄蜂会在它们的网中心搜寻它们,并在地上搜寻六次,寻找从网上掉下来的蜘蛛(Rayor 1996)。之后,雌黄蜂会攻击猎物,并试图麻痹它,把它拖到预先准备好的巢穴。

然后,她在蜘蛛的腹部下一个蛋后关闭巢穴。简而言之,本工作模拟的黄蜂行为如下:•搜索行为:该行为在优化开始时寻找猎物,寻找适合幼虫生长的蜘蛛。

•跟随和逃跑行为:在发现猎物/蜘蛛后,它们可能会试图逃离中心的球体。因此,雌黄蜂跟着它们,麻痹并拖拽最合适的一个。

•筑巢行为:这将模拟将猎物拖到适合猎物和蛋大小的巢穴的方式。

•交配行为:这种行为模拟了通过在雄性和雌性黄蜂之间使用统一的交叉操作来孵化卵所产生的后代的特性,该操作具有特定的概率,称为交叉率(CR)。

03.论文中算法对比图

04.部分代码

function [Best_score,Best_SW,Convergence_curve]=SWO(SearchAgents_no,Tmax,lb,ub,dim,feval)
%%%%-------------------Definitions--------------------------%%
%%
Best_SW=zeros(1,dim); % A vector to include the best-so-far spider wasp(Solution) 
Best_score=inf; % A Scalar variable to include the best-so-far score
Convergence_curve=zeros(1,Tmax);
ub = ub*ones(1,dim);
lb = lb*ones(1,dim);
%%-------------------Controlling parameters--------------------------%%
%%
TR=0.3; %% Representing the trade-off probability between hunting and mating behaviours.
Cr=0.2; %% The Crossover probability
N_min=20; %% Representing the minimum population size.
%%---------------Initialization----------------------%%
%%
Positions=initialization(SearchAgents_no,dim,ub,lb); % Initialize the positions of spider wasps
t=0; %% Function evaluation counter 
%%---------------------Evaluation-----------------------%%
for i=1:SearchAgents_no%% Test suites of CEC-2014, CEC-2017, CEC-2020, and CEC-2022SW_Fit(i)=feval(Positions(i,:)');% Update the best-so-far solutionif SW_Fit(i)<Best_score % Change this to > for maximization problemBest_score=SW_Fit(i); % Update the best-so-far scoreBest_SW=Positions(i,:); % Update te best-so-far solutionend
end
% Main loop
while t<Tmax%%a=2-2*(t/Tmax); % a decreases linearly from 2 to 0a2=-1+-1*(t/Tmax); % a2 linearly dicreases from -1 to -2 to calculate l in Eq. (8)k=(1-t/Tmax); %% k decreases linearly from 1 to 0 (Eq. (13))JK=randperm(SearchAgents_no); %% A randomly-generated permutation of the search agent's indices if rand<TR %% 3.2	Hunting and nesting behavior% Update the Position of search agentsfor i=1:SearchAgents_nor1=rand(); % r1 is a random number in [0,1]r2=rand(); % r2 is a random number in [0,1]r3=rand(); % r3 is a random number in [0,1]p = rand();  % p is a random number in [0,1]C=a*(2*r1-1);  % Eq. (11) in the paperl=(a2-1)*rand+1;   % The parameter in Eqs. (7) and (8)L=Levy(1); %% L is a Levy-based number vc = unifrnd(-k,k,1,dim); %% The vector in Eq. (12)rn1=randn; %% rn1 is a normal distribution-based number %%O_P=Positions(i,:); %% Storing the current position of the ith solution%%for j=1:size(Positions,2)if i<k*SearchAgents_noif p<(1-t/Tmax) %% 3.2.1	Searching stage (Exploration)if r1<r2m1=abs(rn1)*r1; %% Eq. (5)Positions(i,j)=Positions(i,j)+m1*(Positions(JK(1),j)-Positions(JK(2),j)); %% Eq. (4)elseB=1/(1+exp(l)); %% Eq. (8)m2=B*cos(l*2*pi); %% Eq. (7) Positions(i,j)=Positions(JK(i),j)+m2*(lb(j)+rand*(ub(j)-lb(j))); %% Eq. (6)end %% End Ifelse %% 3.2.2	Following and escaping stage (exploration and exploitation)if r1<r2Positions(i,j)=Positions(i,j)+C*abs(2*rand*Positions(JK(3),j)-Positions(i,j)); %% Eq. (10)elsePositions(i,j)=Positions((i),j).*vc(j); %% Eq. (12)end %% End Ifendelseif r1<r2Positions(i,j)=Best_SW(j)+cos(2*l*pi)*(Best_SW(j)-Positions(i,j));      % Eq. (16)elsePositions(i,j)=Positions(JK(1),j)+r3*abs(L)*(Positions(JK(1),j)-Positions(i,j))+(1-r3)*(rand>rand)*(Positions(JK(3),j)-Positions(JK(2),j));      % Eq. (17)end %% End ifend %% End ifend %% End Inner If%% Return the search agents that exceed the search space's boundsfor j=1:size(Positions,2)if  Positions(i,j)>ub(j)Positions(i,j)=lb(j)+rand*(ub(j)-lb(j));elseif  Positions(i,j)<lb(j)Positions(i,j)=lb(j)+rand*(ub(j)-lb(j));endend   SW_Fit1=feval(Positions(i,:)'); %% The fitness value of the newly generated spider% Memory Saving and Updating the best-so-far solutionif SW_Fit1<SW_Fit(i) % Change this to > for maximization problemSW_Fit(i)=SW_Fit1; % Update the local best fitness% Update the best-so-far solutionif SW_Fit(i)<Best_score % Change this to > for maximization problemBest_score=SW_Fit(i); % Update best-so-far fitnessBest_SW=Positions(i,:); % Update best-so-far positionendelsePositions(i,:)=O_P; %% Return the last best solution obtained by the ith solutionendt=t+1;if t>Tmaxbreak;endConvergence_curve(t)=Best_score;end %% Enter Outer For%% Mating behaviorelse     % Update the Position of search agentsfor i=1:SearchAgents_nol=(a2-1)*rand+1;    %% The parameter in Eqs. (7) and (8)SW_m=zeros(1,dim);  %% including the spider wasp maleO_P=Positions(i,:); %% Storing the current position of the ith solution%% The Step sizes used to generate the male spider with a high quality    if SW_Fit(JK(1))<SW_Fit(i)  %Eq. (23)v1=Positions(JK(1),:)-Positions(i,:);  elsev1=Positions(i,:)-Positions(JK(1),:);endif SW_Fit(JK(2))<SW_Fit(JK(3)) %Eq. (24)v2=Positions(JK(2),:)-Positions(JK(3),:);elsev2=Positions(JK(3),:)-Positions(JK(2),:);end%%rn1=randn; %% rn1 is a normal distribution-based number rn2=randn; %% rn1 is a normal distribution-based number for j=1:size(Positions,2)SW_m(j)= Positions(i,j)+(exp(l))*abs(rn1)*v1(j)+(1-exp(l))*abs(rn2)*v2(j);      % Eq. (22)if(rand<Cr) %% Eq. (21)Positions(i,j)=SW_m(j);endend%% Return the search agents that exceed the search space's boundsfor j=1:size(Positions,2)if  Positions(i,j)>ub(j)Positions(i,j)=lb(j)+rand*(ub(j)-lb(j));elseif  Positions(i,j)<lb(j)Positions(i,j)=lb(j)+rand*(ub(j)-lb(j));endend   SW_Fit1=feval( Positions(i,:)');%% The fitness value of the newly generated spider% Memory Saving and Updating the best-so-far solutionif SW_Fit1<SW_Fit(i) % Change this to > for maximization problemSW_Fit(i)=SW_Fit1; % Update the local best fitness% Update the best-so-far solutionif SW_Fit(i)<Best_score % Change this to > for maximization problemBest_score=SW_Fit(i); % Update best-so-far fitnessBest_SW=Positions(i,:); % Update best-so-far positionendelsePositions(i,:)=O_P; %% Return the last best solution obtained by the ith solutionendt=t+1;if t>Tmaxbreak;endConvergence_curve(t)=Best_score;end %% End Forend %% End If%% Population reduction %%SearchAgents_no=fix(N_min+(SearchAgents_no-N_min)*((Tmax-t)/Tmax)); %% Eq. (25)
end %% End While
Convergence_curve(t-1)=Best_score;
end
% Draw n Levy flight sample
function L=Levy(d)
beta=3/2;
sigma=(gamma(1+beta)*sin(pi*beta/2)/(gamma((1+beta)/2)*beta*2^((beta-1)/2)))^(1/beta);
u=randn(1,d)*sigma;
v=randn(1,d);
step=u./abs(v).^(1/beta);
L=0.05*step;
end

05.本代码效果图

获取代码请关注MATLAB科研小白的个人公众号(即文章下方二维码),并回复智能优化算法本公众号致力于解决找代码难,写代码怵。各位有什么急需的代码,欢迎后台留言~不定时更新科研技巧类推文,可以一起探讨科研,写作,文献,代码等诸多学术问题,我们一起进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/700054.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

下载文件名称乱码或变成了随机码

如图 后端是有正常返回附件名称的,浏览器开发工具中也正常显示了这个数据,但是下载下来的文件名称确实一堆随机码. 其实这个问题的原因是因为跨域 查看console: Refused to get unsafe header "content-disposition" 现象,后端传递到前端的fileName不能被识别,下载…

智慧安防系统:构建更安全的社区环境

随着科技的不断进步&#xff0c;人们的生活质量得到了显著提高。然而&#xff0c;与此同时&#xff0c;社会治安问题也日益凸显。为了维护社会的和谐稳定&#xff0c;提高人们的生活安全感&#xff0c;智慧安防系统应运而生。本文将为您详细介绍智慧安防系统的项目背景、需求分…

安卓悬浮窗----可移动的悬浮窗

目录 前言一、添加对悬浮窗功能的支持二、通过service实现悬浮窗2.1 窗口属性和标志2.2 窗口移动 三、完整代码 前言 记录一下基础的悬浮窗实现&#xff0c;分为几个重要的点进行阐述。 一、添加对悬浮窗功能的支持 app要实现悬浮窗功能&#xff0c;首先app要添加对悬浮窗功…

Properties配置文件和源码

先对测试类进行get方法复写得到getReqType 判断caseinfo等于get时&#xff0c;就是get请求&#xff0c;反之就不是 这里的url和param都是xxx代替&#xff0c;如果直接写内容&#xff0c;每次都会请求 三目运算优化 为什么要用配置文件 test里时url,可以将ip和端口写在配置文…

AD中在DRC后如何显示详细错误(冲突)细节

最近在使用AD过程中出现了一个问题&#xff0c;在这里做一下记录&#xff0c;以便之后查询。 在我进行DRC后&#xff0c;出现了错误&#xff0c;但是当我去放大查找具体原因时发现以前有的细节现在却没有显示了&#xff0c;如下图所示&#xff0c;放大后并未显示详细的错误信息…

【解决】Unity Build 应用程序运行即崩溃问题

开发平台&#xff1a;Unity 2021.3.7f1c1   一、问题描述 编辑器 Build 工程结束&#xff0c;但控制台 未显示 Build completed with a result of Succeeded [时间长度] 信息。该情况下打包流程正常&#xff0c;但应用程序包打开即崩溃。   二、问题测试记录 测试1&#xf…

40V/300mA快速瞬态低压差线性稳压器替代ADP7142

概述(替代ADP7142/LT1962/LT1521/LT3060) PCD4900 是一款 CMOS、低压差&#xff08;LDO&#xff09;线性稳压器&#xff0c;采用 1.9V 至 40V 电源供电&#xff0c;最大输出电流为 300 mA。这款高输入电压 LDO 适用于调节 36V 至 1.2V 供电的高性能模拟和混合信号电路。该器件…

Python实现麦克风录音保存到wav

功能展示&#xff1a; 运行环境&#xff1a; Python: 3.10.4 64-bit 操作系统&#xff1a; 截图环境&#xff1a;win10 64-bit 视频录屏环境&#xff1a;win10 64-bit 功能说明&#xff1a; 点击界面开始按钮开始录音&#xff0c;点击停止按钮结束录音。 源码文件列表&…

CodeGeeX 智能编程助手 6 项功能升级,在Visual Studio插件市场霸榜2周!

CodeGeeX是支持适配Visual Studio 2019的唯一一款国产智能辅助编程工具&#xff0c;已经在Visual Studio趋势上霸榜2周&#xff01; CodeGeeX v1.0.4版本上线Visual Studio插件市场&#xff0c;带来了多项新功能和性能优化&#xff0c;提升编程体验。 新功能亮点速览&#xf…

号卡极团分销管理系统 ue_serve.php 任意文件上传漏洞复现

0x01 产品简介 号卡极团分销管理系统,同步对接多平台,同步订单信息,支持敢探号一键上架,首页多套UI+商品下单页多套模板,订单查询支持实时物流信息、支持代理商自定义域名、泛域名绑定,内置敢探号、172平台、号氪云平台第三方接口以及号卡网同系统对接! 0x02 漏洞概述…

如何快速生成接口文档(swagger和knife4j两种方式及其使用)

如何快速生成接口文档&#xff08;swagger和knife4j两种方式&#xff09; 1、什么是接口文档&#xff1f; 在项目开发中&#xff0c;web项目的前后端分离开发&#xff0c;APP开发&#xff0c;需要由前后端工程师共同定义接口&#xff0c;编写接口文档&#xff0c;之后大家都根…

AI与人类生活的融合:安克创新CEO阳萌的深度洞见

安克创新CEO阳萌分享了他对人工智能未来发展的深刻见解。阳萌不仅深入探讨了大模型技术的应用前景&#xff0c;还对AI与人类生活的融合提出了引人入胜的思考。以下是对这次访谈内容的总结和分析。 大模型技术的现实应用 阳萌提到&#xff0c;尽管大模型在处理通用知识方面表…