22年中科院1区算法|白鲸优化器BWO原理及其利用与改进(Matlab/Python)

文章来源于我的个人公众号:KAU的云实验台,主要更新智能优化算法的原理、应用、改进

CEC2005中的测试
在这里插入图片描述

本文KAU将介绍一个2022年发表在中科院1区期刊KBS上的优化算法——白鲸优化算法(Beluga Whale Optimization,BWO)[1]
在这里插入图片描述

该算法由大连理工大学学者Zhong等人[1]于2022年提出,其模拟了白鲸游泳、捕食和鲸落行为,与15种优化算法在30个基准函数和4个真实优化问题上进行测试,均显示出其惊艳的性能,目前也成功应用于机器学习、电力系统经济负荷调度、车间调度等领域。

在这里插入图片描述

图源文献[1]

各位可以跟着作者一起学习一下该算法的巧妙之处,并且,在文章的最后也给出了算法的MATLAB和Python实现。将这样性能优异的算法应用于一些工程问题也能够在一定程度上提升文章的创新性。

00 目录

1 白鲸优化 (BWO) 算法原理

2 代码目录

3 算法性能

4 源码获取

01 白鲸优化 (BWO) 算法原理

在这里插入图片描述

图源文献[1]

BWO同样是基于种群的元启发式算法,其通过白鲸游泳、捕食和鲸落三种行为来实现模型参数的优化,结构简单,并且具有良好的全局和局部搜索能力,在现实工程问题中同样具有优异性能。下面讲解BWO原理:

1.1 初始化

白鲸的位置可视为搜索代理,其遵循随机初始化的方法:

在这里插入图片描述

另外,白鲸通过平衡因子Bf从勘探阶段过渡到开发阶段,这一点和前面提过的哈里斯鹰优化算法HHO很像:
在这里插入图片描述

B0是(0,1)之间的随机数,T是当前迭代次数,Tmax是最大迭代次数,当Bf>0.5时,白鲸将处于勘探阶段,呈镜像游动,当Bf≤0.5时,白鲸将处于开发阶段,进行捕食行为。

1.2 勘探阶段—游泳

BWO的勘探阶段模仿白鲸的成对游泳行为,它们以镜像或同步的方式随机移动,可以表示为:

在这里插入图片描述

其中,pj代表维度d中的一个随机整数,Xipj代表第i头白鲸在pj维度的值,而Xrp1则代表了一头随机白鲸的位置,r1和r2都是随机数,sin()和cos()代表了镜像白鲸的鳍朝向水面,even和odd是偶数和奇数。

1.3 开发阶段—捕食

BWO的开发阶段模仿白鲸的捕食行为,白鲸种群间会相互交流、分享位置信息,从而与附近白鲸合作觅食,同时为提高算法的收敛能力,在开发阶段使用了Levy飞行策略,可以表示为:
在这里插入图片描述

其中,r3和r4为随机数,Xr和Xbest分别为随机白鲸和最佳白鲸的位置,LF为Levy飞行函数,其表达式如下:

在这里插入图片描述

1.4 鲸落

若平衡因子Bf≤Wf,则进入鲸落阶段,鲸落是由于白鲸在迁徙和觅食时容易受到虎鲸和人类活动的捕食,死亡的白鲸将沉入海底,此后为维持种群数目,利用该个体位置、随机个体位置和鲸落步长建立新个体位置:

在这里插入图片描述

其中,r5、r6和r7是随机数,Xstep是鲸落步长,其定义如下:

在这里插入图片描述

其中,Wf代表白鲸个体鲸落概率,该策略也可以引入其他算法以进行解的淘汰优化。

1.5 算法流程

BWO的整个算法已介绍完毕,个人感觉是非常简单清爽的,它的框架和HHO很类似,但除了勘探与开发外,BWO还有鲸落阶段增强算法跳出局部最优的能力,并且经过验证其收敛速度和精度也很不错,想尝试新算法进行应用的朋友不妨试试BWO,后续KAU也会推出BWO的原创改进。该算法的流程图如下:

在这里插入图片描述

1.6 算法利用&改进

BWO的算法框架使得其非常便于嵌入修改或利用,无论是其勘探阶段中的镜像游泳行为还是开发阶段中的捕食行为都可引入其他算法中,同时,鲸落阶段作为算法跳出局部最优的一种策略,也可引入其他算法中作为“变异”策略的一种。

其次,可以改进BWO的平衡因子以使其在复杂优化问题中前期和后期的全局/局部搜索更加平衡,并且其开发阶段的Levy飞行具有长短步长相结合的特点,与局部搜索的十分契合,但同样可以切换为黄金正弦或自适应等具有更佳遍历性的策略,以充分探索优解附近的搜索空间。

02 代码目录

在这里插入图片描述

(左Python,右Matlab)

代码包含MATLAB和Python,Python代码为KAU按照Matlab代码手搓而成,我发现理解算法的程序实现对理解原理同样有帮助。考虑到很多同学获取代码后,MATLAB代码部分有乱码(MATLAB版本问题),有几个方法:

