【智能算法】白鲨算法(AVOA)原理及实现

在这里插入图片描述

目录

    • 1.背景
    • 2.算法原理
      • 2.1算法思想
      • 2.2算法过程
    • 3.代码实现
    • 4.参考文献


1.背景

2022年,Braik 等人受到白鲨捕食行为启发,提出了非洲秃鹫优化算法(White Shark Optimizer, WSO)。

2.算法原理

2.1算法思想

海洋中白鲨拥有敏锐的感知、听觉和嗅觉,WSO模拟了白鲨探索整个搜索空间来追踪、定位和捕获猎物,并通过白鲨位置的不断更新来达到求解优化问题。

2.2算法过程

速度更新:
这里很像PSO更新方式,作者对控制参数进行了更为复杂的设置。
v k + 1 i = μ [ v k i + p 1 ( w gbest  k − w k i ) × c 1 + p 2 ( w best v k i − w k i ) × c 2 ] v_{k+1}^i=\mu\left[v_k^i+p_1\right.\left(w_{\text{gbest }_k}-w_k^i\right)\times c_1+\left.p_2\left(w_{\text{best}}^{v_k^i}-w_k^i\right)\times c_2\right] vk+1i=μ[vki+p1(wgbest kwki)×c1+p2(wbestvkiwki)×c2]
其中,参数 p 1 , p 2 p_1,p_2 p1,p2表述如下:
p 1 = p m a x + ( p m a x − p m i n ) × e − ( 4 k / K ) 2 p 2 = p m i n + ( p m a x − p m i n ) × e − ( 4 k / K ) 2 \begin{aligned}p_1&=p_{max}+(p_{max}-p_{min})\times e^{-(4k/K)^2}\\p_2&=p_{min}+(p_{max}-p_{min})\times e^{-(4k/K)^2}\end{aligned} p1p2=pmax+(pmaxpmin)×e(4k/K)2=pmin+(pmaxpmin)×e(4k/K)2
位置更新
大白鲨常常在不断寻找潜在猎物,可能位于最佳或次优位置。它们会通过听到猎物移动引起的波浪声或闻到猎物的气味来确定位置。
w k + 1 i = { w k i ⋅ ¬ ⊕ w o + u ⋅ a + l ⋅ b R < m v w k i + v k i / f R ⩾ m v \left.w_{k+1}^i=\left\{\begin{array}{cc}w_k^i\cdot\neg\oplus w_o+u\cdot a+l\cdot b&R<m_v\\w_k^i+v_k^i/f&R\geqslant m_v\end{array}\right.\right. wk+1i={wki¬wo+ua+lbwki+vki/fR<mvRmv
其中, ¬ , ⊕ \lnot, \oplus ¬,分别为否定运算和异或运算。其余参数表述为:
a = s g n ( w k i − u ) > 0 b = sgn ⁡ ( w k i − l ) < 0 w o = ⊕ ( a , b ) a=\mathrm{sgn}(w_{k}^{i}-u)>0 \\ b=\operatorname{sgn}(w_k^i-l)<0 \\ w_o=\oplus(a,b) a=sgn(wkiu)>0b=sgn(wkil)<0wo=(a,b)
向猎物移动
w k + 1 i = w g best k + r 1 D ⃗ w sgn ( r 2 − 0.5 ) r 3 < s s w_{k+1}^i=w_{g\text{best}_k}+r_1\vec{D}_w\text{sgn}(r_2-0.5)\quad r_3<s_s wk+1i=wgbestk+r1D wsgn(r20.5)r3<ss
最优解保留
w k + 1 i = w k i + w k + 1 i 2 × R w_{k+1}^i=\frac{w_k^i+w_{k+1}^i}{2\times R} wk+1i=2×Rwki+wk+1i
伪代码
在这里插入图片描述

3.代码实现

% 白鲨优化算法
function [Best_pos, Best_fitness, Iter_curve, History_pos, History_best] = WSO(pop, maxIter, lb, ub, dim,fobj)
%input
%pop 种群数量
%dim 问题维数
%ub 变量上边界
%lb 变量下边界
%fobj 适应度函数
%maxIter 最大迭代次数
%output
%Best_pos 最优位置
%Best_fitness 最优适应度值
%Iter_curve 每代最优适应度值
%History_pos 每代种群位置
%History_best 每代最优个体位置
%% Convergence curve
Iter_curve=zeros(1,maxIter);
%% 初始化
WSO_Positions = zeros(pop, dim);
for i = 1:popfor j = 1:dimWSO_Positions(i,j) = (ub(j) - lb(j)) * rand() + lb(j);end
end
% initial velocity
v=0.0*WSO_Positions; 
%% 计算适应度
fit=zeros(pop,1);
for i=1:popfit(i,1)=fobj(WSO_Positions(i,:));
end%% 记录
fitness=fit; % Initial fitness of the random positions of the WSO
[Best_fitness,index]=min(fit);wbest = WSO_Positions; % Best position initialization
Best_pos = WSO_Positions(index,:); % initial global position%% WSO Parametersfmax=0.75; %  Maximum frequency of the wavy motionfmin=0.07; %  Minimum frequency of the wavy motion   tau=4.11;  mu=2/abs(2-tau-sqrt(tau^2-4*tau));pmin=0.5;pmax=1.5;a0=6.250;  a1=100;a2=0.0005;
%% 迭代 
for ite=1:maxItermv=1/(a0+exp((maxIter/2.0-ite)/a1)); s_s=abs((1-exp(-a2*ite/maxIter))) ;p1=pmax+(pmax-pmin)*exp(-(4*ite/maxIter)^2);p2=pmin+(pmax-pmin)*exp(-(4*ite/maxIter)^2);%% Update the speed of the white sharks in water  nu=floor((pop).*rand(1,pop))+1;for i=1:size(WSO_Positions,1)rmin=1; rmax=3.0;rr=rmin+rand()*(rmax-rmin);wr=abs(((2*rand()) - (1*rand()+rand()))/rr);       v(i,:)=  mu*v(i,:) +  wr *(wbest(nu(i),:)-WSO_Positions(i,:));%% or                %          v(i,:)=  mu*(v(i,:)+ p1*(gbest-WSO_Positions(i,:))*rand+.... 
%                    + p2*(wbest(nu(i),:)-WSO_Positions(i,:))*rand);          end%% Update the white shark positionfor i=1:size(WSO_Positions,1)f =fmin+(fmax-fmin)/(fmax+fmin);a=sign(WSO_Positions(i,:)-ub)>0;b=sign(WSO_Positions(i,:)-lb)<0;wo=xor(a,b);% locate the prey based on its sensing (sound, waves)if rand<mvWSO_Positions(i,:)=  WSO_Positions(i,:).*(~wo) + (ub.*a+lb.*b); % random allocation  else   WSO_Positions(i,:) = WSO_Positions(i,:)+ v(i,:)/f;  % based on the wavy motionendend %% Update the position of white sharks consides_sng fishing school 
for i=1:size(WSO_Positions,1)for j=1:size(WSO_Positions,2)if rand<s_s      Dist=abs(rand*(Best_pos(j)-1*WSO_Positions(i,j)));if(i==1)WSO_Positions(i,j)=Best_pos(j)+rand*Dist*sign(rand-0.5);else    WSO_Pos(i,j)= Best_pos(j)+rand*Dist*sign(rand-0.5);WSO_Positions(i,j)=(WSO_Pos(i,j)+WSO_Positions(i-1,j))/2*rand;end   endend       
end
%     %% Update global, best and new positionsfor i=1:pop % Handling boundary violationsif WSO_Positions(i,:)>=lb & WSO_Positions(i,:)<=ub%         % Find the fitnessfit(i)=fobj(WSO_Positions(i,:));    % Evaluate the fitnessif fit(i)<fitness(i)wbest(i,:) = WSO_Positions(i,:); % Update the best positionsfitness(i)=fit(i);   % Update the fitnessend%% Finding out the best positionsif (fitness(i)<Best_fitness)Best_fitness=fitness(i);Best_pos = wbest(index,:); % Update the global best positionsend endendIter_curve(ite) = Best_fitness;History_pos{ite} = WSO_Positions;History_best{ite} = Best_pos;
end 
end

在这里插入图片描述

4.参考文献

[1] Braik M, Hammouri A, Atwan J, et al. White Shark Optimizer: A novel bio-inspired meta-heuristic algorithm for global optimization problems[J]. Knowledge-Based Systems, 2022, 243: 108457.

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

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

相关文章

第110讲:Mycat实践指南:指定Hash算法分片下的水平分表详解

文章目录 1.应用指定Hash算法分片的概念2.使用应用指定Hash算法分片对某张表进行水平拆分2.1.在所有的分片节点中创建表结构2.2.配置Mycat实现应用指定Hash算法分片的水平分表2.2.1.配置Schema配置文件2.2.2.配置Rule分片规则配置文件2.2.3.配置Server配置文件2.2.4.重启Mycat …

前置机的使用以及个跳板机介绍

前言 前置机、网闸和摆渡机都是为了内网安全&#xff0c;尤其是银行、券商、电信运营商等的内网核心后台系统的安全&#xff0c;而使用的技术手段。跳板机和堡垒机则是为了运维人员远程访问控制系统而搭建的机器。 一、前置机 1. 作用 前置机&#xff0c;指代的是设置在后台系…

2014-2023年各地级市空气质量指数AQI指数日度数据

2014-2023年各地级市空气质量指数AQI指数日度数据 1、时间&#xff1a;2014-2023.3.8 2、来源&#xff1a;https://www.qweather.com/air/beiliu-101300903.htm 3、指标&#xff1a;统计日期、地区编码ID、地区代码、地区名称、AQI指数、空气质量级别、首要污染物 4、样本量…

教你三指针拿捏链表翻转

类似上图&#xff0c;其实步骤很简单&#xff0c;用三个指针pre&#xff0c;cur&#xff0c;temp&#xff0c;看英文也知道具体含义&#xff0c;前向&#xff0c;当前&#xff0c;和用于保存剩余的链表 &#xff0c;具体看下图&#xff0c;很清晰 class Solution { public:List…

CH343 使用USB转串口发送CAN报文

文章目录 原启UART 走CAN收发器CH343 模拟CAN发送CPP ASIO SocketCANVXCANGithub Link 原启 早些年自动驾驶激光雷达还不支持PTP之类的时间同步, 很多都是用PPS时间同步, 激光雷达一般装的离控制器或者GNSS天线较远, 车上的线束一般数据电源各种都包在一起的, 如果3.3V直接从域…

使用maven打生产环境可执行包

一、程序为什么要打包 程序打包的主要目的是将项目的源代码、依赖库和其他资源打包成一个可执行的文件或者部署包&#xff0c;方便程序的发布和部署。以下是一些打包程序的重要理由&#xff1a; 方便部署和分发&#xff1a;打包后的程序可以作为一个独立的实体&#xff0c;方便…

leetCode刷题 13. 罗马数字转整数

目录 题目&#xff1a; 1. 思路 2. 解题方法 3. 复杂度 4. Code 题目&#xff1a; 罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L …

Vmware虚拟机使用过程中断电后无法重启处理

背景 今天在用新装的虚拟机进行测试的过程中&#xff0c;忽然笔记本关机了&#xff08;没插电源线&#xff09;&#xff0c;重启电脑后发现虚拟机提示“正在使用中“&#xff0c;具体如下所示&#xff1a; 解决 在相关虚拟机文件夹内查找以 .lck 结尾的文件&#xff0c;名称一…

java中Volatile关键字的原理

Volitile的主要作用就是保持内存可见性和防止指令重排序。我分别说一下这两个作用的实现原理 1.保持内存可见性的实现原理 volatile内存可见性主要通过lock前缀指令实现的&#xff0c;它会锁定当前内存区域的缓存&#xff0c;并且立即将当前缓存的数据写入到主内存&#xff0…

记录dockers中Ubuntu安装python3.11

参考&#xff1a; docker-ubuntu 安装python3.8,pip3_dockerfile ubuntu22 python3.8-CSDN博客

解释“RNN encode-decode”

“RNN encode-decode” 涉及使用循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;来执行编码和解码操作。这种结构常用于处理序列数据&#xff0c;例如自然语言处理、语音识别和时间序列预测等任务。 以下是 “RNN encode-decode” 的一般概念&a…

西门子PLC常用底层逻辑块分享_单/双输出电磁阀

文章目录 前言一、功能概述二、单输出电磁阀程序编写1.创建自定义数据类型2.创建FB功能块“单输出电磁阀”3.编写程序 三、双输出电磁阀程序编写1.创建自定义数据类型2.创建FB功能块“双输出电磁阀”3.编写程序 前言 本文分享一个自己编写的电磁阀控制逻辑块。 一、功能概述 …

【代码随想录】【二叉树】补day21:二叉搜索树的最小绝对差 、二叉搜索树中的众数 、二叉树的最近公共祖先

最小绝对差 1.申请一个数组&#xff0c;比较两两之间最小的差值 def getresult3(self,node:TreeNode):self.nums[]self.getMinimumDifference(node)mindifferencefloat(inf)for i in range(len(self.nums)-1):mindself.nums[i1]-self.nums[i]if mindifference>mind:mindiff…

流程控制 JAVA语言基础

任何简单或复杂的算法都可以由三种基本结构组成&#xff1a;顺序结构&#xff0c;选择结构&#xff0c;循环结构。 顺序结构 比较一般的结构&#xff0c;程序从上到下执行。 选择结构 我们从最简单的单路选择开始&#xff0c;符合条件的进入语句序列&#xff0c;不符合条件的…

【C++map和set容器:AVL树、红黑树详解并封装实现map和set】

[本节目标] map和set底层结构 AVL树 红黑树 红黑树模拟实现STL中的map和set 1.底层结构 前面对map/multimap/set/multiset进行了简单的介绍&#xff0c;在其文档介绍中发现&#xff0c;这几个容器有个 共同点是&#xff1a;其底层都是按照二叉搜索树来实现的&#xff0c;但…

高并发缓存策略大揭秘:面试必备的缓存更新模式解析

在高并发场景中&#xff0c;缓存能抵挡大量数据库查询&#xff0c;减少数据库压力&#xff0c;对于缓存更新通常有以下几种模式可以选择&#xff1a; cache asideread/write throughwrite behind caching cache aside模式 Cache-aside模式是一种常用的用于管理缓存的模式。它…

RocketMQ学习笔记四(黑马)

课程地址&#xff1a; 1.Rocket第二章内容介绍_哔哩哔哩_bilibili &#xff08;视频35~88&#xff0c;搭建了一个电商项目&#xff09; 待学&#xff0c;待完善。

瑞_23种设计模式_策略模式

文章目录 1 策略模式&#xff08;Strategy Pattern&#xff09;★1.1 介绍1.2 概述1.3 策略模式的结构1.4 策略模式的优缺点1.5 策略模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 JDK源码解析&#xff08;Comparator&#xff09; &#x1f64a…

mysql中用逗号隔开的某字段,如何判断其他表的字段值是否在这个字段中

因为要增加需求&#xff0c;需要将线上表中老数据&#xff0c;修改为新数据的规则。 线上两张表&#xff0c;sequence_number中is_use有3作废、2到期状态&#xff0c;需要根据这个状态和school_ai_authorization中的is_deleted修改新增的state字段。 sequence_number表结构&…

温暖如初春:新生儿脸红小贴士

引言&#xff1a; 新生儿脸红是许多父母热切期待的瞬间之一。这种可爱的现象不仅令人陶醉&#xff0c;还可能是宝宝良好健康的标志。然而&#xff0c;在欣喜之余&#xff0c;父母也需要留意脸红背后的可能原因和注意事项&#xff0c;以确保宝宝的舒适和健康。 1. 探寻原因&…