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

2024-05-15 05:52

本文主要是介绍【智能优化算法】蛛蜂优化算法(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科研小白的个人公众号(即文章下方二维码),并回复智能优化算法本公众号致力于解决找代码难,写代码怵。各位有什么急需的代码,欢迎后台留言~不定时更新科研技巧类推文,可以一起探讨科研,写作,文献,代码等诸多学术问题,我们一起进步。

这篇关于【智能优化算法】蛛蜂优化算法(Spider Wasp Optimizer,SWO)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time