获取更多资讯,赶快关注上面的公众号吧!
狩猎搜索是一种模拟群体动物(狮子,狼等)捕食狩猎行为地元启发式算法,这些动物会采取一些策略包围和捕捉猎物。例如,狼就非常依赖这种捕猎方式,来捕食比自己更大更快的动物,它们选定目标猎物后,整个狼群就会逐渐向其靠近,狼聪明的地方在于它们不会站在风向上游以免猎物嗅到气味,而这可以应用到带有约束的问题中以避开不可行区域。在狩猎搜索算法中,每个捕食者就是特定问题的一个解,捕食者协同寻找和捕食猎物,类似于寻找全局最优点的优化过程,每个捕食者相对于猎物的位置决定了其捕获猎物的几率,类似地,目标函数值是由一组决策变量的值来决定的。
但是动物的群体捕食和优化问题也有不同,在动物的群体捕食中,解(猎物)是动态的,捕食者必须根据根据猎物的当前位置来校正自身位置,而在优化问题中,最优解是静态的且在优化过程中不会改变自身位置,为了实现在算法中模拟这种动态性,人工捕食者会朝着领导者移动,领导者是当前阶段拥有最优位置的捕食者(当前种群最优解),如果任意一个捕食者发现了比当前领导者更优的位置,则其成为下个阶段的领导者。
真实的动物不仅会慢慢朝猎物移动还会根据其他捕食者和猎物的位置校正自身位置,因此,算法中如果朝之前的领导者移动后,领导者并未变化,那么捕食者将根据其他成员的位置调整自身位置,这可以通过引入狩猎群体考虑率(Hunting Group Consideration Rate,HGCR)和位置校正率(Position Correction Rate,PCR)来实现。
还有,在真实动物的群体捕食中,如果猎物逃出了包围圈,捕食者会重新组织起来,再次包围猎物。在算法中,如果捕食者或解之间的位置太接近,那么算法就会将其打乱,试图在下次迭代中找到最优解。
通过以上分析,可以得到狩猎搜索算法如下:
Step1:指定优化问题和算法参数。
Step2:初始化捕猎群体(Hunting Group,HG)。
Step3:朝领导者移动。
Step4:位置校正。
Step5:群体重组。
Step6:重复Step3~5,直到满足终止条件。
狩猎群体大小(Hunting Group Size,HGS),向领导者的最大移动量(maximum movement toward the Leader,MML),狩猎群体考虑率 ∈ [ 0 , 1 ] \in[0,1] ∈[0,1](Hunting Group Consideration Rate,HGCR)和位置校正率(Position Correction Rate,PCR)。
基于狩猎群体大小HGS,随机生成对应数量的可行解并计算目标值,根据目标值选择领导者。
通过向领导者移动来生成捕食者新的位置 x ′ = ( x 1 ′ , x 2 ′ , ⋯ , x N ′ ) x^\prime=\left( x^\prime_1,x^\prime_2,\cdots,x^\prime_N\right) x′=(x1′,x2′,⋯,xN′):
x i ′ = x i + rand × M M L × ( x i L − x i ) (1) x_{i}^{\prime}=x_{i}+\operatorname{rand} \times M M L \times\left(x_{i}^{L}-x_{i}\right)\tag{1} xi′=xi+rand×MML×(xiL−xi)(1)
其中 M M L MML MML为朝着领导者移动的最大量,类似于步长, r a n d rand rand为 [ 0 , 1 ] [0,1] [0,1]内的随机数, x i L x_{i}^{L} xiL为领导者第 i i i个维度的位置值。
对于每一个捕食者,如果朝领导者移动后结果变优,那么捕食者就移动到新的位置,否则返回原来的位置。这样处理有两个好处:
通常情况下 M M L MML MML取值范围为0.01(对于具有多个自变量的大规模问题)~0.2(对于自变量较少的简单问题)。
在这一步中,对捕食者之间的协作进行建模,以更有效地进行捕食。在朝领导者移动后,捕食者会再根据其他捕食者的位置和随机扰动选择其他位置以便找到更优的解,而这只有在前一步中领导者没有变化的情况下才会执行。新的位置 x ′ = ( x 1 ′ , x 2 ′ , … , x N ′ ) x^{\prime}=\left(x_{1}^{\prime}, x_{2}^{\prime}, \ldots, x_{N}^{\prime}\right) x′=(x1′,x2′,…,xN′)将按照下式生成:
x i ′ ← { x i ′ ∈ { x i 1 , x i 2 , … , x i H G S } with probability H G C R x i ′ ∈ X i with probability ( 1 − H G C R ) (2) x_{i}^{\prime} \leftarrow\left\{\begin{array}{l} x_{i}^{\prime} \in\left\{x_{i}^{1}, x_{i}^{2}, \ldots, x_{i}^{H G S}\right\} \quad \text { with probability } \mathrm{HGCR} \\ x_{i}^{\prime} \in X_{i} \quad \text { with probability }(1-\mathrm{HGCR}) \end{array}\right.\tag{2} xi′←{xi′∈{xi1,xi2,…,xiHGS} with probability HGCRxi′∈Xi with probability (1−HGCR)(2)
其中HGCR为从群体HG中选择某一维度值的概率,(1-HGCR)为值域中随机选择值的概率。(这其实有点像和声搜索里的和声记忆率),通常情况下HGCR取值范围为 [ 0.95 , 1 ) [0.95,1) [0.95,1)。
然后再检查新的位置的每一个维度,以确定是否进行校正:
x i ′ ← { Yes with probability P C R No with probability ( 1 − P C R ) (3) x_{i}^{\prime} \leftarrow\left\{\begin{array}{l} \text { Yes with probability } P C R \\ \text { No with probability }(1-P C R) \end{array}\right.\tag{3} xi′←{ Yes with probability PCR No with probability (1−PCR)(3)
注意,校正过程只会在从HG中选择值时执行,这其实和和声搜索里的音调调节思想相同。那么算法选择邻域值的概率就是 P C R × H G C R PCR\times HGCR PCR×HGCR,如果位置校正决策 x i ′ x^\prime_i xi′为YES,那么 x i ′ x^\prime_i xi′按照下式进行校正:
x i ′ ← x i ′ + τ (4) x^\prime_i\leftarrow x^\prime_i+\tau \tag{4} xi′←xi′+τ(4)
其中 τ \tau τ为 b w × u ( − 1 , 1 ) b w \times u(-1,1) bw×u(−1,1), b w b w bw为任意距离带宽, b w b w bw通常按照指数函数递减:
b w = a × e − b × i t e r a t i o n (5) b w=a \times \mathrm{e}^{-b \times i t e r a t i o n}\tag{5} bw=a×e−b×iteration(5)
a a a和 b b b为常数,'iteration’为当前迭代次数。
随着搜索过程的进行,捕食者很可能陷入局部最优,此时捕食者应该进行重组以获取最优位置。重组过程如下:如果领导者与最差捕食者之间的目标函数值差值小于常量 ϵ 1 \epsilon_{1} ϵ1且未终止,那么按下式对每个捕食者进行重组:
x i ′ = x i + rand × [ r ( max ( x i ) , min ( x i ) ) − x i ] α × E N β (6) x_{i}^{\prime}=x_{i}+\frac{\operatorname{rand} \times\left[r\left(\max \left(x_{i}\right), \min \left(x_{i}\right)\right)-x_{i}\right]}{\alpha \times E N^{\beta}}\tag{6} xi′=xi+α×ENβrand×[r(max(xi),min(xi))−xi](6)
其中 r ( max ( x i ) , min ( x i ) ) r\left(\max \left(x_{i}\right), \min \left(x_{i}\right)\right) r(max(xi),min(xi))表示随机选择变量 x i x_i xi的最大或最小值, E N EN EN为群体目前为止陷入局部最优的代数。参数 α \alpha α和 β \beta β用于确定算法的全局收敛率,值越小收敛越慢。通常对于大规模优化问题,这两个值可以设置相对小一点。