鲸鱼优化算法的实现
介绍
鲸鱼优化算法是数学和机器学习中解决优化问题的一种技术。它基于座头鲸的行为,利用座头鲸在海洋中捕食、包围猎物和制造泡沫网的操作。该算法由Mirjalili和Lewis于2016年提出。
在本文中,我们将介绍WOA算法的不同阶段。
座头鲸的历史
座头鲸是地球上最大的哺乳动物之一。它们有一种特殊的捕猎机制,称为泡泡网捕猎机制。它们很聪明,因为它们的大脑含有锭细胞和纤维。它们分三步进行捕猎−
- 领导者座头鲸通过向下潜12米并找到猎物,在猎物周围创建一个螺旋状的泡泡。
-
一只有经验的座头鲸协助其他座头鲸进行同步。
-
所有其他座头鲸形成一个队列并试图攻击猎物。
WOA算法
受座头鲸捕食行为启发的WOA算法具有以下阶段。
1. 探索阶段:搜索模型
在这个阶段,代理(座头鲸)首先根据每个代理的位置随机搜索最佳解。搜索代理的位置使用随机选择的搜索代理进行更新。数学方程可以表示为
\mathrm{𝑊: =: |: m : *:Y_{rand}:-:Y: |}
\mathrm{ Y:(t+1) : =:Y_{rand}:-:a:*:W |}
其中Y rand 是当前种群中的随机位置向量。
[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]之间的随机值,而d的值在迭代过程中从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
结论
鲸鱼优化算法是一种解决机器学习、数学和科学中优化问题的新方法。灵感来自座头鲸及其捕猎习性,这种优化技术在解决现代问题中非常有用。