智能优化算法:麻雀搜索算法-附代码

2020智能优化算法:麻雀搜索算法

文章目录

  • 2020智能优化算法:麻雀搜索算法
    • 1.算法原理
    • 2.算法结果
    • 3.参考文献
    • 4.Matlab代码
    • 5.Python代码

摘要:麻雀搜索算法(Sparrow Search Algorithm, SSA)是于2020年提出的。SSA 主要是受麻雀的觅食行为和反捕食行为的启发而提出的。该算法比较新颖,具有寻优能力强,收敛速度快的优点

1.算法原理

建立麻雀搜索算法的数学模型,主要规则如下所述:

  1. 发现者通常拥有较高的能源储备并且在整个种群中负责搜索到具有丰富食物的区域,为所有的加入者提供觅食的区域和方向。在模型建立中能量储备的高低取决于麻雀个体所对应的适应度值(Fitness Value)的好坏。
  2. 一旦麻雀发现了捕食者,个体开始发出鸣叫作为报警信号。当报警值大于安全值时,发现者会将加入者带到其它安全区域进行觅食。
  3. 发现者和加入者的身份是动态变化的。只要能够寻找到更好的食物来源,每只麻雀都可以成为发现者,但是发现者和加入者所占整个种群数量的比重是不变的。也就是说,有一只麻雀变成发现者必然有另一只麻雀变成加入者。
  4. 加入者的能量越低,它们在整个种群中所处的觅食位置就越差。一些饥肠辘辘的加入者更有可能飞往其它地方觅食,以获得更多的能量。
  5. 在觅食过程中,加入者总是能够搜索到提供最好食物的发现者,然后从最好的食物中获取食物或者在该发现者周围觅食。与此同时,一些加入者为了增加自己的捕食率可能会不断地监控发现者进而去争夺食物资源。
  6. 当意识到危险时,群体边缘的麻雀会迅速向安全区域移动,以获得更好的位置,位于种群中间的麻雀则会随机走动,以靠近其它麻雀。

在模拟实验中,我们需要使用虚拟麻雀进行食物的寻找,由n只麻雀组成的种群可表示为如下形式:
X = [ x 1 1 x 1 2 . . . x 1 d x 2 1 x 2 2 . . . x 2 d . . . . . . . . . . . . x n 1 x n 2 . . . x n d ] (1) X=\left[\begin{matrix} x_1^1&x_1^2&...&x_1^d\\ x_2^1&x_2^2&...&x_2^d\\ ...&...&...&... \\ x_n^1&x_n^2&...&x_n^d\\ \end{matrix}\right]\tag{1} X=x11x21...xn1x12x22...xn2............x1dx2d...xnd(1)
其中, d d d 表示待优化问题变量的维数, n n n 则是麻雀的数量。那么,所有麻雀的适应度值可以表示为如下形式:
F x = [ f ( [ x 1 1 x 1 2 . . . x 1 d ] ) f ( [ x 2 1 x 2 2 . . . x 2 d ] ) . . . f ( [ x n 1 x n 2 . . . x n d ] ) ] (2) F_x =\left[\begin{matrix} f([x_1^1&x_1^2&...&x_1^d])\\ f([x_2^1&x_2^2&...&x_2^d])\\ ... f([x_n^1&x_n^2&...&x_n^d]) \end{matrix}\right]\tag{2} Fx=f([x11f([x21...f([xn1x12x22xn2.........x1d])x2d])xnd])(2)
其中,f 表示适应度值。

