转载自我的个人网站 https://wzw21.cn/2022/01/07/gwo/
灰狼优化算法
灰狼群体
灰狼属于犬科动物,被认为是顶级的掠食者,它们处于生物圈食物链的顶端。灰狼大多喜欢群居,每个群体中平均有5至12只狼。灰狼群体有着严格的社会等级制度,如图1所示,其中α是狼群的领导者,负责所有决策;β协助α进行决策,必要时进行接替,地位仅次于α;δ则服从于α和β,负责放哨、侦察等事务;ω处于社会底层,是不可缺少的普通狼,负责种群内部关系的平衡。
集体狩猎是灰狼的一种社会行为,社会等级在集体狩猎过程中发挥着重要的作用,捕食的过程在α的带领下完成。主要包括三个步骤:1)跟踪和接近猎物;2)骚扰、追捕和包围猎物,直到它停止移动;3)攻击猎物。灰狼的集体狩猎行为如图2所示。
模型与算法
灰狼优化算法的主要思路是假设α、β、δ更了解猎物的潜在位置,即优化问题的决策空间中最佳解决方案所在的位置,其他灰狼个体依据α、β、δ的位置来更新其自身位置,逐渐逼近猎物(最优解)。算法直接将前3匹适应度最高的狼分别定义为α,β和δ,它们指导其他狼向着目标搜索。在狩猎过程中,灰狼的基本位置更新方式定义为:
D
⃗
=
∣
C
⃗
⋅
X
p
⃗
(
t
)
−
X
⃗
(
t
)
∣
(1)
\vec{D}=|\vec{C}\cdot\vec{X_p}(t)-\vec{X}(t)|\tag1
D=∣C⋅Xp(t)−X(t)∣(1)
X
⃗
(
t
+
1
)
=
X
p
⃗
(
t
)
−
A
⃗
⋅
D
⃗
(2)
\vec{X}(t+1)=\vec{X_p}(t)-\vec{A}\cdot\vec{D}\tag2
X(t+1)=Xp(t)−A⋅D(2)
式(1)计算个体与目标间的距离,式(2)是灰狼的位置更新公式。其中,
X
⃗
\vec{X}
X为位置向量,
D
⃗
\vec{D}
D为距离,t是目前的迭代代数,
A
⃗
\vec{A}
A和
C
⃗
\vec{C}
C为系数向量,计算方式如下:
A
⃗
=
2
a
⃗
⋅
r
1
⃗
−
a
⃗
(3)
\vec{A}=2\vec{a}\cdot\vec{r_1}-\vec{a}\tag3
A=2a⋅r1−a(3)
C
⃗
=
2
r
2
⃗
(4)
\vec{C}=2\vec{r_2}\tag4
C=2r2(4)
其中,
a
⃗
\vec{a}
a是收敛因子,随着迭代次数从2线性减小到0,
r
1
⃗
\vec{r_1}
r1和
r
2
⃗
\vec{r_2}
r2是模长属于[0,1]的随机向量。
在模拟灰狼进行狩猎时,根据当前三个最优解所在的位置更新所有搜索单元的位置。灰狼集体狩猎时的行为定义如下:
{
D
α
⃗
=
∣
C
1
⃗
⋅
X
α
⃗
−
X
⃗
∣
D
β
⃗
=
∣
C
2
⃗
⋅
X
β
⃗
−
X
⃗
∣
D
δ
⃗
=
∣
C
3
⃗
⋅
X
δ
⃗
−
X
⃗
∣
(5)
\left\{ \begin{array}{l} \vec{D_α}=|\vec{C_1}\cdot\vec{X_α}-\vec{X}| \\ \vec{D_β}=|\vec{C_2}\cdot\vec{X_β}-\vec{X}| \\ \vec{D_δ}=|\vec{C_3}\cdot\vec{X_δ}-\vec{X}| \end{array} \right. \tag5
⎩⎨⎧Dα=∣C1⋅Xα−X∣Dβ=∣C2⋅Xβ−X∣Dδ=∣C3⋅Xδ−X∣(5)
{
X
1
⃗
=
X
α
⃗
−
A
1
⃗
⋅
D
α
⃗
X
2
⃗
=
X
β
⃗
−
A
2
⃗
⋅
D
β
⃗
X
3
⃗
=
X
δ
⃗
−
A
3
⃗
⋅
D
δ
⃗
(6)
\left\{ \begin{array}{l} \vec{X_1}=\vec{X_α}-\vec{A_1}\cdot\vec{D_α} \\ \vec{X_2}=\vec{X_β}-\vec{A_2}\cdot\vec{D_β} \\ \vec{X_3}=\vec{X_δ}-\vec{A_3}\cdot\vec{D_δ} \end{array} \right. \tag6
⎩⎨⎧X1=Xα−A1⋅DαX2=Xβ−A2⋅DβX3=Xδ−A3⋅Dδ(6)
X
⃗
(
t
+
1
)
=
X
1
⃗
+
X
2
⃗
+
X
3
⃗
3
(7)
\vec{X}(t+1)=\frac{\vec{X_1}+\vec{X_2}+\vec{X_3}}{3}\tag7
X(t+1)=3X1+X2+X3(7)
其中
D
α
⃗
\vec{D_α}
Dα,
D
β
⃗
\vec{D_β}
Dβ和
D
δ
⃗
\vec{D_δ}
Dδ分别表示α,β和δ与其他个体间的距离,
X
α
⃗
\vec{X_α}
Xα,
X
β
⃗
\vec{X_β}
Xβ和
X
δ
⃗
\vec{X_δ}
Xδ分别代表α,β和δ的当前位置,
X
⃗
\vec{X}
X是当前灰狼的位置,
X
⃗
(
t
+
1
)
\vec{X}(t+1)
X(t+1)是下一时间步即更新后灰狼的位置。
A
⃗
\vec{A}
A和
C
⃗
\vec{C}
C为算法带来了随机性,避免陷入局部最优,当
∣
A
∣
⃗
\vec{|A|}
∣A∣<1时,灰狼靠近猎物,进行开发,
∣
A
∣
⃗
\vec{|A|}
∣A∣>1时,灰狼远离猎物,进行勘探。在计算
D
⃗
\vec{D}
D时,
C
⃗
\vec{C}
C将随机强化或弱化目标对
X
⃗
\vec{X}
X的影响。灰狼位置更新示意图如图3所示。
灰狼优化算法的伪代码如下:
初始化灰狼种群 Xi (i=1,2,…,n)
初始化 a, A, C
计算每个搜索单元的适应度
Xα=最优搜索单元
Xβ=第二优搜索单元
Xδ=第三优搜索单元
while (t<最大迭代次数)
for (每个搜索单元)
根据公式2.7更新当前搜索单元的位置
end for
更新a, A, C
计算所有搜索单元的适应度
更新Xα,Xβ,Xδ
t=t+1
end while
return Xα