黏菌优化算法(Slime Mould Algorithm,SMA)

一、算法灵感

  黏菌优化算法(Slime Mould Algorithm, SMA)是基于黏菌觅食行为的一种优化算法。在觅食过程中,黏菌发现食物时会发生振荡收缩。另外,在多个食物源之间,会形成粗细不一的静脉网络,静脉网络的粗细与食物源的质量有关。而黏菌在获取食物时,仍有可能对未知区域进行搜索。

二、算法介绍

2.1 初始化阶段

  在SMA中,初始化黏菌种群位置更新公式如(1)所示:
X i = r a n d ∙ ( U B − L B ) + L B (1) {X_i} = rand \bullet (UB - LB) + LB \tag{1} Xi=rand(UBLB)+LB(1)式中, X i X_{i} Xi 是第i个体的位置, U B UB UB L B LB LB 是搜索范围的上、下界, r a n d rand rand 为0到1之间的随机数。

2.2 探索阶段

  尽管黏菌找到了更好的食物源,它们仍会分离部分个体探索其他领域试图寻找更高质量的食物源。根据上述分析,黏菌位置的更新可表示为
X ( t + 1 ) = R a n d ∙ ( U B − L B ) + L B , R a n d < z (2) X(t + 1) = Rand \bullet (UB - LB) + LB,Rand < z \tag{2} X(t+1)=Rand(UBLB)+LB,Rand<z(2)其中, z = 0.03 z=0.03 z=0.03 r a n d rand rand 0 0 0 1 1 1 之间的随机数。

2.3 开发阶段

  当黏菌发现食物时,会发生收缩,其收缩模式可描述为
