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

news2024/11/17 14:54:15

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaFX布局-VBox

JavaFX布局-VBox 常用属性alignmentspacingchildrenmarginpaddingvgrow 实现方式Java实现Xml实现 综合案例 VBox按照垂直顺序从上到下排列其子节点改变窗口大小,不会该部整体布局窗口太小会遮住内部元素&#xff0c;不会产生滚动条 常用属性 alignment 对齐方式 参考枚举值&…

C++ 多态性

一 多态性的分类 编译时的多态 函数重载 运算符重载 运行时的多态 虚函数 1 运算符重载的引入 使用C编写程序时&#xff0c;我们不仅要使用基本数据类型&#xff0c;还要设计新的数据类型-------类类型。 一般情况下&#xff0c;基本数据类型的运算都是运算符来表达&#x…

识别公式的网站都有哪些?分享3个专业的工具!

在数字化时代&#xff0c;公式识别已成为一项重要技能。无论是学生、教师还是科研人员&#xff0c;都可能需要借助公式识别网站来快速准确地获取公式信息。那么&#xff0c;市面上到底有哪些值得一试的识别公式网站呢&#xff1f;本文将为您一一揭晓。 FUNAI FUNAI的公式识别功…

2024洗地机爆款榜单,哪个牌子洗地机值得买?助你轻松选对洗地机

随着现代生活节奏的加快&#xff0c;人们对于家庭清洁的需求也越来越高。家用洗地机作为一种高效清洁工具&#xff0c;能够帮助您轻松应对家庭地板的清洁问题&#xff0c;节省时间和精力。然而&#xff0c;在选择洗地机时&#xff0c;究竟哪个牌子的洗地机值得买呢&#xff1f;…

2024年网络安全岗位缺口已达100万,你该不会还不知道如何入门吧?

我发现最近安全是真的火&#xff0c;火到不管男女老少都想入门学一下。但是&#xff0c;要是真的问起他们&#xff0c;“你觉得网络安全是什么&#xff1f;为什么想学&#xff1f;”&#xff0c;十个人里不见得有一个人能逻辑清晰、态度坚定地回答出来。 作为一个时刻关注行业…

暗黑4可以搬砖吗?暗黑4怎么搬砖 搬砖攻略

暗黑4可以搬砖吗&#xff1f;暗黑4怎么搬砖 搬砖攻略 暗黑破坏神4属于是暴雪旗下一款经典游戏IP&#xff0c;在全世界有着广泛的玩家群体&#xff0c;更是在今年暴雪国服宣布回归之后&#xff0c;吸引了一大批新玩家加入。今天小编就为大家带来暗黑4的详细搬砖教程。 现在我们…

Leetcode—100296. 两个字符串的排列差【简单】

2024每日刷题&#xff08;135&#xff09; Leetcode—100296. 两个字符串的排列差 实现代码 class Solution { public:int findPermutationDifference(string s, string t) {int maps[26];int mapt[26];for(int i 0; i < s.size(); i) {int idxs s[i] - a;int idxt t[i…

服务器被后台爆破怎么处理

服务器后台遭受密码爆破攻击是网络安全中常见的威胁之一&#xff0c;这种攻击通过不断尝试不同的用户名和密码组合来破解系统登录凭证&#xff0c;一旦成功&#xff0c;攻击者便能非法访问系统资源。 本文将介绍如何识别此类攻击&#xff0c;并采取有效措施进行防御&#xff0c…

《四》系统模块整体功能关联与实现

在上一篇里&#xff0c;我们完成了动作的创建&#xff0c;那么这一次&#xff0c;我们把它加载到界面上&#xff0c;把需要是实现的动作都加上。 MyWord::MyWord(QWidget *parent): QMainWindow(parent) {mdiAreanew QMdiArea;mdiArea->setHorizontalScrollBarPolicy(Qt::S…

微信加粉计数器

1.采用非注入式开发&#xff0c;支持无限多开 2.每个账号都有独立的分组&#xff0c;实时远程网页数据分享 3.后台功能强大&#xff0c;操作简单&#xff0c;自动去重复&#xff0c;准确计数分秒不差