在 SSA 中,具有较好适应度值的发现者在搜索过程中会优先获取食物。此外,因为发现者负责为整个麻雀种群寻找食物并为所有加入者提供觅食的方向。因此,发现者可以获得比加入者更大的觅食搜索范围。根据规则(1)和规则(2),在每次迭代的过程中,发现者的位置更新描述如下:
X i , j t + 1 = { X i , j . e x p ( − i α . i t e r m a x ) , i f   R 2 < S T X i , j + Q . L , i f   R 2 ≥ S T (3) X_{i,j}^{t+1}=\begin{cases} X_{i,j}.exp(-\frac{i}{\alpha.iter_{max}}),if\, R_2Xi,jt+1={ Xi,j.exp(α.itermaxi),ifR2<STXi,j+Q.L,ifR2ST(3)
其中, t t t 代表当前迭代数, j = 1 , 2 , 3 , . . . , d j =1, 2, 3, . . . , d j=1,2,3,...,d i t e m m a x item_{max} itemmax
是一个常数,表示最大的迭代次数。 X i j X_{ij} Xij表示第 i i i 个麻雀在第 j j j 维中的位置信息。 α ∈ ( 0 , 1 ] α∈(0, 1] α(0,1]是一个随机数。 R 2 ( R 2 ∈ [ 0 , 1 ] ) R_2(R_2∈[0,1]) R2(R2[0,1]) S T ( S T ∈ [ 0.5 , 1 ] ) ST(ST∈[0.5,1]) ST(ST[0.5,1])分别表示预警值和安全值。 Q Q Q 是服从正态分布的随机数。 L L L 表示一个 1 × d 1×d 1×d 的矩阵,其中该矩阵内每个元素全部为 1。

R 2 < S T R2< ST R2<ST 时,这意味着此时的觅食环境周围没有捕食者,发现者可以执行广泛的搜索操作。如果 R 2 ≥ S T R2≥ ST R2ST,这表示种群中的一些麻雀已经发现了捕食者,并向种群中其它麻雀发出了警报,此时所有麻雀都需要迅速飞到其它安全的地方进行觅食。

对于加入者,它们需要执行规则(3)和规则(4)。如前面所描述,在觅食过程中,一些加入者会时刻监视着发现者。一旦它们察觉到发现者已经找到了更好的食物,它们会立即离开现在的位置去争夺食物。如果它们赢了,它们可以立即获得该发现者的食物,否则需要继续执行规则(4)。加入者的位置更新描述如下:
X i , j t + 1 = { Q . e x p ( X w o r s t − X i , j t i 2 ) , i f   i > n / 2 X P t + 1 + ∣ X i , j − X P t + 1 ∣ . A + . L , o t h e r w i s e (4) X_{i,j}^{t+1}=\begin{cases} Q.exp(\frac{X_{worst}-X_{i,j}^t}{i^2}),if\, i>n/2\\ X_P^{t+1}+ |X_{i,j} - X_P^{t+1}|.A^{+}.L,otherwise \end{cases}\tag{4} Xi,jt+1={ Q.exp(i2XworstXi,jt),ifi>n/2XPt+1+Xi,jXPt+1.A+.L,otherwise(4)
其中, X p X_p Xp是目前发现者所占据的最优位置, X w o r s t X_{worst} Xworst则表示当前全局最差的位置。 A A A表示一个 1 × d 1×d 1×d 的矩阵,其中每个元素随机赋值为 1 或-1,并且 A + = A T ( A A T ) − 1 A^+=A^T(AA^T)^{-1} A+=AT(AAT)1。当i >n/2 时,这表明,适应度值较低的第 i 个加入者没有获得食物,处于十分饥饿的状态,此时需要飞往其它地方觅食,以获得更多的能量。

在模拟实验中,我们假设这些意识到危险的麻雀占总数量的 10% 到 20%。这些麻雀的初始位置是在种群中随机产生的。根据规则(5),其数学表达式可以表示为如下形式:
X i , j t + 1 = { X b e s t t + β . ∣ X i , j t − X b e s t t ∣ , i f   f i > f g X i , j t + K . ( ∣ X i , j t − X w o r s t t ∣ ( f i − f w ) + ε ) , i f   f i = f g (5) X_{i,j}^{t+1}=\begin{cases} X_{best}^t + \beta.|X_{i,j}^t - X_{best}^t|,if\, f_i>f_g\\ X_{i,j}^t + K.(\frac{|X_{i,j}^t - X_{worst}^t|}{(f_i -f_w)+\varepsilon}), if\, f_i =f_g \end{cases}\tag{5} Xi,jt+1={ Xbestt+β.Xi,jtXbestt,iffi>fgXi,jt+K.((fifw)+εXi,jtXworstt),iffi=fg(5)
其中,其中 X b e s t X_{best} Xbest是当前的全局最优位置。 β β β 作为步长控制参数,是服从均值为 0,方差为 1 的正态分布的随机数。 K ∈ [ − 1 , 1 ] K∈[-1,1] K[1,1]是一个随机数,fi则是当前麻雀个体的适应度值。 f g f_g fg f w f_w fw分别是当前全局最佳和最差的适应度值。 ε \varepsilon ε 的常数,以避免分母出现零。

为简单起见,当 f i > f g f_i >f_g fi>fg表示此时的麻雀正处于种群的边缘,极其容易受到捕食者的攻击。 X b e s t X_{best} Xbest表示这个位置的麻雀是种群中最好的位置也是十分安全的。 f i = f g f_i = f_g fi=fg时,这表明处于种群中间的麻雀意识到了危险,需要靠近其它的麻雀以此尽量减少它们被捕食的风险。 K K K 表示麻雀移动的方向同时也是步长控制参数。

算法流程

Step1: 初始化种群,迭代次数,初始化捕食者和加入者比列。

Step2:计算适应度值,并排序。

Step3:利用式(3)更新捕食者位置。

Step4:利用式(4)更新加入者位置。

Step5:利用式(5)更新警戒者位置。

Step6:计算适应度值并更新麻雀位置。

Step7:是否满足停止条件,满足则退出,输出结果,否则,重复执行Step2-6;

2.算法结果

智能优化算法:麻雀搜索算法-附代码_第1张图片

3.参考文献

[1] Xue J , Shen B . A novel swarm intelligence optimization approach: sparrow search algorithm[J]. Systems ence & Control Engineering An Open Access Journal, 2020, 8(1):22-34.

4.Matlab代码

麻雀搜索算法
https://mianbaoduo.com/o/bread/aJybk5w=
改进算法:
1.基于反向策略的麻雀搜索算法
https://mianbaoduo.com/o/bread/mbd-aZqUl54=

2.基于Tent混沌映射的麻雀搜索算法
https://mianbaoduo.com/o/bread/mbd-aZqVk5Y=

3.基于Logistic混沌映射的麻雀搜索算法
https://mianbaoduo.com/o/bread/mbd-aZqVk5c=

4.基于Circle混沌映射的麻雀搜索算法
https://mianbaoduo.com/o/bread/mbd-aZqVk5g=

5.基于Piecewise混沌映射的麻雀搜索算法
https://mianbaoduo.com/o/bread/mbd-aZqVk5k=

6.基于Chebyshev混沌映射的麻雀搜索算法
https://mianbaoduo.com/o/bread/mbd-aZqVk5o=

7.基于Sine混沌映射的麻雀搜索算法
https://mianbaoduo.com/o/bread/mbd-aZqWk50=

8.基于Singer混沌映射的麻雀搜索算法
https://mianbaoduo.com/o/bread/mbd-aZqWk54=

9.基于迭代混沌映射的麻雀搜索算法
https://mianbaoduo.com/o/bread/mbd-aZqWk58=

10.基于Sinusoidal混沌映射的麻雀搜索算法
https://mianbaoduo.com/o/bread/mbd-aZqWlJY=

11.基于随机游走改进的麻雀搜索算法
https://mianbaoduo.com/o/bread/mbd-aZuXmJc=

12.基于萤火虫改进的麻雀搜索算法
https://mianbaoduo.com/o/bread/mbd-aZuZmJk=

13.基于精英反向策略的麻雀搜索算法1
https://mianbaoduo.com/o/bread/mbd-aZycl5Y=

14.基于levy飞行改进的麻雀搜索算法
https://mianbaoduo.com/o/bread/mbd-aZqZlZg=

15.基于自适应t分布的麻雀算法
https://mianbaoduo.com/o/bread/YZWVlp5v

改进麻雀文献复现代码:
1.混沌麻雀。
参考文献:[1]吕鑫,慕晓冬,张钧,王震.混沌麻雀搜索优化算法[J/OL].北京航空航天大学学报:1-10[2020-11-16].https://doi.org/10.13700/j.bh.1001-5965.2020.0298.
https://mianbaoduo.com/o/bread/aZ2alZc=
2.融合柯西变异和反向学习的改进麻雀算法
[1]毛清华,张强.融合柯西变异和反向学习的改进麻雀算法[J/OL].计算机科学与探索:1-12[2020-12-16].http://kns.cnki.net/kcms/detail/11.5602.tp.20201203.1601.006.html.
https://mianbaoduo.com/o/bread/YZWYlZlp

5.Python代码

https://mianbaoduo.com/o/bread/mbd-aZuTk50=
改进算法:
基于Sinusoidal混沌映射的麻雀搜索算法 python 代码 https://mianbaoduo.com/o/bread/aZ6am5k=

基于迭代混沌映射的麻雀搜索算法 python 代码 https://mianbaoduo.com/o/bread/aZ6am5Y=

基于Singer混沌映射的麻雀搜索算法 python 代码 https://mianbaoduo.com/o/bread/aZ6amp4=

基于Sine混沌映射的麻雀搜索算法 python代码 https://mianbaoduo.com/o/bread/aZ6amp0=

基于Piecewise混沌映射的麻雀搜索算法 python代码 https://mianbaoduo.com/o/bread/aZ6ampo=

基于Logistic混沌映射的麻雀搜索算法 python 代码 https://mianbaoduo.com/o/bread/aZ6ampc=

基于Circle混沌映射的麻雀搜索算法 python 代码 https://mianbaoduo.com/o/bread/aZ6amZ8=

基于Chebyshev混沌映射的麻雀搜索算法 python代码 https://mianbaoduo.com/o/bread/aZ6amZ4=

基于Tent混沌映射的麻雀搜索算法 python代码 https://mianbaoduo.com/o/bread/aZ6amZs=

基于反向策略的麻雀搜索算法 python代码 https://mianbaoduo.com/o/bread/aZ6bmp0=

基于精英反向策略的麻雀搜索算法1 python代码 https://mianbaoduo.com/o/bread/aZ6bmp4=

基于精英反向策略的麻雀搜索算法2 python 代码 https://mianbaoduo.com/o/bread/aZ6bm5c=

基于萤火虫改进的麻雀搜索算法 python代码 https://mianbaoduo.com/o/bread/aZ6bm5g=

基于levy飞行改进的麻雀搜索算法 python 代码 https://mianbaoduo.com/o/bread/aZ6bm5o=

基于自适应t分布的麻雀搜索算法
https://mianbaoduo.com/o/bread/YZWVm5ls
改进麻雀文献复现代码:
1.混沌麻雀。
参考文献:[1]吕鑫,慕晓冬,张钧,王震.混沌麻雀搜索优化算法[J/OL].北京航空航天大学学报:1-10[2020-11-16].https://doi.org/10.13700/j.bh.1001-5965.2020.0298.
https://mianbaoduo.com/o/bread/aZ6cl5c=

你可能感兴趣的:(智能优化算法,算法,python,人工智能,机器学习)