X ( t + 1 ) = { X b ( t ) + v b × ( W × X A ( t ) − X B ( t ) ) , r < p , v c × X ( t ) , r ≥ p , (3) X(t + 1) = \left\{ { \begin{aligned} &{ {X_b}(t) + vb \times (W \times {X_A}(t) - {X_B}(t)),r < p,} \cr &{vc \times X(t)\qquad\qquad\qquad\qquad\qquad\quad,r \ge p,} \cr \end{aligned}} \right. \tag{3} X(t+1)={ Xb(t)+vb×(W×XA(t)XB(t)),r<p,vc×X(t),rp,(3)其中, v b vb vb [ – a , a ] [–a, a] [a,a] 内的随机数, v c vc vc 是在 [ – 1 , 1 ] [–1, 1] [–1,1] 内振荡并最终趋于零的参数, X b ( t ) X_{b}(t) Xb(t) 表示当前适应度最优的个体位置, X ( t ) X(t) X(t) 表示当前黏菌个体的位置, X A ( t ) X_{A}(t) XA(t) X B ( t ) X_{B}(t) XB(t) 表示两个随机个体的位置, t t t 表示当前迭代次数, W W W 表示黏菌的权重系数。
  控制参数 p p p、参数 a a a 和权重系数 W W W 的更新公式分别为
p = tanh ⁡ ∣ S ( i ) − D F ∣ , ( i = 1 ,    2 ,    ⋯   ,    N ) , (4) p = \tanh |S(i) - DF|,(i = 1,\;2,\; \cdots ,\;N), \tag{4} p=tanhS(i)DF,(i=1,2,,N),(4) a = a r c t a n h ( − t T + 1 ) , (5) a = {\mathop{ arctanh}\nolimits} ( - {t \over T} + 1), \tag{5} a=arctanh(Tt+1),(5) W ( S m e l l I n d e x ( i ) ) = { 1 + r 1 log ⁡ ( b F − S ( i ) b F − w F + 1 ) , i < N 2 , 1 − r 1 log ⁡ ( b F − S ( i ) b F − w F + 1 ) , i ≥ N 2 , (6) W({ {SmellIndex}}(i)) = \left\{ {\begin{aligned} {1 + {r_1}\log ({ {bF - S(i)} \over {bF - wF}} + 1),i < {N \over 2},} \cr {1 - {r_1}\log ({ {bF - S(i)} \over {bF - wF}} + 1),i \ge {N \over 2},} \cr \end{aligned} } \right. \tag{6} W(SmellIndex(i))= 1+r1log(bFwFbFS(i)+1),i<2N,1r1log(bFwFbFS(i)+1),i2N,(6) S m e l l I n d e x = s o r t ( N ) (7) { {SmellIndex}} = { {sort}}(N) \tag{7} SmellIndex=sort(N)(7)其中, N N N 为种群规模, S ( i ) S(i) S(i) 表示第 i i i 个黏菌个体的适应度, D F DF DF 表示当前取得的最优适应度, r 1 r_{1} r1 表示 [ 0 , 1 ] [0,1] [0,1] 之间的随机数, T T T 表示最大迭代次数, i < N 2 i < {N \over 2} i<2N 表示 S ( i ) S(i) S(i) 排名前一半的黏菌个体, b F bF bF 表示在当前迭代获得的最佳适应度, w F wF wF 表示在当前迭代获得的最差适应度, S m e l l I n d e x SmellIndex SmellIndex 表示适应度序列。

2.4 算法伪代码

  1. 初始化黏菌数量 N N N 和最大迭代次数 T T T,等
  2. 初始化种群 X i ( i = 1 , 2 , . . . , n ) X_i(i=1,2,...,n) Xi(i=1,2,...,n)
  3. While t < T t < T t<T do
  4.   检查是否有黏菌个体超出了搜索空间并进行修改
  5.   计算每个黏菌的饥饿值
  6.   将黏菌按饥饿值的大小进行排序,并找到吃最多的黏菌 X b X_{b} Xb 及其位置 b e s t F i t n e s s bestFitness bestFitness
  7.   使用公式(6)更新参数 W W W
  8.   For i = 1 i = 1 i=1 to N N N do
  9.     If R a n d < z Rand<z Rand<z then
  10.       使用公式(2)更新黏菌位置
  11.     Else
  12.     使用公式(4)更新参数 p p p
  13.     使用公式(3)更新黏菌位置
  14.     End If
  15.   End For
  16.    t = t + 1 t=t+1 t=t+1
  17. End While
  18. 返回吃最多的黏菌 X b X_{b} Xb 及其位置 b e s t F i t n e s s bestFitness bestFitness

三、实验结果

  SMA在23个经典测试函数(设置维度 d i m = 30 dim=30 dim=30)的F1、F5、F8中的收敛曲线,测试函数公式如下:

函数 公式 理论值
F1 F 1 ( x ) = ∑ i = 1 d x i 2 {F_1}(x) = \sum\nolimits_{i = 1}^d {x_i^2} F1(x)=i=1dxi2 0.00 0.00 0.00
F5 F 5 ( x ) = ∑ i = 1 n − 1 [ 100 ( x i + 1 − x i 2 ) 2 + ( x i − 1 ) 2 ] {F_5}(x) = \sum\nolimits_{i = 1}^{n - 1} {[100{ {({x_{i + 1}} - x_i^2)}^2} + { {({x_i} - 1)}^2}]} F5(x)=i=1n1[100(xi+1xi2)2+(xi1)2] 0.00 0.00 0.00
F8 F 8 ( x ) = ∑ i = 1 d − x i sin ⁡ ( ∣ x i ∣ ) {F_8}(x) = \sum\nolimits_{i = 1}^d { - {x_i}\sin (\sqrt {|{x_i}|})} F8(x)=i=1dxisin(xi ) − 418.9829 × d i m -418.9829×dim 418.9829×dim

3.1 F1收敛曲线

在这里插入图片描述

3.2 F5收敛曲线

在这里插入图片描述

3.3 F8收敛曲线

在这里插入图片描述

四、参考文献

[1] LI S M, CHEN H L, WANG M J, et al. Slime mould algorithm: a new method for stochastic optimization[J]. Future generation computer systems, 2020, 111, 300-323.

扫描二维码关注公众号,回复: 16842807 查看本文章

猜你喜欢

转载自blog.csdn.net/jiaheming1983/article/details/129346479