鲸鱼优化算法的实现
介绍
鲸鱼优化算法是一种用于解决数学和机器学习中优化问题的技术。它基于座头鲸的行为,利用座头鲸在海洋中搜寻猎物、包围猎物和形成气泡网捕猎等行为算子。该算法由Mirjalili和Lewis于2016年提出。
在这篇文章中,我们将深入探讨WOA算法的不同阶段。
座头鲸的历史
座头鲸是地球上最大的哺乳动物之一。它们拥有特殊的捕猎机制,称为气泡网捕猎机制。它们非常聪明,因为它们的大脑含有纺锤细胞和纤维。它们的捕猎分三个步骤:
作为领导者的鲸鱼通过下潜12米并找到猎物,在其周围创建一个螺旋形的气泡。
一位经验丰富的辅助鲸鱼使另一只鲸鱼同步。
所有其他鲸鱼形成队形并试图攻击猎物。
WAO算法
WAO算法的灵感来源于座头鲸的捕猎行为,其阶段如下所示。
1. 探索阶段:搜索模型
在这个阶段,代理(座头鲸)首先根据每个代理的位置随机搜索最佳解决方案。搜索代理的位置使用随机选择的搜索代理进行更新。其数学方程可以表示为:
$$\mathrm{𝑊\: =\: |\: m \: *\:Y_{rand}\:-\:Y\: |}$$
$$\mathrm{ Y\:(t+1) \: =\:Y_{rand}\:-\:a\:*\:W |}$$
其中Yrand是当前种群中随机选择的向量。
[a,m]是系数。如果r是[0,1]范围内的一个随机向量,b则线性地从2维减小到0维,如下所示:
$$\mathrm{ a \:= \:2 * b * r – b}$$
$$\mathrm{ m \:= \:2 * r}$$
2. 模型包围
鲸鱼在捕猎时会包围猎物。当前最佳代理被视为最佳解决方案,接近最优解。通过这种包围行为,其他代理的位置得到更新。
$$\mathrm{𝑊\: =\: |\: m \: *\:Y'_{(t)}\:-\:Y(t)\: |}$$
$$\mathrm{ Y\:(t+1) \: =\:Y'_{(t)}\:-\:a\:*\:W }$$
3. 气泡网和开发
此阶段有两种方法。
收缩包围 - a的值是在[-n,n]之间的随机值,并且a的值在迭代过程中从2减小到0。对于任何一对a,例如[-2,2],搜索代理的新位置定义在当前最佳位置和原始位置之间。
螺旋更新 - 在这种机制中,我们计算鲸鱼和猎物之间的距离。鲸鱼的运动用螺旋方程表示。
$$\mathrm{ X\:(t+1) \: = 𝑊′′*\:e^{pq}\:*\:2\pi\:r\:+\:X'}$$
其中p是[-1,2]之间的随机数,p是螺旋的半径。
Python实现
示例
!pip install pyMetaheuristic from pyMetaheuristic.algorithm import whale_optimization_algorithm as woa from pyMetaheuristic.utils import graphs import numpy as np # Easom Function - target func def easy_om(var_values = [0, 0]): x_1, x_2 = var_values function_value = -np.cos(x_1) * np.cos(x_2) * np.exp(-(x_1 - np.pi) ** 2 - (x_2 - np.pi) ** 2) return function_value plot_parameters = { 'min_values': (-6, -6), 'max_values': (6, 6), 'step': (0.1, 0.1), 'solution': [], 'proj_view': '3D', 'view': 'notebook' } graphs.plot_single_function(target_function = easy_om, **plot_parameters) # Parameter of woa algorithm parameters = { 'hunting_party': 100, 'min_values': (-6, -6), 'max_values': (6, 6), 'iterations': 20, 'spiral_param': 0.4, 'verbose': True } woa_value = woa(target_function = easy_om, **parameters) variab = woa_value[0][:-1] min = woa_value[0][ -1] print('Variables in the woa: ', np.around(variab, 4) , ' Minimum Value Found: ', round(min, 4) ) # Solution plotting woa plot_parameters = { 'min_values': (-6, -6), 'max_values': (6, 6), 'step': (0.1, 0.1), 'solution': [variab], 'proj_view': '3D', 'view': 'notebook' } graphs.plot_single_function(target_function = easy_om, **plot_parameters)
输出
Iteration = 0 f(x) = -2.675287991074243e-09 Iteration = 1 f(x) = -0.5463250054450847 Iteration = 2 f(x) = -0.9616666553027987 Iteration = 3 f(x) = -0.9997741596613828 Iteration = 4 f(x) = -0.9997741596613828 Iteration = 5 f(x) = -0.9997741596613828 Iteration = 6 f(x) = -0.9997741596613828 Iteration = 7 f(x) = -0.9997741596613828 Iteration = 8 f(x) = -0.9997741596613828 Iteration = 9 f(x) = -0.9997741596613828 Iteration = 10 f(x) = -0.9997741596613828 Iteration = 11 f(x) = -0.9997741596613828 Iteration = 12 f(x) = -0.9998973527853484 Iteration = 13 f(x) = -0.9998973527853484 Iteration = 14 f(x) = -0.9999426874370445 Iteration = 15 f(x) = -0.9999426874370445 Iteration = 16 f(x) = -0.9999820386300734 Iteration = 17 f(x) = -0.9999860799836825 Iteration = 18 f(x) = -0.9999903470458049 Iteration = 19 f(x) = -0.9999966229369239 Iteration = 20 f(x) = -0.9999984095434976 Variables in the woa: [3.1414 3.142 ] Minimum Value Found: -1.0
结论
鲸鱼优化算法是一种新颖的解决机器学习或数学和一般科学中优化问题的方法。这种优化技术受到座头鲸及其捕猎习惯的启发,在解决现代问题方面非常有用。