本文描述了一种新的元启发式称为灰狼优化(GWO)的灵感来自灰狼(Canis lupus)。GWO算法模拟了自然界中灰狼的领导阶层和狩猎机制。采用alpha、beta、delta和omega四种类型的灰狼来模拟领导阶层。此外,还实现了狩猎、寻找猎物、包围猎物和攻击猎物三个主要步骤。然后在29个已知的测试函数上对算法进行了基准测试,并与粒子群优化(PSO)、引力搜索算法(GSA)、差分进化(DE)、进化规划(EP)和进化策略(ES)进行了对比研究,验证了算法的结果。结果表明,与这些著名的元启发式算法相比,GWO算法能够提供非常有竞争力的结果。本文还考虑了三个经典的工程设计问题(拉伸/压缩弹簧、焊接梁和压力容器设计),并给出了该方法在光学工程领域的实际应用。经典工程设计问题和实际应用的结果表明,该算法适用于具有未知搜索空间的挑战性问题。 元启发式算法的优势
最后,与传统的优化技术相比,元启发式在避免局部最优方面具有更强的能力。这是由于元启发式的随机特性,它允许它们避免在局部解中停滞,并广泛地搜索整个搜索空间。真实问题的搜索空间通常是未知的,并且非常复杂,有大量的局部最优值,所以元启发式是优化这些具有挑战性的真实问题的很好的选择。 元启发式可以分为两种:
基于种群
- 单一解决方案的例如模拟退火,搜索过程从一个候选解决方案开始。然后,在迭代过程中对这个单一的候选解决方案进行改进。
- 基于种群的元启发式使用一组解决方案(种群)执行优化。在这种情况下,搜索过程从一个随机初始填充(多个解决方案)开始,并且在迭代过程中这个填充会得到增强。
与基于单一解决方案的算法相比,基于种群的元启发式有一些优势:
- 多个候选解决方案共享关于搜索空间的信息,从而导致突然向搜索空间中有前途的部分跳跃。
- 多个候选解相互帮助,避免局部最优解。
- 与基于单一解决方案的算法相比,基于群体的元启发式算法通常具有更大的探索意义。
元启发式算法中的大多数都使用了群体智能(Swarm Intelligence, SI)相关知识,群体智能类算法具有以下优势:
- SI算法在迭代过程中保留关于搜索空间的信息,而进化算法(EA)丢弃了前几代的信息。
- SI算法经常利用内存来保存到目前为止得到的最佳解。
- 单位制算法通常需要调整的参数较少。
- 与进化方法(交叉、变异、精英化等)相比,SI算法有更少的运算符。
- SI算法很容易实现。
无论元启发式之间的差异如何,一个共同的特征是将搜索过程划分为两个阶段:探索和利用。
灰狼(Canis lupus)属于犬科动物。他们有一个非常严格的社会等级制度,如图1所示。
除了狼的社会等级,群居狩猎是灰狼另一种有趣的社会行为。灰狼狩猎的主要阶段如下:
为了在设计 GWO 时对狼的社会等级进行数学建模,我们将最适合的解决方案视为 $\alpha$ (a)。 因此,第二个和第三个最佳解决方案分别命名为 $\beta$ (b) 和 $\delta$ (d)。 其余的候选解被假定为 $\omega$ (x)。 在 GWO 算法中,搜索(优化)由 a、b 和 d 引导。 x 狼跟随这三只狼。
在这里,即将当前搜索到的解决方案使用对应问题模型进行评价,并将评价位置按适应度进行排序,使用前三个最优解对种群中的其余狼进行引导。
灰狼在狩猎过程中会包围猎物。包围猎物的移动方程如下: \(\vec{D}=|\vec{C}\cdot\vec{X_p}(t)-\vec{X_t}|\tag{1}\)
\[\vec{X}(t+1)=\vec{X_p}(t)-\vec{A}\cdot\vec{D}\tag{2}\]其中$t$表示当前迭代,$\vec{A}$和$\vec{C}$是系数向量,$\vec{X_p}$是猎物的位置向量,$\vec{X}$表示灰狼的位置向量。
向量$\vec{A}$和$\vec{C}$计算公式如下:
\(\vec{A}=2\vec{a}\cdot\vec{r_1}-\vec{a}\tag{3}\) \(\vec{C}=2\cdot\vec{r_2}\tag{4}\)
其中$\vec{a}$的分量在迭代过程中从 2 线性减少到 0,而$r_1、r_2$是 [0, 1] 中的随机向量。
灰狼具有识别猎物位置并包围它们的能力。 狩猎通常由$\alpha$引导。$\beta$和$\delta$也可能偶尔参与狩猎。 然而,在抽象的搜索空间中,我们不知道最佳位置(猎物)的位置。 为了在数学上模拟灰狼的狩猎行为,作者假设$\alpha$(最佳候选解决方案)$\beta$和$\delta$对猎物的潜在位置有更好的了解。 因此,我们保存目前获得的前三个最佳解决方案,并强制其他搜索代理(包括 $\omega$)根据最佳搜索代理的位置更新他们的位置。 在这方面提出以下公式。
\(\begin{cases} \vec{D_{\alpha}}=|\vec{C_1}\cdot\vec{X_{\alpha}}-\vec{X}|\\ \vec{D_{\beta}}=|\vec{C_2}\cdot\vec{X_{\beta}}-\vec{X}|\\ \vec{D_{\delta}}=|\vec{C_3}\cdot\vec{X_{\delta}}-\vec{X}|\\ \end{cases}\tag{5}\) \(\begin{cases} \vec{X_1}=\vec{X_{\alpha}}-\vec{A_1}\cdot\vec{D_{\alpha}}\\ \vec{X_2}=\vec{X_{\beta}}-\vec{A_2}\cdot\vec{D_{\beta}}\\ \vec{X_3}=\vec{X_{\delta}}-\vec{A_3}\cdot\vec{D_{\delta}}\\ \end{cases}\tag{6}\) \(\vec{X}(t+1)=\frac{\vec{X_1}+\vec{X_2}+\vec{X_3}}{3}\tag{7}\)
当猎物停止移动时,灰狼就会攻击猎物,从而结束捕猎。为了建立接近猎物的数学模型,我们降低了$\vec{a}$的值。根据公式(3)可知$\vec{A}$的波动范围也随着$\vec{a}$减小。换句话说$\vec{A}$是区间$[-2a, 2a]$内的一个随机值,其中$a$在迭代过程中从2减少到0。当$\vec{A}$的随机值为[1,1]时,搜索代理的下一个位置可以是其当前位置与被捕食者位置之间的任意位置。
上面是原文对于攻击猎物的描述,当我自己读这一段时,发现以下几个问题,第一,$\vec{a}$是一个向量,而非实值,因此描述向量$\vec{A}$的范围有点问题;第二,按照公式(3),用作者所描述的,那么$\vec{A}$的取值范围也应该是$[-a,2a]$
GWO 算法的伪代码如上图所示。 为了了解 GWO 在理论上如何解决优化问题,可能需要注意以下几点:
随着 A 的减小,一半的迭代用于探索$( | A | \geq 1)$,另一半用于开发$( | A | < 1)$。 |
在作者的论文中,对于如何具体实现$GWO$的流程和要求没有进行详细描述,只是给出了较为重要的几个公式。所幸作者给出了源代码,据此写下本小节。本人才疏学浅,如有错误,请指正!
在$GWO$中,灰狼位置初始化与搜索空间有关,具体公式如下:
\(position_i^d=rand\cdot (x_{max}^d-x_{min}^d) + x_{min}^d\tag{8}\)
其中$position_i^d$为第$i$只灰狼维度$d$的位置,$rand$为(0,1)之间的均匀随机数,$x_{max}^d$为第$d$维的上限解空间,$x_{min}^d$为第$d$维的下限解空间。
与$PSO$类似,在$GWO$中也需要对跨越边界的维度进行处理,处理方式也一样,将对应出界的维度拉回最近的边界。公式如下:
\[\begin{cases} position_i^d=x_{max}^d&if\quad position_i^d>x_{max}^d\\ position_i^d=x_{min}^d&if\quad position_i^d>x_{min}^d \end{cases}\tag{9}\]这里需要特别注意,$\alpha,\beta,\delta$保存的是迭代过程中适应度前三的灰狼位置,即全局历史前三的最优位置。
其中$iterate$为当前迭代次数,由于$a$的取值范围为一开始为2,因此我们需要使第一次公式(10)分子为0,$iterate_{max}$为最大迭代次数。
即矩阵$\vec{A}、\vec{C}$是根据公式(3)、(4)计算而来,而公式中的矩阵$\vec{r}$是一个随机矩阵,即矩阵中的所有维度都是随机生成的。 此外,公式(3)、(4)中的向量$\vec{a}$可以把它看作是一个各维度都相同的向量,但是在矩阵运算中,标量是可以直接和向量或者矩阵直接运算的。因此,向量$\vec{a}$就可以被看作参数$a$。
在实现代码过程中,还是存在一个疑虑,在作者给出的代码中,历史前三的$\alpha,\beta,\delta$狼是根据适应度值进行排序的,倘若存在位置不一样,但是适应度值一样的情形,那么依旧会忽略这些位置。因此严格意义上来说,$\alpha,\beta,\delta$狼是按照适应度值排序的三类狼。
详情见code文件夹下的对应代码。
[1] Sm A , Smm B , Al A . Grey Wolf Optimizer[J]. Advances in Engineering Software, 2014:46–61.