鲸鱼优化算法(Whale Optimization Algorithm,WOA)

  • 一、算法灵感
  • 二、算法介绍
  • 2.1 初始化
  • 2.2 包围猎物阶段
  • 2.3 气泡网捕食法
  • 2.3.1 收缩包围
  • 2.3.2 螺旋更新
  • 2.4 搜索猎物
  • 2.5 WOA的伪代码
  • 三、实验结果
  • 3.1 F1收敛曲线
  • 3.2 F5收敛曲线
  • 3.3 F8收敛曲线
  • 四、参考文献


一、算法灵感

  鲸鱼优化算法(Whale Optimization Algorithm, WOA)是2016年提出的一种元启发式优化算法,其灵感来自于座头鲸的狩猎行为。通过模拟随机或最佳个体捕食猎物的狩猎行为,研究者发现鲸鱼的气泡网捕食法可以分为两种,并将它们命名为“向上螺旋策略”和“双螺旋策略”。“向上螺旋策略”中,座头鲸会先下潜约12米,然后开始在螺旋中制造泡泡,并向水面游去。“双螺旋策略”包括三个不同的环节:珊瑚环节、鲸尾拍打水面环节和捕获环节。在WOA算法中只模拟了“向上螺旋策略”,并使用螺旋模拟座头鲸的气泡网捕食法,如图1所示。

改进鲸鱼优化算法Python代码 鲸群优化算法_算法


图1 鲸鱼的气泡网捕食示意图

二、算法介绍

2.1 初始化

  在WOA中,初始化鲸鱼种群位置的计算公式如下:
改进鲸鱼优化算法Python代码 鲸群优化算法_人工智能_02式中,改进鲸鱼优化算法Python代码 鲸群优化算法_改进鲸鱼优化算法Python代码_03 为个体 改进鲸鱼优化算法Python代码 鲸群优化算法_人工智能_04 的位置,改进鲸鱼优化算法Python代码 鲸群优化算法_启发式算法_05改进鲸鱼优化算法Python代码 鲸群优化算法_启发式算法_06 是搜索空间的下界和上界,改进鲸鱼优化算法Python代码 鲸群优化算法_matlab_07改进鲸鱼优化算法Python代码 鲸群优化算法_算法_08改进鲸鱼优化算法Python代码 鲸群优化算法_算法_09

2.2 包围猎物阶段

  在现实中座头鲸能够识别猎物的位置并将其围成一圈。但由于在搜索空间中的最优位置是未知的,因此,WOA算法假设当前最佳候选解位置为目标猎物位置。在定义了目标猎物位置后,其他鲸鱼将进行尝试包围到目标猎物的位置。该过程的计算公式如下:

改进鲸鱼优化算法Python代码 鲸群优化算法_算法_10改进鲸鱼优化算法Python代码 鲸群优化算法_matlab_11改进鲸鱼优化算法Python代码 鲸群优化算法_启发式算法_12改进鲸鱼优化算法Python代码 鲸群优化算法_启发式算法_13其中,改进鲸鱼优化算法Python代码 鲸群优化算法_人工智能_14 为当前迭代次数,改进鲸鱼优化算法Python代码 鲸群优化算法_改进鲸鱼优化算法Python代码_15改进鲸鱼优化算法Python代码 鲸群优化算法_启发式算法_16 为系数,改进鲸鱼优化算法Python代码 鲸群优化算法_改进鲸鱼优化算法Python代码_17 是当前解的位置,改进鲸鱼优化算法Python代码 鲸群优化算法_人工智能_18 是当前最优解的位置,改进鲸鱼优化算法Python代码 鲸群优化算法_启发式算法_19 在迭代过程中逐渐从 改进鲸鱼优化算法Python代码 鲸群优化算法_启发式算法_20 减小至 改进鲸鱼优化算法Python代码 鲸群优化算法_算法_08

  图2(a)展示了式(2)在应对二维问题时,通过调整A和C可以到达当前最优解周围的不同位置。图2(b)展示了式(2)在应对三维问题时,通过随机变量 改进鲸鱼优化算法Python代码 鲸群优化算法_改进鲸鱼优化算法Python代码_22,可以达到当前最优解周围的不同位置。从而模拟了鲸鱼包围猎物。

改进鲸鱼优化算法Python代码 鲸群优化算法_改进鲸鱼优化算法Python代码_23


图2 鲸鱼下一个可能的位置

2.3 气泡网捕食法

2.3.1 收缩包围

改进鲸鱼优化算法Python代码 鲸群优化算法_启发式算法_19 的值来实现收缩包围,由于 改进鲸鱼优化算法Python代码 鲸群优化算法_改进鲸鱼优化算法Python代码_15 的范围为 改进鲸鱼优化算法Python代码 鲸群优化算法_算法_26。因此,当a减小时,改进鲸鱼优化算法Python代码 鲸群优化算法_改进鲸鱼优化算法Python代码_15 的波动范围也会缩小。图3(a)展示了在二维空间中 改进鲸鱼优化算法Python代码 鲸群优化算法_改进鲸鱼优化算法Python代码_28 时从 改进鲸鱼优化算法Python代码 鲸群优化算法_改进鲸鱼优化算法Python代码_29改进鲸鱼优化算法Python代码 鲸群优化算法_启发式算法_30

2.3.2 螺旋更新

改进鲸鱼优化算法Python代码 鲸群优化算法_人工智能_31


