基础樽海鞘群算法的具体原理参考,我的博客:https://blog.csdn.net/u011835903/article/details/107767869
标准樽海鞘群算法中,所有领导者都向食物源进行学习,忽略了种群内其他优秀的个体。文献[20]提出重心反向学习,重心中包含了群体搜索经验,但是重心中所有个体的贡献相同。本文提出了加权重心, 根据个体的优劣状况使用不同的 权重来计算重心, 可以在不忽略较差个体的同时向更多优秀个 体学习, 合理利用了种群的信息, 同时避免了只向最优个体学 习陷入早熟。
定义 1 重心。设
(
X
1
,
⋯
,
X
N
)
\left(X^1, \cdots, X^N\right)
(X1,⋯,XN) 是
D
D
D 维空间中的
n
n
n 个点, 则整体重心为
M
=
x
1
+
⋯
+
x
n
n
(7)
M=\frac{x^1+\cdots+x^n}{n} \tag{7}
M=nx1+⋯+xn(7)
加权重心公式为
M
W
=
∑
i
=
1
n
x
i
(
f
bad
−
f
X
i
α
)
+
F
(
f
bad
−
f
F
α
)
n
+
1
(8)
M_W=\frac{\sum_{i=1}^n x^i\left(\frac{f_{\text {bad }}-f_{X i}}{\alpha}\right)+F\left(\frac{f_{\text {bad }}-f_F}{\alpha}\right)}{n+1} \tag{8}
MW=n+1∑i=1nxi(αfbad −fXi)+F(αfbad −fF)(8)
α
=
∑
i
=
1
n
(
f
bad
−
f
X
i
)
+
(
f
bad
−
f
F
)
(9)
其中:
M
W
M_W
MW 为加权重心;
f
bad
f_{\text {bad }}
fbad 为当前种群最差个体适应度值;
f
F
f_F
fF 为 食物源适应度值;
f
x
i
f_{x^i}
fxi 为当前种群
x
i
x^i
xi 个体的适应度值;
F
F
F 为食物 源位置;
(
f
bad
−
f
)
/
α
\left(f_{\text {bad }}-f\right) / \alpha
(fbad −f)/α 是个体的权重, 越优秀的个体其权重越 大, 在加权重心中占比也就越大, 同时在加权重心引入食物源 的位置和权重,可以更加充分地利用全局种群信息。
修改后的领导者公式为
x
i
=
ω
x
i
+
rand
×
(
M
W
−
x
i
)
,
ω
=
(
l
/
l
max
)
2
(10)
x^i=\omega x^i+\operatorname{rand} \times\left(M_W-x^i\right), \omega=\left(l / l_{\max }\right)^2 \tag{10}
xi=ωxi+rand×(MW−xi),ω=(l/lmax)2(10)
修改后的公式可以在向最优解逐渐学习的同时没有过多 丢失种群多样性。
ω
\omega
ω 用来调节个体在搜索过程中对自身位置 的依赖, 搜索前期较低的
ω
\omega
ω 可以降低个体对自身的依赖, 从而 增大了搜索的范围, 算法的全局搜索能力得到增强。搜索后期
ω
\omega
ω 逐渐向 1 靠拢, 不影响算法寻优。
自适应惯性权重在很多群体智能优化算法中被使用, 搜索 前期权重较大, 可以增强全局搜索能力, 搜索后期自适应权重 较小, 可以增强局部寻优能力。使用的自适应惯性权重公式为
ω
=
λ
(
−
φ
×
t
/
7
)
×
cos
(
π
t
)
(11)
\omega=\lambda^{(-\varphi \times t / 7)} \times \cos (\pi t) \tag{11}
ω=λ(−φ×t/7)×cos(πt)(11)
将式(11) 应用到式 (6) 中, 新的追随者更新公式为
x
j
i
=
1
2
(
x
j
i
+
ω
x
j
i
−
1
)
(12)
x_j^i=\frac{1}{2}\left(x_j^i+\omega x_j^{i-1}\right) \tag{12}
xji=21(xji+ωxji−1)(12)
当
λ
=
2
,
φ
=
4
/
3
\lambda=2, \varphi=4 / 3
λ=2,φ=4/3 时, 式 (12) 的值为从
−
1
-1
−1 和 1 逐渐向
−
0.4
-0.4
−0.4 和
0.4
0.4
0.4 收敛, 文献 [13] 提出自适应惯性权重从
0.9
0.9
0.9 线性递减到 0. 4。相较于文献 [13] 中的自适应惯性权重, 式 (12) 可以在不 提高计算复杂度的同时提高算法前期的搜索范围 , 增加种群多 样性。
在基本樽海鞘群算法中,领导者受到食物源的位置来更新自己的位置,追随者追随上一个个体进行更新。如式(3)(6)所示,领导者 X 的更新是在食物源头 F 的附近产生新的个体,追随者再根据领导者的位置进行位置更新。因此食物源的位置将直接影响整个种群的搜索方向,如果食物源陷入局部最优,那么种群会在食物源附近不断搜索,无法跳出局部最优,降低了种群的多样性,从而算法只能得到局部最优解。为了解决这一问题,常用的方法是加入变异操作,对更新完的个体进行变异,增强了种群的多样性,从而跳出局部最优。常使用的变异算子有高斯变异、柯西变异等。通常变异均是对所有维度同时进行变异,再根据目标函数来评判,这样对于高维函数,维度间会相互干扰,造成有些维度经过变异得到了更好的解,但是由于其他维度经过变异后变异效果不好,且变异效果差的维度覆盖了变异效果好的维度,使个体最后变异效果不佳,进而影响了算法的收敛速度和精度。使用逐维变异可以避免高维函数之间每个维度相互干扰,从而提高变异解的质量。使用随机差分变异 [21] 进行逐维变异,通过该变异得到一
个新的个体的维度,具体公式为:
x
j
i
=
r
1
×
(
F
j
−
x
j
i
)
+
r
2
×
(
x
j
′
−
x
j
i
)
(13)
x_j^i=r_1 \times\left(F_j-x_j^i\right)+r_2 \times\left(x_j^{\prime}-x_j^i\right) \tag{13}
xji=r1×(Fj−xji)+r2×(xj′−xji)(13)
其中:
x
j
i
x_j^i
xji 为樽海鞘群中的第
i
i
i 个个体的第
j
j
j 维;
F
j
F_j
Fj 为食物源位置 的第
j
j
j 维;
x
j
′
x_j^{\prime}
xj′ 为种群中随机的一个个体的第
j
j
j 维;
r
1
r_1
r1 和
r
2
r_2
r2 为
[
0
[0
[0, 1] 的随机数。在种群位置更新完成后, 使用逐维随机差分变 异对个体的每个维度进行变异, 某一维度进行变异后对其进行 评价, 如果优秀, 则保留变异后的解, 如果变异后评价结果变 差, 则舍弃较差的维度信息, 减少了各个维度间的千扰, 同时增 大了搜索的范围。由于变异操作具有一定的盲目性,将所有个 体都进行逐维随机差分变异势必会导致算法的搜索效率下降 和计算量大幅的增加, 所以仅挑选种群中最优秀和最差个体进 行变异, 对最优个体变异可以提高搜索效率, 对最差个体变异 可以提高搜索范围, 跳出局部最优解。
算法具体步骤如下:
a) 初始化种群和参数。初始化种群个体数量
N
N
N, 最大迭代 次数
T
T
T, 使用式(2) 生成初始种群。
b) 计算种群每个个体的适应度, 最优的个体作为食物位置。
c) 根据位置更新公式更新个体位置。前一半个体为领导 者使用式 (10) 进行更新, 后一半个体为追随者使用式 (12) 进 行更新。
d) 对更新完的个体选择最优和最差个体, 对其通过式 (13) 进行逐维随机差分变异, 将更新的维度与其余维度组成 新的个体, 比较变异前后个体适应度值的变化, 如果好则保留。
e)找出最优个体适应度值更新食物位置。
f) 判断是否满足迭代次数要求或精度要求, 若是转步骤
g
)
\mathrm{g})
g) ,否则返回步乑 c)。
g) 输出最优个体的适应度值。
[1]陈连兴,牟永敏.一种改进的樽海鞘群算法[J].计算机应用研究,2021,38(06):1648-1652.