①可以将MATLAB版本改为2020及以上;

②使用乱码解决文件夹中的txt文件即可;

③将m文件用记事本打开,再将记事本中的代码复制到Matlab即可

代码都经过作者重新注释,代码更清爽,可读性强。

03 算法性能

采用标准测试函数初步检验其寻优性能

在MATLAB中,进行标准函数的测试,执行程序结果如下:
在这里插入图片描述

在Python中,进行标准函数的测试,执行程序结果如下:

在这里插入图片描述

MATLAB和Python都进行了F13函数的测试,测试效果都不错,其收敛速度和精度很好。

04 源码获取

在公众号:KAU的云实验台
回复 BWO 即可

后续KAU将更新关于BWO的原创改进算法,感兴趣的话可以关注不迷路~

参考文献

[1] Zhong Changting, Li Gang, Meng Zeng. Beluga whale optimization: A novel nature-inspired metaheuristic algorithm [J]. Knowledge-Based Systems, 2022, 251.

另:如果有伙伴有待解决的优化问题(各种领域都可),可以发我,我会选择性的更新利用优化算法解决这些问题的文章。

如果这篇文章对你有帮助或启发,可以点击右下角的赞/在看(ง •̀_•́)ง(不点也行),你们的鼓励就是我坚持的动力!若有定制需求,可私信作者。

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

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

相关文章

STM32单片机的基本原理与应用(七)

超声波测距实验 基本原理 超声波测距实验是STM32单片机通过控制HC-SR04超声波模块,使其发送超声波,遇到物体反射回超声波来实现距离测量,其原理就是在发射超声波到接收超声波会有一段时间,而超声波在空气中传播的速度为声速&…

【大厂AI课学习笔记】【1.6 人工智能基础知识】(3)神经网络

深度学习是机器学习中一种基于对数据进行表征学习的算法。观测值(例如一幅草莓照片)可以使用 多种方式来表示,如每个像素强度值的向量,或者更抽象地表示成一系列边、特定形状的区域等。 深度学习的最主要特征是使用神经网络作为计算模型。神经网络模型 …

汉服租赁网站:Java技术的文化应用

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

指纹浏览器能为TikTok运营提供哪些便利?

在数字时代,TikTok已成为全球短视频平台的佼佼者,吸引了数以亿计的活跃用户。为了更有效地进行TikTok运营,许多人开始探索先进的工具和技术。本文将重点探讨指纹浏览器如何为TikTok运营提供便利,提高账户管理的效率和安全性。 1.账…

用code去探索理解Llama架构的简单又实用的方法

除了白月光我们也需要朱砂痣 我最近也在反思,可能有时候算法和论文也不是每个读者都爱看,我也会在今后的文章中加点code或者debug模型的内容,也许还有一些好玩的应用demo,会提升这部分在文章类型中的比例 今天带着大家通过代码角度…

Ubuntu Desktop - Details (设备详情)

Ubuntu Desktop - Details [设备详情] 1. OverviewReferences 1. Overview System Settings -> Details -> Overview ​ References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

学习Android的第十天

目录 Android CheckBox 复选框 获得选中的 CheckBox 的值 自定义点击效果 改变文字与选择框的相对位置 修改文字与选择框的距离 Android ToggleButton 开关按钮 改变 ToggleButton 的状态和文本 Android Switch 开关 改变 Switch 的状态和文本 Android CheckBox 复选框…

骑砍战团MOD开发(44)-可编程渲染管线shader编程

一.可编程渲染管线 在GPU进行3D模型投射到2D平面过程中,渲染管线算法对开发者开放,目前支持的编程语言有OpenGL的ARB语言(pp文件),Direct3D的HLSL高级shader编程语言(fx文件). Direct3D提供一下API实现程序加载shader着色器文件: D3DXCreateEffectFromFile(gDevice,"fxfn…

《UE5_C++多人TPS完整教程》学习笔记11 ——《P12 Steam 地区(Steam Regions)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— P12 Steam 地区(Steam Regions)》 的学习笔记,该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版,UP主(也是译者&#…

sheng的学习笔记-docker部署springboot

部署文章目录:目录 docker部署,原理,命令,可以参考:docker原理图,部署,命令 目录 将springboot部署到docker中 遇到过的问题: pom配置 操作步骤 生成jar 构建镜像 查看镜像d…

使用client-only 解决组件不兼容SSR问题

目录 前言 一、解决方案 1.基于Nuxt 框架的SSR应用 2.基于vue2框架的应用 3.基于vue3框架的应用 二、总结 往期回顾 前言 最近在我的单页面SSR应用上开发JSON编辑器功能,在引入组件后直接客户端跳转OK,但是在直接加载服务端渲染的时候一直报这…

java基础(3) 异常处理 -反射

异常处理 处理异常一般有两种 约定返回错误码。,比如读写一个文件,返回code为0则成功,返回1表示不存在,返回2表示没权限…在语言层面上提供一个异常处理机制。(java就属于第二种) java的异常 java内置了一套异常处理机制&…