樽海鞘群算法SSA MSSA 2017(Advances in Engineering Software)
樽海鞘
樽海鞘属于纽鳃樽科,具有透明桶装的身体,它们的组织与水母非常相似,如下图所示。
樽海鞘最有趣的行为之一是他们的群集行为,在深海中,樽海鞘通常形成一个称为樽海鞘链的群体,这个链条如右图所示。这种行为的主要原因还不是很清楚,但一些研究人员认为,这是为了通过快速协调变化和觅食实现更好的运动。
数学模型
该方法有两个分支,分别对应单目标(SSA)和多目标(MSSA),其主要灵感是樽海鞘在海洋中航行和觅食时的群聚行为。
SSA
其做法是将种群分为两组:领导者和追随者。领导者引导种群,而追随者互相跟随(前面的均是后面的直接或间接领袖)。
与其他群智能算法类似,在 n n n 维搜索空间中定义樽海鞘的位置,其中 n n n 是给定问题的变量数。因此,所有樽海鞘的位置都存储在称为 x x x 的二维矩阵中,并且假定:在该搜索空间中有一个称为 F F F 的食物源作为种群的目标。
更新领导者位置
x
j
1
=
{
F
j
+
c
1
(
(
u
b
j
−
l
b
j
)
c
2
+
l
b
j
)
c
3
≥
0
F
j
−
c
1
(
(
u
b
j
−
l
b
j
)
c
2
+
l
b
j
)
c
3
<
0
,
(1)
x_j^1 = \left \{ \begin{aligned} F_j + c_1 ( (ub_j - lb_j) c_2 + lb_j ) \ \ \ \ \ c_3 \geq 0 \\ F_j - c_1 ( (ub_j - lb_j) c_2 + lb_j ) \ \ \ \ \ c_3 < 0 \end{aligned} \right. , \tag{1}
xj1={Fj+c1((ubj−lbj)c2+lbj) c3≥0Fj−c1((ubj−lbj)c2+lbj) c3<0,(1)
其中,
x
j
1
x_j^1
xj1 为第一个樽海鞘(leader)在第
j
j
j 维中的位置,
F
j
F_j
Fj 为食物源在第
j
j
j 维中的位置,
u
b
j
ub_j
ubj 为第
j
j
j 维的上界,
l
b
j
lb_j
lbj 为下界,
c
2
,
c
3
c_2, c_3
c2,c3 为随机数。
根据上式可以看出,领导者只更新其相对于食物来源的位置,其中系数
c
1
=
2
e
−
(
4
l
L
)
2
c_1 = 2 e^{- \left(\frac{4 l}{L} \right)^2 }
c1=2e−(L4l)2 为重要参数,其主要用于平衡探索与开发。其中,
l
l
l 为当前迭代次数,
L
L
L 为最大迭代次数。
c
2
,
c
3
c_2, c_3
c2,c3 为 [0 - 1] 之间的均匀随机数,追随者的更新方式为:
x
j
i
=
1
2
a
t
2
+
v
0
t
,
(2)
x_j^i = \frac{1}{2} a t^2 + v_0 t , \tag{2}
xji=21at2+v0t,(2)
其中,
i
≥
2
i \geq 2
i≥2 表示第
i
i
i 个追随者在第
j
j
j 维中的位置,
a
=
v
f
i
n
a
l
v
0
a = \frac{v_{final}}{v_0}
a=v0vfinal,
v
=
x
−
x
0
t
v = \frac{x - x_0}{t}
v=tx−x0。进一步的,有:
x
j
i
=
1
2
(
x
j
i
+
x
j
i
−
1
)
.
(3)
x_j^i = \frac{1}{2} \left( x_j^i + x_j^{i - 1} \right) . \tag{3}
xji=21(xji+xji−1).(3)
其测试过程为:
SSA的优化
由于优化问题无法确定最优解位置,所以假设:到目前为止得到的最优解是全局最优解,并假设其为樽海鞘链所追逐的食物来源。
伪代码:
- Initialize the salp population x i x_i xi, ( i = 1 , 2 , … , n ) (i = 1, 2, \dots, n) (i=1,2,…,n) considering u b ub ub and l b lb lb;
- while end condition in not satisfied
- Calculate the fitness of each search agent (salp);
- F F F = the best search agent;
- c 1 = 2 e − ( 4 l L ) 2 c_1 = 2 e^{- \left(\frac{4 l}{L} \right)^2 } c1=2e−(L4l)2;
- for each salp x i x_i xi
- if i == 1
- Update the position of the leading salp by Eq. (1);
- else
- Update the position of the follower salp by Eq. (3);
- end if
- end for
- Put out-of-bounds salps back into the boundaries;
MSSA
显然,上述算法无法解决多目标优化问题,原因有二,一是SSA只保存一个解决方案作为最佳解决方案,因此它不能存储多个解决方案作为一个多目标问题的最佳解决方案。另一个则是SSA在每次迭代中都用迄今为止得到的最优解更新食物源,但对于多目标问题没有单一的最优解。
针对以上问题,提出解决方案:给SSA算法配备一个食物来源库,在优化过程中,每个salp都会使用Pareto dominance operators与库中个体进行比较,决定是否添加。
特别的,对于食物库满的情况,需要从中删除一个解决方案,但不能随意删除,故选择删除一个非主导方案。为了求这个方案,需要定义领域一定距离有解的个数。
d
⃗
=
m
a
x
⃗
−
m
i
n
⃗
r
e
p
o
s
i
t
o
r
y
s
i
z
e
\vec d = \frac{\vec{max} - \vec{min}}{repository \ size}
d=repository sizemax−min
故现可解决上述第二个问题,每次选择食物不再是固定选择最佳的那个,而是从食物库中挑选最不拥挤的,扩大探索力度。
参考文献
[1] Mirjalili, S. , Gandomi, A. H. , Mirjalili, S. Z. , Saremi, S. , Faris, H. , & Mirjalili, S. M. . (2017). Salp swarm algorithm: a bio-inspired optimizer for engineering design problems. Advances in Engineering Software, 114(dec.), 163-191.