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

news2024/9/22 23:22:30

在这里插入图片描述

目录

    • 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:pop
    for j = 1:dim
        WSO_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:pop
     fit(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 Parameters
    fmax=0.75; %  Maximum frequency of the wavy motion
    fmin=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:maxIter

    mv=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 position
     for 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<mv
                WSO_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 motion
            end
    end 
    
    %% 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   
            end
         
        end       
end
%     

%% Update global, best and new positions
 
    for i=1:pop 
        % Handling boundary violations
           if WSO_Positions(i,:)>=lb & WSO_Positions(i,:)<=ub%         
            % Find the fitness
              fit(i)=fobj(WSO_Positions(i,:));    
              
             % Evaluate the fitness
            if fit(i)<fitness(i)
                 wbest(i,:) = WSO_Positions(i,:); % Update the best positions
                 fitness(i)=fit(i);   % Update the fitness
            end
            
            %% Finding out the best positions
            if (fitness(i)<Best_fitness)
               Best_fitness=fitness(i);
               Best_pos = wbest(index,:); % Update the global best positions
            end 
            
        end
    end
    Iter_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.coloradmin.cn/o/1518501.html

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

相关文章

【竞技宝】LOL:sheer对位压制369 JDG鏖战三局力克TES

北京时间2024年3月15日,英雄联盟LPL2024春季常规赛继续进行,昨日共进行三场比赛,第三场比赛由TES对阵JDG。本场比赛前两局双方战至1-1平,决胜局JDG前期就打出完美节奏,中期两次团灭TES后轻松取胜,最终JDG鏖战三局击败TES。以下是本场比赛的详细战报。 第一局: TES:鳄鱼、盲僧、…

九千元家用投影仪怎么样:当贝X5 Ultra万元内天花板配置

投影仪市场正在最贱扩大&#xff0c;越来越的投影品牌纷纷加入市场&#xff0c;一方面可以促成市场的发展&#xff0c;但是宁一方面&#xff0c;市场的乱象也在不断扩大。对于数码新手来说选择一款适合的投影仪变成了一件难事&#xff0c;太多的品牌和产品不知道该如何选择&…

L1-5 猜帽子游戏

宝宝们在一起玩一个猜帽子游戏。每人头上被扣了一顶帽子&#xff0c;有的是黑色的&#xff0c;有的是黄色的。每个人可以看到别人头上的帽子&#xff0c;但是看不到自己的。游戏开始后&#xff0c;每个人可以猜自己头上的帽子是什么颜色&#xff0c;或者可以弃权不猜。如果没有…

非常有用的Python 20个单行代码

有用的 Python 单行代码片段&#xff0c;只需一行代码即可解决特定编码问题&#xff01; 在本文中&#xff0c;云朵君将分享20 个 Python 一行代码&#xff0c;你可以在 30 秒或更短的时间内轻松学习它们。这种单行代码将节省你的时间&#xff0c;并使你的代码看起来更干净且易…

数码管动态扫描显示

摸鱼记录 Day_16 (&#xff9f;O&#xff9f;) review 前边已经学习了&#xff1a; 串口接收&#xff1a;Vivado 串口接收优化-CSDN博客 1. 今日摸鱼任务 串口接收数据 并用数码管显示 (&#xff9f;O&#xff9f;) 小梅哥视频&#xff1a; 17A 数码管段码显示与动态扫…

06. Redis架构-哨兵

简介 什么是哨兵 Redis的主从模式下&#xff0c;主节点一旦发生故障便不能提供服务&#xff0c;需要人工干预。手动将从节点晋升为主节点&#xff0c;同时还需要修改客户端配置。 Sentinel&#xff08;哨兵&#xff09;架构解决了Redis主从人工干预的问题。 Redis Sentinel是…

《鸟哥的Linux私房菜》第6章——总结与习题参考答案

目录 一、 简介 二、一些新了解的指令 1.touch- 修改文件时间或创建新文件 2.umask-新建文件/目录的默认权限 3.文件隐藏属性 4.文件特殊权限 5.file-观察文件类型 三、简答题部分 一、 简介 本章介绍了一些常用的文件与目录指令&#xff0c;包括新建/删除/复制/移动/查…

Spring Cloud Alibaba微服务从入门到进阶(一)(SpringBoot三板斧、SpringBoot Actuator)

Springboot三板斧 1、加依赖 2、写注解 3、写配置 Spring Boot Actuator Spring Boot Actuator 是 Spring Boot 提供的一系列用于监控和管理应用程序的工具和服务。 SpringBoot导航端点 其中localhost:8080/actuator/health是健康检查端点&#xff0c;加上以下配置&#xf…

卖木头块(Lc2312)——动态规划

给你两个整数 m 和 n &#xff0c;分别表示一块矩形木块的高和宽。同时给你一个二维整数数组 prices &#xff0c;其中 prices[i] [hi, wi, pricei] 表示你可以以 pricei 元的价格卖一块高为 hi 宽为 wi 的矩形木块。 每一次操作中&#xff0c;你必须按下述方式之一执行切割操…

在SwiftUI中使用Buider模式创建复杂组件

在SwiftUI中使用Buider模式创建复杂组件 我们在前面的博客闲聊SwiftUI中的自定义组件中聊到了如何在SwiftU中创建自定义组件。 在那里&#xff0c;我们创建了一个非常简单的组件RedBox&#xff0c;它将展示内容增加一个红色的边框。 RedBox非常简单&#xff0c;我们用普通的方…

电梯机房秀

每天乘坐电梯&#xff0c;您见过电梯的机房吗&#xff1f;来&#xff0c;跟着小伍去看看吧。Lets go&#xff01; 电梯还能节能呢&#xff0c;您知道么&#xff1f;正好&#xff0c;小伍一块带您看看电梯节能装置(●◡●) 目前电梯节能装置已广泛应用于三菱、富士、日立、奥的斯…

电梯机房秀 系列二

上次小伍带大家看了部分机房的照片&#xff0c;并且简单介绍了一下电梯能量回馈装置&#xff0c;小伙伴们表示很新奇&#xff0c;没看够&#xff0c;今天小伍又来了&#xff0c;带大家看一下电梯能量回馈装置到底安装在电梯什么位置。跟着小伍去看看吧。Lets go&#xff01; 电…

【MySQL基础】MySQL基础操作

文章目录 &#x1f349;什么是数据库&#xff1f;&#x1f353;MySQL数据库&#x1f9c0;1.数据库操作&#x1f346;1.1展示数据库&#x1f346;1.2创建数据库&#x1f346;1.3使用数据库&#x1f346;1.4删除数据库 &#x1f9c0;2.常用数据类型&#x1f9c0;3.数据表操作&…

电视盒子解析安装包失败,安卓4.4安装不了kodi的解决方法,如何安装kodi

有些安卓电视或者电视盒子的安卓系统版本太低、自身架构或者屏蔽了安装其他应用的功能&#xff0c;下载的Kodi apk安装包提示无法安装&#xff0c;解析程序包时出现问题、解析出错无法安装、[INSTALL_FAILED_OLDER_SDK]、此应用与您的电视不兼容。 解决方法&#xff1a; 1、3…

分享一下自己总结的7万多字java面试笔记和一些面试视频,简历啥的,已大厂上岸

分享一下自己总结的7万多字java面试笔记和一些面试视频&#xff0c;简历啥的&#xff0c;已大厂上岸 总结的面试资料&#xff1a;面试资料 SSM SSM搭建的版本有很多&#xff0c;例如有一个版本可以这么搭建&#xff0c;两个核心配置文件web.xml,applicationContext.xml。1.前…

电影票预约系统---c++实现

使用 1.打开mysql对应的数据库-->prodb 打开数据库&#xff1a;mysql -uroot -p 查看数据库&#xff1a;show databases; 使用数据库&#xff1a;use prodb; 查看用户信息&#xff1a;select * from user_info 2.打开sever 3.打开client 编译命令 server.cpp命令 g -…

SpringMVC | SpringMVC中的 “数据绑定”

目录: “数据绑定” 介绍1.简单数据绑定 :绑定 “默认数据” 类型绑定 “简单数据类型” 类型 &#xff08;绑定Java“基本数据类型”&#xff09;绑定 “POJO类型”绑定 “包装 POJO”“自定义数据” 绑定 :Converter (自定义转换器) 2.复杂数据绑定 :绑定数组绑定集合 作者简…

《互联网的世界》第七讲-能源

本想聊聊 tcp 和 quic&#xff0c;但这些都属于术的范畴&#xff0c;变化多端&#xff0c;等孩子们长大了又不知变成什么样子了&#xff0c;趁这段时间在家&#xff0c;还是得讲一些相对不变的东西&#xff0c;或法或势。 从 安阳卖血糕的精巧篦子 想到如何做圆米粉和圆面条&a…

python-绘制五角星

绘制五角星 """ 功能&#xff1a;五角星的绘制 """ import turtledef main():"""主函数"""count 1lenth50while count < 50:lenth lenth 50turtle.forward(lenth) #向前走50turtle.right(144) #向右转…

探索数据结构:双向链表的灵活优势

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty’s blog 1. 前言 前面我们学习了单链表&#xff0c;它解决了顺序表中插入删除需…