【智能优化算法】蛛蜂优化算法(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-2022
    SW_Fit(i)=feval(Positions(i,:)');
    % Update the best-so-far solution
    if SW_Fit(i)<Best_score % Change this to > for maximization problem
       Best_score=SW_Fit(i); % Update the best-so-far score
       Best_SW=Positions(i,:); % Update te best-so-far solution
    end
end
% Main loop
while t<Tmax
    %%
    a=2-2*(t/Tmax); % a decreases linearly from 2 to 0
    a2=-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 agents
       for i=1:SearchAgents_no
          r1=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 paper
          l=(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_no
               if p<(1-t/Tmax) %% 3.2.1	Searching stage (Exploration)
                   if r1<r2
                      m1=abs(rn1)*r1; %% Eq. (5)
                      Positions(i,j)=Positions(i,j)+m1*(Positions(JK(1),j)-Positions(JK(2),j)); %% Eq. (4)
                   else
                      B=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 If
               else %% 3.2.2	Following and escaping stage (exploration and exploitation)
                   if r1<r2
                      Positions(i,j)=Positions(i,j)+C*abs(2*rand*Positions(JK(3),j)-Positions(i,j)); %% Eq. (10)
                   else
                      Positions(i,j)=Positions((i),j).*vc(j); %% Eq. (12)
                   end %% End If
               end
             else
                 if r1<r2
                     Positions(i,j)=Best_SW(j)+cos(2*l*pi)*(Best_SW(j)-Positions(i,j));      % Eq. (16)
                 else
                     Positions(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 if
            end %% End if
          end %% End Inner If
          %% Return the search agents that exceed the search space's bounds
          for 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));
              end
          end   
          SW_Fit1=feval(Positions(i,:)'); %% The fitness value of the newly generated spider
          % Memory Saving and Updating the best-so-far solution
          if SW_Fit1<SW_Fit(i) % Change this to > for maximization problem
               SW_Fit(i)=SW_Fit1; % Update the local best fitness
               % Update the best-so-far solution
               if SW_Fit(i)<Best_score % Change this to > for maximization problem
                 Best_score=SW_Fit(i); % Update best-so-far fitness
                 Best_SW=Positions(i,:); % Update best-so-far position
               end
          else
               Positions(i,:)=O_P; %% Return the last best solution obtained by the ith solution
          end
          t=t+1;
          if t>Tmax
              break;
          end
          Convergence_curve(t)=Best_score;
       end %% Enter Outer For
       %% Mating behavior
    else     
       % Update the Position of search agents
       for i=1:SearchAgents_no
           l=(a2-1)*rand+1;    %% The parameter in Eqs. (7) and (8)
           SW_m=zeros(1,dim);  %% including the spider wasp male
           O_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,:);  
           else
              v1=Positions(i,:)-Positions(JK(1),:);
           end
           if SW_Fit(JK(2))<SW_Fit(JK(3)) %Eq. (24)
              v2=Positions(JK(2),:)-Positions(JK(3),:);
           else
              v2=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);
               end
           end
           %% Return the search agents that exceed the search space's bounds
           for 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));
              end
           end   
           SW_Fit1=feval( Positions(i,:)');%% The fitness value of the newly generated spider
           % Memory Saving and Updating the best-so-far solution
           if SW_Fit1<SW_Fit(i) % Change this to > for maximization problem
               SW_Fit(i)=SW_Fit1; % Update the local best fitness
               % Update the best-so-far solution
               if SW_Fit(i)<Best_score % Change this to > for maximization problem
                 Best_score=SW_Fit(i); % Update best-so-far fitness
                 Best_SW=Positions(i,:); % Update best-so-far position
               end
           else
               Positions(i,:)=O_P; %% Return the last best solution obtained by the ith solution
           end
           t=t+1;
           if t>Tmax
              break;
           end
           Convergence_curve(t)=Best_score;
       end %% End For
    end %% 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科研小白的个人公众号(即文章下方二维码),并回复智能优化算法本公众号致力于解决找代码难,写代码怵。各位有什么急需的代码,欢迎后台留言~不定时更新科研技巧类推文,可以一起探讨科研,写作,文献,代码等诸多学术问题,我们一起进步。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

揭秘奇葩环境问题:IDEA与Maven版本兼容性解析

1.问题描述 最近在实现通过Java爬虫获取网页源码&#xff0c;然后紧接着将源码转换为图片上传到OSS服务器&#xff0c;其中探索了很多办法&#xff0c;但是在实现过程中遇到一个奇葩问题&#xff0c;就是我无论下载任何Maven依赖&#xff0c;都无法正常下载&#xff0c;简直是…

MYSQL DBA运维实战 SQL2

1.DML:通过SQL语句中的DML语言来实现数据的操作。 insert实现数据的插入。 update实现数据的更新。delete实现数据的删除。 插入&#xff0c;完全插入insert into 表名 values(值) 非完全插入:insert into 表名(列名&#xff0c;列名) values(值) 更新&#xff0…

暗区突围TWITCH掉宝关联帐号不了 无法关联帐号 关联不上

Twitch&#xff0c;作为全球知名的游戏直播平台&#xff0c;常常携手热门游戏如《暗区突围》举办互动活动&#xff0c;为玩家带来独特的参与体验。在这个过程中&#xff0c;“绑定关联”成为了连接直播观众与游戏世界的桥梁。简单来说&#xff0c;Twitch绑定关联《暗区突围》指…

揭秘在线VR展馆,企业如何通过虚拟现实技术增强客户体验和互动?

一、在线VR展馆简介&#xff1a;虚拟展示的未来 在线VR展馆通过虚拟现实技术构建的三维展览空间&#xff0c;让用户能够在任何地点通过网络接入体验沉浸式的展览环境。这种技术运用了先进的3D建模和虚拟现实技术&#xff0c;使观众能够在虚拟世界中自如地浏览和互动。 二、企…

user32.dll怎么修复?几种修复user32.dll丢失的详细步骤

user32.dll怎么修复&#xff1f;几种修复user32.dll丢失的详细步骤user32.dll是Windows操作系统中的一个核心动态链接库文件&#xff0c;它主要负责处理图形用户界面&#xff08;GUI&#xff09;相关的功能。这个文件是Windows API&#xff08;应用程序编程接口&#xff09;的一…

Oracle 流stream将删除的数据保存

Oracle 流stream将删除的数据保存 --实验的目的是捕获hr.employees表的删除行&#xff0c;将删除行插入到emp_del表中。 --设置初始化参数 AQ_TM_PROCESSES1 COMPATIBLE9.2.0 LOG_PARALLELISM1 --查看数据库的名称&#xff0c;我的为ora9,将以下的ora9全部替换为你的数据库名称…

7个实用的Python自动化测试框架

前言 随着技术的进步和自动化技术的出现&#xff0c;市面上出现了一些自动化测试框架。只需要进行一些适用性和效率参数的调整&#xff0c;这些自动化测试框架就能够开箱即用&#xff0c;大大节省了开发时间。而且由于这些框架被广泛使用&#xff0c;他们具有很好的健壮性&…

6款日常精选手机APP推荐!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 1.全能相机软件——无他相机 无他相机App是一款完全免费且功能全面的美颜相机软件。这款相机应用集自拍、美颜、图片编辑、风格化模板、流行贴…

1146 -Table ‘performance schema.session variables‘ doesn‘t exist的错误解决

一、问题出现 今天在本地连数据库的时候&#xff0c;发现这个问题&#xff0c;哎呦我擦&#xff0c;差点吓死了 二、解决办法 1&#xff09;找文件 用everything搜一下MySQL Server 5.7 然后去Windows服务找一下MySQL配置文件的具体路径 如果知道那最好&#xff0c;不知道那…

数据结构 顺序表1

1. 何为顺序表&#xff1a; 顺序表是一种线性数据结构&#xff0c;是由一组地址连续的存储单元依次存储数据元素的结构&#xff0c;通常采用数组来实现。顺序表的特点是可以随机存取其中的任何一个元素&#xff0c;并且支持在任意位置上进行插入和删除操作。在顺序表中&#xf…

【DDR 终端稳压器】Sink and Source DDR Termination Regulator [C] S0 S1 S2 S3 S4 S5 6状态

TPS51200A-Q1 器件通过 EN 功能提供 S3 支持。EN引脚可以连接到终端应用中的SLP_S3信号。当EN 高电平&#xff08;S0 状态&#xff09;时&#xff0c;REFOUT 和 VO 引脚均导通。当EN 低电平&#xff08;S3状态&#xff09;时&#xff0c;VO引脚关断并通过内部放电MOSFET放电时…

【AI Engine Series】[AI Engine Series 3 - Introduction to AI Engine kernels

AI Engine Series 3 - Introduction to AI Engine kernels 双击summary 进入analyzer AI Engine Series 6 - Analyzing AI Engine compilation results in Vitis Analyzer (2022.1 update) [connectivity] stream_connectM_AXIS_ADDER:ai_engine_0.DataIn1 stream_connecta…

C语言(指针)7

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸各位能阅读我的文章&#xff0c;诚请评论指点&#xff0c;关注收藏&#xff0c;欢迎欢迎~~ &#x1f4a5;个人主页&#xff1a;小羊在奋斗 &#x1f4a5;所属专栏&#xff1a;C语言 本系列文章为个人学习笔记&#x…

网络安全ctf比赛_学习资源整理,解题工具、比赛时间、解题思路、实战靶场、学习路线,推荐收藏!...

对于想学习或者参加CTF比赛的朋友来说&#xff0c;CTF工具、练习靶场必不可少&#xff0c;今天给大家分享自己收藏的CTF资源&#xff0c;希望能对各位有所帮助。 CTF在线工具 首先给大家推荐我自己常用的3个CTF在线工具网站&#xff0c;内容齐全&#xff0c;收藏备用。 1、C…

算法练习第21天|216.组合总和|||、17.电话号码的字母组合

216.组合总和 III 216. 组合总和 III - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/combination-sum-iii/ 题目描述&#xff1a; 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9每个数字 最多使用一…

ICode国际青少年编程竞赛- Python-5级训练场-带参数函数

ICode国际青少年编程竞赛- Python-5级训练场-带参数函数 1、 def get_item(a):Dev.step(a)Dev.step(-a) get_item(4) Spaceship.step(2) get_item(2) Spaceship.step(3) get_item(5) Spaceship.step(2) get_item(3) Spaceship.step(3) get_item(4)2、 def get_item(a): D…

超链接a的应用

主要作用&#xff1a;从当前页面进行跳转 1.跳转到页面 <!-- 跳转到其他页面 --><a href"#" target"_blank">鸡你太美</a> <!-- 跳转到本地页面 --><a href"#" target"_self">鸡你太美</a> 2.跳转…

AI大事记(持续更新)

文章目录 前言 一、人工智能AI 1.基本概念 2.相关领域 2.1基础设施 2.2大模型 2.3大模型应用 二、大事记 2024年 2024-05-14 GPT-4o发布 2024-02-15 Sora发布 2023年 2023-03-14 GPT-4.0发布 2022年 2022-11-30 ChatGPT发布 总结 前言 2022年11月30日openai的…

jdk安装多个版本,但是java -version显示最早安装的版本,换掉Path或者JAVA_HOME不生效问题

问题一&#xff1a;当你的电脑上又多个jdk版本&#xff0c;如17 或者8时&#xff0c;使用命令行 java -version显示最早安装的&#xff0c;如下图所示&#xff1a;环境变量配置的17&#xff0c;但是命令行显示的是8。 原因&#xff1a;windows电脑装jdk17后 会在你的环境变量…

C for Graphic:遮罩显示(一)

模板缓冲一般用于遮罩渲染的功能&#xff0c;其原理很以前聊过&#xff08;模板缓冲原理&#xff09;&#xff0c;就不再啰嗦了。 现在实现一个功能&#xff1a;使用一个长方体&#xff08;或任意物体&#xff09;遮罩渲染对象&#xff08;比如一个球&#xff09;。 …