鲸鱼优化算法(Whale Optimization Algorithm,WOA)
一、算法灵感
鲸鱼优化算法(Whale Optimization Algorithm, WOA)是2016年提出的一种元启发式优化算法,其灵感来自于座头鲸的狩猎行为。通过模拟随机或最佳个体捕食猎物的狩猎行为,研究者发现鲸鱼的气泡网捕食法可以分为两种,并将它们命名为“向上螺旋策略”和“双螺旋策略”。“向上螺旋策略”中,座头鲸会先下潜约12米,然后开始在螺旋中制造泡泡,并向水面游去。“双螺旋策略”包括三个不同的环节:珊瑚环节、鲸尾拍打水面环节和捕获环节。在WOA算法中只模拟了“向上螺旋策略”,并使用螺旋模拟座头鲸的气泡网捕食法,如图1所示。
二、算法介绍
2.1 初始化
在WOA中,初始化鲸鱼种群位置的计算公式如下:
X i = l b + r a n d × ( u b − l b ) (1) {X_i} = lb + rand \times (ub - lb) \tag{1} Xi=lb+rand×(ub−lb)(1)式中, X i {X_i} Xi 为个体 i {i} i 的位置, l b {lb} lb 和 u b {ub} ub 是搜索空间的下界和上界, r a n d {rand} rand 为 0 0 0 到 1 1 1 之间的随机数。
2.2 包围猎物阶段
在现实中座头鲸能够识别猎物的位置并将其围成一圈。但由于在搜索空间中的最优位置是未知的,因此,WOA算法假设当前最佳候选解位置为目标猎物位置。在定义了目标猎物位置后,其他鲸鱼将进行尝试包围到目标猎物的位置。该过程的计算公式如下:
X ( t + 1 ) = X ∗ ( t ) − A × D (2) X\left( {t + 1} \right) = {X^*}\left( t \right) - A \times D \tag{2} X(t+1)=X∗(t)−A×D(2) A = 2 × a × r a n d − a (3) A = 2 \times a \times rand - a \tag{3} A=2×a×rand−a(3) D = ∣ C × X ∗ ( t ) − X ( t ) ∣ (4) D = \left| {C \times {X^*}\left( t \right) - X\left( t \right)} \right| \tag{4} D=∣C×X∗(t)−X(t)∣(4) C = 2 × r a n d (5) C = 2 \times rand \tag{5} C=2×rand(5)其中, t t t 为当前迭代次数, A A A 和 C C C 为系数, X X X 是当前解的位置, X ∗ X^* X∗ 是当前最优解的位置, a a a 在迭代过程中逐渐从 2 2 2 减小至 0 0 0。
图2(a)展示了式(2)在应对二维问题时,通过调整A和C可以到达当前最优解周围的不同位置。图2(b)展示了式(2)在应对三维问题时,通过随机变量 r a n d rand rand,可以达到当前最优解周围的不同位置。从而模拟了鲸鱼包围猎物。
2.3 气泡网捕食法
2.3.1 收缩包围
通过降低 a a a 的值来实现收缩包围,由于 A A A 的范围为 [ − a , a ] [-a,a] [−a,a]。因此,当a减小时, A A A 的波动范围也会缩小。图3(a)展示了在二维空间中 0 ≤ A ≤ 1 0\le A \le1 0≤A≤1 时从 ( X , Y ) (X, Y) (X,Y) 到 ( X ∗ , Y ∗ ) (X^*, Y^*) (X∗,Y∗) 的所有可能位置。该机制本质上与包围猎物阶段相同。
2.3.2 螺旋更新
如图3(b)所示,该方法首先计算 ( X , Y ) (X, Y) (X,Y) 到 ( X ∗ , Y ∗ ) (X^*, Y^*) (X∗,Y∗) 之间的距离,然后使用螺旋更新公式(6)来模拟鲸鱼的螺旋前进。
X ( t + 1 ) = D ∗ × e b l × cos ( 2 π l ) + X ∗ ( t ) (6) X\left( {t + 1} \right) = {D^*} \times {e^{bl}} \times \cos \left( {2\pi l} \right) + {X^*}\left( t \right) \tag{6} X(t+1)=D∗×ebl×cos(2πl)+X∗(t)(6) D ∗ = ∣ X ∗ ( t ) − X ( t ) ∣ (7) {D^*} = \left| {
{X^*}\left( t \right) - X\left( t \right)} \right| \tag{7} D∗=∣X∗(t)−X(t)∣(7)其中, D ∗ D^* D∗ 表示第 i i i 个个体与最优个体之间的距离, b b b 为常数,用于定义对数螺线的形状, l l l 为 [ − 1 , 1 ] [-1, 1] [−1,1] 之间的随机数。
为了同时模拟鲸鱼的收缩包围机制和螺旋更新机制,假设这两种机制执行的概率相等,可以用数学表达式表示如下:
X ( t + 1 ) = { X ∗ ( t ) − A × D , i f r a n d < 0.5 D ∗ × e b l × cos ( 2 π l ) + X ∗ ( t ) , o t h e r (8) X\left( {t + 1} \right) = \left\{ \begin{aligned} &{X^*}\left( t \right) - A \times D \qquad\qquad\quad\quad\ \ \ ,if\ rand<0.5 \cr &{D^*} \times {e^{bl}} \times \cos \left( {2\pi l} \right) + {X^*}\left( t \right) \quad,other \cr \end{aligned}\right. \tag{8} X(t+1)={
X∗(t)−A×D ,if rand<0.5D∗×ebl×cos(2πl)+X∗(t),other(8)
2.4 搜索猎物
除了气泡网捕食法,座头鲸还会随机寻找猎物,同样通过改变 A A A 的值来实现。当 A A A 的绝对值大于 1 1 1 时,鲸鱼将会远离目标猎物,如图4所示。与气泡网捕食阶段相反,这里将随机选择一个个体的位置作为参考来更新下一个位置,而不是目前为止最优的个体位置。该阶段相当于探索阶段。数学公式如下:
X ( t + 1 ) = X r a n d − A × D (9) X\left( {t + 1} \right) = {X_{rand}} - A \times D \tag{9} X(t+1)=Xrand−A×D(9) D = ∣ C × X r a n d − X ∣ (10) D = \left| {C \times {X_{rand}} - X} \right| \tag{10} D=∣C×Xrand−X∣(10)其中, X r a n d X_{rand} Xrand为随机一条鲸鱼的位置。
2.5 WOA的伪代码
- 初始化鲸鱼数量 N N N 和最大迭代次数 T T T 等
- 初始化种群: X i ( i = 1 , 2 , . . . , N ) X_i(i=1,2,...,N) Xi(i=1,2,...,N)
- While t < T t<T t<T do
- 检查是否有鲸鱼超出了搜索空间并进行修改
- 计算每条鲸鱼的饥饿值(适应度值),并找到吃的最饱的鲸鱼 X ∗ X^* X∗
- For i = 1 i=1 i=1 to N N N do
- 更新 a a a, A A A, C C C, l l l
- If r a n d < 0.5 rand<0.5 rand<0.5 then
- If ∣ A ∣ < 1 |A|<1 ∣A∣<1 then
- 使用公式(2)执行收缩包围策略
- Else
- 使用公式(9)执行搜索猎物策略
- End If
- Else
- 使用公式(6)执行螺旋更新策略
- End If
- End For
- t = t + 1 t=t+1 t=t+1
- End While
- 返回吃的最饱的鲸鱼(最优解) X ∗ X^* X∗
三、实验结果
WOA在23个经典测试函数(设置维度 d i m = 30 dim=30 dim=30)的F1、F5、F8中的收敛曲线,测试函数公式如下:
函数 | 公式 | 理论值 |
---|---|---|
F1 | F 1 ( x ) = ∑ i = 1 n x i 2 {F_1}(x) = \sum\nolimits_{i = 1}^n {x_i^2} F1(x)=∑i=1nxi2 | 0.00 0.00 0.00 |
F5 | F 5 ( x ) = ∑ i = 1 n − 1 [ 100 ( x i + 1 − x i 2 ) 2 + ( x i − 1 ) 2 ] {F_5}(x) = \sum\nolimits_{i = 1}^{n - 1} {[100{ {({x_{i + 1}} - x_i^2)}^2} + { {({x_i} - 1)}^2}]} F5(x)=∑i=1n−1[100(xi+1−xi2)2+(xi−1)2] | 0.00 0.00 0.00 |
F8 | F 8 ( x ) = ∑ i = 1 n − x i sin ( ∣ x i ∣ ) {F_8}(x) = \sum\nolimits_{i = 1}^n { - {x_i}\sin (\sqrt {|{x_i}|} )} F8(x)=∑i=1n−xisin(∣xi∣) | − 418.9829 × d i m -418.9829×dim −418.9829×dim |