鲸鱼优化算法(whale optimization algorithm,WOA)是由Mirjalili和Lewis[1]于2016年提出的一种新型群体智能优化搜索方法,它源于对自然界中座头鲸群体狩猎行为的模拟,该算法整个过程包含搜索觅食、收缩包围和螺旋更新位置三个阶段。
鲸鱼优化算法的三个种群更新机制相互独立,因此其寻优阶段的全局探索和局部开发过程得以分别运行及控制。此外, 鲸鱼优化算法不需要人为的设置各种控制参数值, 提高了算法的使用效率并降低了应用难度。与其它群体智能优化算法相比, WOA算法结构新颖, 控制参数少,在许多数值优化和工程问题的求解中表现出较好的寻优性能,优于蚁群算法和粒子群算法等智能优化算法[1-2]。
下面对其原理及其编程实现作详细阐述,(ps:最近我也在学习Python,因此在编程实现中,我加入了Python的实现,写的不好请原谅,希望对朋友们有帮助)
1 鲸鱼优化算法原理
2 代码目录
3 算法性能
4 源码获取
鲸鱼优化算法模拟鲸鱼的泡泡网捕食行为。这种攻击是座头鲸包围猎物时,沿着螺旋路径形成独特气泡来完成的[3],如图1所示。
图1 鲸鱼的泡泡网觅食行为
基于上述鲸鱼的泡泡网觅食行为,Mirjalili和Lewis 衍生出了鲸鱼优化算法。
WOA 算法假设鲸鱼捕捉的猎物为最优解,鲸鱼所在位置为潜在解。每次迭代时,通过随机数 p的取值和系数向量 A 的模来决定每头鲸鱼的位置更新策略(更新策略即三种更新机制)。随着迭代的进行,鲸鱼种群不断向最优解靠拢。WOA 算法的3种种群更新机制中,
搜索觅食机制的数学定义为:
式中: X⃗ rand(t)是从当前鲸鱼群体中随机选取的一个鲸鱼个体位置向量, X⃗ (t)是当前的鲸鱼个体位置向量, |C⃗X⃗ rand(t) −X⃗ (t)|表示当前鲸鱼个体和随机选取鲸鱼个体之间的距离向量,系数向量A⃗和C⃗的定义为:
式中控制参数向量⃗a随着迭代次数的增加从2线性减小到0, ⃗r是一个分布于[0, 1]之间的随机向量。
收缩包围机制的数学模型定义如下:
式中: X⃗ best(t)是当前鲸鱼群体中目标函数值最优的 鲸鱼个体位置向量; A⃗ |C⃗ X⃗ best(t) − X⃗ (t)|为当前鲸鱼个体的包围步长, A⃗越小时鲸鱼游走的步长越小。
螺旋更新位置阶段, 其数学模型可表示为:
式中: |X⃗ best(t) − X⃗ (t)|表示当前鲸鱼个体与最佳位置鲸鱼之间的距离向量; 常量系数b决定了鲸鱼个体螺旋前进时的螺旋线形状, b取值为1时即为普通的对数螺旋线, l是[−1, 1]之间的随机数. WOA算法中鲸鱼个体位置向量X⃗ (t)的每一个分量在种群更新时均独立进行。
综上所述,基本WOA算法流程图如下:
图2 WOA流程图
MATLAB
Python
包含MATLAB和Python的程序、乱码解决以及一篇参考文献
考虑到很多同学获取代码后有乱码(matlab版本问题),可以将matlab版本改为2020或2021,或使用乱码解决文件夹中的txt文件即可。
部分代码:
MATLAB:
Python:
采用CEC的测试函数F10来初步检验其寻优性能,F10的数学表达式如下:
在MATLAB中执行程序结果如下:
在Python中执行程序结果如下:
在公众号(KAU的云实验台)回复: WOA (大写字母)
鲸鱼算法同样也有许多针对性的改进方法,作者在后面也会进行介绍和实现。
[1]MIRJALILI S,LEWIS A. The whale optimization algorithm[J].Advances in Engineering Software,2016,95:51一 67.
[2] BUI D T,ABDULLAHI M M,GHAREH S,et al. Fine-tuning of neural computing using whale optimization algorithm for predicting compressive strength of concrete[J]. Engineering with Computers,2021,37(1):701- 712.
[3] Watkins W A, Schevill WE.Aerial observation of feeding behavior in four baleen whales: Eubalaena glacialis,Balaenoptera borealis,Megaptera novaeangliae,and Balaenoptera physalus[J]. Journal of Mammalogy,1979,60(1): 155-163.
另:如果有伙伴有待解决的优化问题(各种领域都可),可以发我,我会选择性的更新利用优化算法解决这些问题的文章。
如果这篇文章对你有帮助或启发,可以点击右下角的赞/在看(ง •̀_•́)ง(不点也行),你们的鼓励就是我坚持的动力!若有定制需求,可私信作者。