图3 鲸鱼的气泡网捕食示意图

改进鲸鱼优化算法Python代码 鲸群优化算法_改进鲸鱼优化算法Python代码_29改进鲸鱼优化算法Python代码 鲸群优化算法_启发式算法_30 之间的距离,然后使用螺旋更新公式(6)来模拟鲸鱼的螺旋前进。
改进鲸鱼优化算法Python代码 鲸群优化算法_matlab_34改进鲸鱼优化算法Python代码 鲸群优化算法_算法_35其中,改进鲸鱼优化算法Python代码 鲸群优化算法_人工智能_36 表示第 改进鲸鱼优化算法Python代码 鲸群优化算法_人工智能_37 个个体与最优个体之间的距离,改进鲸鱼优化算法Python代码 鲸群优化算法_改进鲸鱼优化算法Python代码_38 为常数,用于定义对数螺线的形状,改进鲸鱼优化算法Python代码 鲸群优化算法_人工智能_39改进鲸鱼优化算法Python代码 鲸群优化算法_启发式算法_40 之间的随机数。
  为了同时模拟鲸鱼的收缩包围机制和螺旋更新机制,假设这两种机制执行的概率相等,可以用数学表达式表示如下:
改进鲸鱼优化算法Python代码 鲸群优化算法_算法_41

2.4 搜索猎物

改进鲸鱼优化算法Python代码 鲸群优化算法_算法_42


图4 鲸鱼下一个可能的位置

改进鲸鱼优化算法Python代码 鲸群优化算法_改进鲸鱼优化算法Python代码_15 的值来实现。当 改进鲸鱼优化算法Python代码 鲸群优化算法_改进鲸鱼优化算法Python代码_15 的绝对值大于 改进鲸鱼优化算法Python代码 鲸群优化算法_算法_09 时,鲸鱼将会远离目标猎物,如图4所示。与气泡网捕食阶段相反,这里将随机选择一个个体的位置作为参考来更新下一个位置,而不是目前为止最优的个体位置。该阶段相当于探索阶段。数学公式如下:
改进鲸鱼优化算法Python代码 鲸群优化算法_算法_46改进鲸鱼优化算法Python代码 鲸群优化算法_算法_47其中,改进鲸鱼优化算法Python代码 鲸群优化算法_启发式算法_48为随机一条鲸鱼的位置。

2.5 WOA的伪代码

  1. 初始化鲸鱼数量 改进鲸鱼优化算法Python代码 鲸群优化算法_算法_49 和最大迭代次数 改进鲸鱼优化算法Python代码 鲸群优化算法_算法_50
  2. 初始化种群:改进鲸鱼优化算法Python代码 鲸群优化算法_matlab_51
  3. While 改进鲸鱼优化算法Python代码 鲸群优化算法_改进鲸鱼优化算法Python代码_52 do
  4.   检查是否有鲸鱼超出了搜索空间并进行修改
  5. 改进鲸鱼优化算法Python代码 鲸群优化算法_算法_53
  6.   For 改进鲸鱼优化算法Python代码 鲸群优化算法_改进鲸鱼优化算法Python代码_54 to 改进鲸鱼优化算法Python代码 鲸群优化算法_算法_49 do
  7. 改进鲸鱼优化算法Python代码 鲸群优化算法_matlab_56改进鲸鱼优化算法Python代码 鲸群优化算法_人工智能_57改进鲸鱼优化算法Python代码 鲸群优化算法_启发式算法_58改进鲸鱼优化算法Python代码 鲸群优化算法_人工智能_59
  8.     If 改进鲸鱼优化算法Python代码 鲸群优化算法_matlab_60 then
  9.       If 改进鲸鱼优化算法Python代码 鲸群优化算法_算法_61 then
  10.         使用公式(2)执行收缩包围策略
  11.       Else
  12.         使用公式(9)执行搜索猎物策略
  13.       End If
  14.     Else
  15.       使用公式(6)执行螺旋更新策略
  16.     End If
  17.   End For
  18. 改进鲸鱼优化算法Python代码 鲸群优化算法_改进鲸鱼优化算法Python代码_62
  19. End While
  20. 返回吃的最饱的鲸鱼(最优解) 改进鲸鱼优化算法Python代码 鲸群优化算法_算法_53

三、实验结果

WOA在23个经典测试函数(设置维度 改进鲸鱼优化算法Python代码 鲸群优化算法_启发式算法_64)的F1、F5、F8中的收敛曲线,测试函数公式如下:

函数

公式

理论值

F1

改进鲸鱼优化算法Python代码 鲸群优化算法_算法_65

改进鲸鱼优化算法Python代码 鲸群优化算法_人工智能_66

F5

改进鲸鱼优化算法Python代码 鲸群优化算法_人工智能_67

改进鲸鱼优化算法Python代码 鲸群优化算法_人工智能_66

F8

改进鲸鱼优化算法Python代码 鲸群优化算法_启发式算法_69

改进鲸鱼优化算法Python代码 鲸群优化算法_改进鲸鱼优化算法Python代码_70

3.1 F1收敛曲线

改进鲸鱼优化算法Python代码 鲸群优化算法_启发式算法_71

3.2 F5收敛曲线

改进鲸鱼优化算法Python代码 鲸群优化算法_启发式算法_72

3.3 F8收敛曲线

改进鲸鱼优化算法Python代码 鲸群优化算法_改进鲸鱼优化算法Python代码_73