ubuntu使用交叉编译链编译FFTW动态库

一、从官方下载FFTW压缩包 1. 在 /usr/local 新建目录fftw目录&#xff0c; 将压缩包放在 /usr/local/fftw 中解压。 2.打开解压后的文件 导入环境变量&#xff1a; export PATH$PATH:/home/theer/workspace/a64/cqa64_linuxqt5.8_bv3s/buildroot-2017.02.3/output/host/…

C语言的打字小游戏

目录 游戏内容 伪代码 main 函数 随机字符串 匹配逻辑 用户决定是否继续或退出游戏 完整代码 从0开始记录我的学习历程&#xff0c;我会尽我所能&#xff0c;写出最最大白话的文章&#xff0c;希望能够帮到你&#xff0c;谢谢。 提示&#xff1a;文章作者为初学者&#xf…

HTML常用标签-布局相关标签

布局标签 div标签 俗称"块",主要用于划分页面结构,做页面布局 自己独占一行的元素&#xff0c;设置宽高生效 span标签 俗称"层",主要用于划分元素范围,配合CSS做页面元素样式的修饰 不会自己独占一行的元素&#xff0c;设置宽高不生效 代码 <div style&…

数据库SQL编写规范-SQL书写规范整理(SQL语句书写规范全解-Word原件)

编写本文档的目的是保证在开发过程中产出高效、格式统一、易阅读、易维护的SQL代码。 1 编写目 2 SQL书写规范 3 SQL编写原则 软件全套精华资料包清单部分文件列表&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说…

如何使用AzurEnum快速枚举Microsoft Entra ID(Azure AD)

AzurEnum是一款针对Azure的安全工具&#xff0c;在该工具的帮助下&#xff0c;广大研究人员可以轻松快速地枚举Microsoft Entra ID&#xff08;Azure AD&#xff09;。 该工具基于纯Python 3开发&#xff0c;可以在Windows和Linux系统上运行&#xff0c;但考虑到性能和稳定性&a…

iOS——runtime

什么是runtime 我们都知道&#xff0c;将源代码转换为可执行的程序&#xff0c;通常要经过三个步骤&#xff1a;编译、链接、运行。 C 语言 作为一门静态类语言&#xff0c;在编译阶段就已经确定了所有变量的数据类型&#xff0c;同时也确定好了要调用的函数&#xff0c;以及函…

数据库的存储过程、函数与触发器

使用下面的场景来引入 1.创建表 CREATE DATABASE staff; USE staff; CREATE TABLE employee(id INT NOT NULL AUTO_INCREMENT,userName VARCHAR(255),birthDate DATE,idCard VARCHAR(255),loginName VARCHAR(255),PASSWORD VARCHAR(255),mobile VARCHAR(255),email VARCHAR(2…

【综述】人工智能、机器学习、深度学习

文章目录 前言 概念 算法 训练 性能 应用 参考资料 前言 见《初试人工智能》 概念 人工智能系统&#xff08;artifieial intelligence system&#xff09;&#xff0c;针对人类定义的给定目标&#xff0c;产生诸如内容、预测、推荐或决策等输出的一类工程系统。该工程系…

MPEG-4 AVC/H.264高清编码器 JR3211P

概述 JR3211P MPEG-4 AVC/H.264高清编码器是一款专业的高清音/视频编码产品。该产品支持几乎所有模拟及数字音/视频输入接口&#xff0c;包括CVBS、YPbPr、S-video、SD/HD-SDI、HDMI视频输入接口、平衡模拟音频&#xff08;XLR&#xff09;、非平衡模拟音频&#xff08;RCA&am…

Qwen-VL环境搭建推理测试

引子 这几天阿里的Qwen2.5大模型在大模型圈引起了轰动&#xff0c;号称地表最强中文大模型。前面几篇也写了QWen的微调等&#xff0c;视觉语言模型也写了一篇CogVLM&#xff0c;感兴趣的小伙伴可以移步Qwen1.5微调-CSDN博客。前面也写过一篇智谱AI的视觉大模型&#xff08;Cog…