樽海鞘群算法SSA MSSA 2017(Advances in Engineering Software)
樽海鞘
樽海鞘属于纽鳃樽科,具有透明桶装的身体,它们的组织与水母非常相似,如下图所示。
樽海鞘最有趣的行为之一是他们的群集行为,在深海中,樽海鞘通常形成一个称为樽海鞘链的群体,这个链条如右图所示。这种行为的主要原因还不是很清楚,但一些研究人员认为,这是为了通过快速协调变化和觅食实现更好的运动。
数学模型
该方法有两个分支,分别对应单目标(SSA)和多目标(MSSA),其主要灵感是樽海鞘在海洋中航行和觅食时的群聚行为。
SSA
其做法是将种群分为两组:领导者和追随者。领导者引导种群,而追随者互相跟随(前面的均是后面的直接或间接领袖)。
与其他群智能算法类似,在 nnn 维搜索空间中定义樽海鞘的位置,其中 nnn 是给定问题的变量数。因此,所有樽海鞘的位置都存储在称为 xxx 的二维矩阵中,并且假定:在该搜索空间中有一个称为 FFF 的食物源作为种群的目标。
更新领导者位置
xj1={Fj+c1((ubj−lbj)c2+lbj) c3≥0Fj−c1((ubj−lbj)c2+lbj) c3<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)
其中, xj1x_j^1xj1 为第一个樽海鞘(leader)在第 jjj 维中的位置,FjF_jFj 为食物源在第 jjj 维中的位置,ubjub_jubj 为第 jjj 维的上界,lbjlb_jlbj 为下界,c2,c3c_2, c_3c2,c3 为随机数。
根据上式可以看出,领导者只更新其相对于食物来源的位置,其中系数 c1=2e−(4lL)2c_1 = 2 e^{- \left(\frac{4 l}{L} \right)^2 }c1=2e−(L4l)2 为重要参数,其主要用于平衡探索与开发。其中,lll 为当前迭代次数,LLL 为最大迭代次数。c2,c3c_2, c_3c2,c3 为 [0 - 1] 之间的均匀随机数,追随者的更新方式为:
xji=12at2+v0t,(2)
x_j^i = \frac{1}{2} a t^2 + v_0 t
,
\tag{2}
xji=21at2+v0t,(2)
其中,i≥2i \geq 2i≥2 表示第 iii 个追随者在第 jjj 维中的位置,a=vfinalv0a = \frac{v_{final}}{v_0}a=v0vfinal,v=x−x0tv = \frac{x - x_0}{t}v=tx−x0。进一步的,有:
xji=12(xji+xji−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 xix_ixi, (i=1,2,…,n)(i = 1, 2, \dots, n)(i=1,2,…,n) considering ububub and lblblb;
- while end condition in not satisfied
- Calculate the fitness of each search agent (salp);
- FFF = the best search agent;
- c1=2e−(4lL)2c_1 = 2 e^{- \left(\frac{4 l}{L} \right)^2 }c1=2e−(L4l)2;
- for each salp xix_ixi
- 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⃗=max⃗−min⃗repository size\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.