精华内容
下载资源
问答
  • 麻雀搜索算法:一种受麻雀群体行为启发提出的智能优化算法
  • 内置麻雀搜索算法优化支持向量机的程序,还有麻雀搜索算法提出的原论文
  • 较新的优化算法麻雀算法优化BP神经网络权值与阈值;
  • 麻雀搜索算法(Sparrow Search Algorithm
  • 麻雀搜索算法作为一种启发式算法,模仿了掠夺性活动和麻雀群的逃逸活动,具有更好的收敛性能比其他一些群智能算法要好。
  • 可以运行的代码!麻雀搜索算法(SSA)搭配论文可以很好对算法进行解读,适合初学者
  • 可以运行的代码!麻雀搜索算法(SSA)优化BP神经网络,能够很好的进行预测,并且该算法是今年提出的,非常好用
  • 麻雀搜索算法.rar

    2020-04-21 15:09:17
    麻雀搜索算法是最新的群智能优化算法,里面有相关文章和代码,可以结合自身课题进行研究,值得推荐,亲用优化效果非常的好
  • 可以运行的代码!麻雀搜索算法(SSA)优化BP神经网络,能够很好的进行预测,并且该算法是今年提出的,非常好用,值得推荐和写论文
  • 麻雀搜索算法:一种受麻雀群体行为启发提出的智能优化算法
  • 【优化求解】基于自适应t分布的麻雀搜索算法matlab源码.md
  • matlab源码
  • 麻雀搜索算法原理、测试函数及matlab代码
  • 智能优化算法:麻雀搜索算法-附代码

    万次阅读 多人点赞 2020-09-27 16:34:00
    2020智能优化算法:麻雀搜索算法-附代码 文章目录2020智能优化算法:麻雀搜索算法-附代码1.算法原理2.算法结果3.参考文献4.Matlab代码 摘要:麻雀搜索算法(Sparrow Search Algorithm, SSA)是于2020年提出的。SSA ...

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


    摘要:麻雀搜索算法(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_2<ST\\ X_{i,j} + Q.L,if\, R_2\geq ST \end{cases}\tag{3} Xi,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.算法结果

    在这里插入图片描述

    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代码

    麻雀搜索算法
    改进算法:

    名称说明或者参考文献
    基于反向策略的麻雀搜索算法原创
    基于Tent混沌映射的麻雀搜索算法原创
    基于Logistic混沌映射的麻雀搜索算法原创
    基于Circle混沌映射的麻雀搜索算法原创
    基于Piecewise混沌映射的麻雀搜索算法原创
    基于Chebyshev混沌映射的麻雀搜索算法原创
    基于Sine混沌映射的麻雀搜索算法原创
    基于Singer混沌映射的麻雀搜索算法原创
    基于迭代混沌映射的麻雀搜索算法原创
    基于Sinusoidal混沌映射的麻雀搜索算法原创
    基于随机游走改进的麻雀搜索算法原创
    基于萤火虫改进的麻雀搜索算法原创
    基于精英反向策略的麻雀搜索算法1原创
    基于精英反向策略的麻雀搜索算法2原创
    基于levy飞行改进的麻雀搜索算法原创
    基于自适应t分布的麻雀算法原创
    混沌麻雀[1]吕鑫,慕晓冬,张钧,王震.混沌麻雀搜索优化算法[J/OL].北京航空航天大学学报:1-10[2020-11-16].https://doi.org/10.13700/j.bh.1001-5965.2020.0298.
    融合柯西变异和反向学习的改进麻雀算法[1]毛清华,张强.融合柯西变异和反向学习的改进麻雀算法[J/OL].计算机科学与探索:1-12[2020-12-16].http://kns.cnki.net/kcms/detail/11.5602.tp.20201203.1601.006.html.
    混合正弦余弦算法和Lévy飞行的麻雀算法(ISSA)[1]毛清华,张强,毛承成,柏嘉旋.混合正弦余弦算法和Lévy飞行的麻雀算法[J/OL].山西大学学报(自然科学版):1-6[2021-04-09].https://doi.org/10.13451/j.sxu.ns.2020135.
    基于 Sobol 序列和纵横交叉策略的麻雀搜索算法(SSASC)[1]段玉先,刘昌云.基于 Sobol 序列和纵横交叉策略的麻雀搜索算法[J/OL].计算机应用. https://kns.cnki.net/kcms/detail/51.1307.TP.20210525.1453.002.html
    融合正余弦和柯西变异的麻雀搜索算法(SCSSA)[1]李爱莲,全凌翔,崔桂梅,解韶峰.融合正余弦和柯西变异的麻雀搜索算法[J/OL].计算机工程与应用:1-11[2021-09-09].http://kns.cnki.net/kcms/detail/11.2127.TP.20210806.0937.008.html.
    多策略融合的改进麻雀搜索算法(ISSA)[1]付华,刘昊.多策略融合的改进麻雀搜索算法及其应用[J/OL].控制与决策:1-10[2021-09-09].https://doi.org/10.13195/j.kzyjc.2021.0582.
    基于Logistic回归麻雀算法(MSSA)[1]陈刚,林东,陈飞,陈祥宇.基于Logistic回归麻雀算法的图像分割[J/OL].北京航空航天大学学报:1-14[2021-09-26].https://doi.org/10.13700/j.bh.1001-5965.2021.0268.
    自适应变异麻雀搜索优化算法(AMSSA)[1]唐延强,李成海,宋亚飞,陈晨,曹波.自适应变异麻雀搜索优化算法[J/OL].北京航空航天大学学报:1-14[2021-09-27].https://doi.org/10.13700/j.bh.1001-5965.2021.0282.
    混合策略改进的麻雀搜索算法(MSSA)[1]张伟康,刘升,任春慧.混合策略改进的麻雀搜索算法[J/OL].计算机工程与应用:1-12[2021-08-05].http://kns.cnki.net/kcms/detail/11.2127.TP.20210721.0848.002.html.

    算法相关应用matlab代码:

    名称说明或者参考链接
    麻雀优化的BP神经网络(预测)https://blog.csdn.net/u011835903/article/details/112149776
    基于Tent混沌映射改进的麻雀搜索算法SSA优化BP神经网络(预测)-
    基于Sine混沌映射改进的麻雀搜索算法SSA优化BP神经网络(预测)-
    基于Logistic混沌映射改进的麻雀搜索算法SSA优化BP神经网络(预测)-
    麻雀优化的BP神经网络(分类)https://blog.csdn.net/u011835903/article/details/112149394
    基于麻雀搜索算法优化概率神经网络PNN的分类预测https://blog.csdn.net/u011835903/article/details/111496232
    基于麻雀搜索算法优化的Elman神经网络数据预测https://blog.csdn.net/u011835903/article/details/111411127
    基于麻雀搜索算法的极限学习机(ELM)分类算法https://blog.csdn.net/u011835903/article/details/111177850
    基于麻雀搜索算法的极限学习机(ELM)回归预测https://blog.csdn.net/u011835903/article/details/111073635
    基于麻雀算法优化的相关向量机RVM的分类算法https://blog.csdn.net/u011835903/article/details/119005293
    基于麻雀算法优化的相关向量机RVM回归预测算法https://blog.csdn.net/u011835903/article/details/118998966
    基于麻雀算法优化的核极限学习机(KELM)的分类算法https://blog.csdn.net/u011835903/article/details/116851164
    基于麻雀算法优化的核极限学习机(KELM)回归预测https://blog.csdn.net/u011835903/article/details/116849032
    基于麻雀搜索算法优化的广义回归神经网络(GRNN)预测https://blog.csdn.net/u011835903/article/details/110941139
    基于麻雀搜索算法优化的SVM数据分类预测https://blog.csdn.net/u011835903/article/details/110523352
    基于麻雀搜索的PID神经网络解耦控制算法https://blog.csdn.net/u011835903/article/details/110437852
    基于麻雀搜索优化K-means图像分割算法https://blog.csdn.net/u011835903/article/details/109404281
    基于麻雀算法优化的二维最大熵图像阈值分割https://blog.csdn.net/u011835903/article/details/108214713
    基于麻雀算法优化的最大熵多阈值分割https://blog.csdn.net/u011835903/article/details/108203775
    基于麻雀算法的二维Otsu图像阈值分割https://blog.csdn.net/u011835903/article/details/108023193
    麻雀算法优化的otsu多阈值分割https://blog.csdn.net/u011835903/article/details/108019744
    麻雀算法优化脉冲耦合神经网络的图像自动分割https://blog.csdn.net/u011835903/article/details/112909060
    基于麻雀算法优化的Tsallis相对熵图像多阈值分割https://blog.csdn.net/u011835903/article/details/113755585
    基于麻雀搜索算法与双伽马校正的图像自适应增强算法https://blog.csdn.net/u011835903/article/details/109330643
    基于麻雀搜索算法与非完全beta函数的自适应图像增强算法https://blog.csdn.net/u011835903/article/details/109313513
    基于麻雀搜索算法PID参数优化https://blog.csdn.net/u011835903/article/details/109306387
    基于麻雀搜索算法的TSP问题求解https://blog.csdn.net/u011835903/article/details/109587929
    基于麻雀搜索算法无线传感器网络(WSN)覆盖优化https://blog.csdn.net/u011835903/article/details/109262039
    基于麻雀搜索算法的3D无线传感器网络(WSN)覆盖优化https://blog.csdn.net/u011835903/article/details/113834323
    基于麻雀搜索的LMS自适应滤波算法https://blog.csdn.net/u011835903/article/details/110529694
    基于麻雀搜索的路径规划算法https://blog.csdn.net/u011835903/article/details/109100220
    基于麻雀搜搜算法的积分计算算法https://blog.csdn.net/u011835903/article/details/114330697

    5.Python代码

    麻雀搜索算法
    改进算法:

    名称说明或者参考文献
    基于反向策略的麻雀搜索算法原创
    基于Tent混沌映射的麻雀搜索算法原创
    基于Logistic混沌映射的麻雀搜索算法原创
    基于Circle混沌映射的麻雀搜索算法原创
    基于Piecewise混沌映射的麻雀搜索算法原创
    基于Chebyshev混沌映射的麻雀搜索算法原创
    基于Sine混沌映射的麻雀搜索算法原创
    基于Singer混沌映射的麻雀搜索算法原创
    基于迭代混沌映射的麻雀搜索算法原创
    基于Sinusoidal混沌映射的麻雀搜索算法原创
    基于随机游走改进的麻雀搜索算法原创
    基于萤火虫改进的麻雀搜索算法原创
    基于精英反向策略的麻雀搜索算法1原创
    基于精英反向策略的麻雀搜索算法2原创
    基于levy飞行改进的麻雀搜索算法原创
    基于自适应t分布的麻雀算法原创
    混沌麻雀[1]吕鑫,慕晓冬,张钧,王震.混沌麻雀搜索优化算法[J/OL].北京航空航天大学学报:1-10[2020-11-16].https://doi.org/10.13700/j.bh.1001-5965.2020.0298.
    混合正弦余弦算法和Lévy飞行的麻雀算法(ISSA)[1]毛清华,张强,毛承成,柏嘉旋.混合正弦余弦算法和Lévy飞行的麻雀算法[J/OL].山西大学学报(自然科学版):1-6[2021-04-09].https://doi.org/10.13451/j.sxu.ns.2020135.
    展开全文
  • 受麻雀群体智慧、觅食和反捕食行为的启发,提出了一种新的群体优化方法,即麻雀搜索算法(SSA)。
  • 针对麻雀搜索算法易陷入局部最优、收敛速度慢等不足,提出一种多策略融合的改进麻雀搜索算法.采用精英混沌反向学习策略生成初始种群,增强初始个体的质量和多样性;结合鸡群算法的随机跟随策略优化麻雀搜索算法中跟随者...

    一、理论基础

    1、麻雀搜索算法

    请参考这里

    2、改进麻雀搜索算法

    对SSA算法从以下三方面进行改进:
    1)提出精英混沌反向学习策略并引入麻雀种群初始化过程,扩大全局勘探范围的同时避免初始种群的随机性引起算法的不确定性,提升算法规避局部极值的能力和收敛速度;
    2)在跟随者位置更新过程引入随机跟随策略,协调算法的全局搜索性能和局部开采能力;
    3)采用柯西-高斯变异策略提升算法的种群多样性保持能力和抗停滞能力,帮助算法跳出局部最优。

    2.1 种群初始化的改进

    2.1.1 初始种群多样化

    选用均匀性更好的立方混沌映射初始化麻雀种群,混沌算子具有随机性和规律性的优点,能够在一定范围内对所有的状态不重复遍历,公式如下: 2 y i + 1 = 4 y i 3 − 3 y i (1) 2y_{i+1}=4y_i^3-3y_i\tag{1} 2yi+1=4yi33yi(1) − 1 < y i < 1 , y i ≠ 0 , i = 0 , 1 , ⋯   , N (2) -1<y_i<1,y_i≠0,i=0,1,\cdots,N\tag{2} 1<yi<1,yi=0,i=0,1,,N(2) x i = X l b + ( X u b − X l b ) × ( y i + 1 ) 2 (3) x_i=X_{lb}+\frac{(X_{ub}-X_{lb})×(y_i+1)}{2}\tag{3} xi=Xlb+2(XubXlb)×(yi+1)(3)式(3)中, x i x_i xi为映射后麻雀个体; X l b X_{lb} Xlb X u b X_{ub} Xub分别对应解空间中的下界和上界。混沌立方映射初始化麻雀种群的具体过程为:随机在 [ − 1 , 1 ] [-1,1] [1,1]内生成一个 d d d维向量作为初始个体,然后代入式(1)对其每一维进行迭代生成 N − 1 N-1 N1个新个体,最后代入式(3)将立方映射产生的变量值映射到麻雀个体上。

    2.1.2 初始种群精英化

    通过透镜成像反向学习方法计算透镜成像反向解来扩大可选解的范围,增加选取更优解的概率,从而实现对初始种群个体质量的提升。设 x j x_j xj x j ∗ x_j^* xj分别表示当前麻雀个体及其透镜成像反向后个体, x j ∗ = a j + b j 2 + a j + b j 2 k − x j k (4) x_j^*=\frac{a_j+b_j}{2}+\frac{a_j+b_j}{2k}-\frac{x_j}{k}\tag{4} xj=2aj+bj+2kaj+bjkxj(4)其中, a j a_j aj b j b_j bj分别为当前种群中第 j j j维的最大值和最小值, k k k为透镜的缩放系数,本文 k = 10000 k=10000 k=10000
    精英混沌反向学习策略初始化麻雀种群的具体过程为:随机初始化个体数为 N N N的初始麻雀种群 X = [ x i 1 , x i 2 , ⋯   , x i d ] , i = 1 , 2 , ⋯   , N X=[x_{i1},x_{i2},\cdots,x_{id}],i=1,2,\cdots,N X=[xi1,xi2,,xid],i=1,2,,N x i d x_{id} xid表示第 i i i只麻雀在第 d d d维的位置;将种群 X X X代入式(3)生成混沌种群 Y Y Y,同时将种群 X X X代入式(4)生成透镜成像反向种群 Z Z Z;将种群 Y Y Y和种群 Z Z Z内麻雀个体根据适应度值进行排序,选择前 N N N个较优个体构成精英混沌反向种群 P P P;种群 P P P与原麻雀种群 X X X根据个体适应度值排序选取前 N N N个个体组成新的初始麻雀种群。 X ′ = [ x i 1 ′ , x i 2 ′ , ⋯   , x i d ′ ] (5) X'=[x_{i1}',x_{i2}',\cdots,x_{id}']\tag{5} X=[xi1,xi2,,xid](5)

    2.2 跟随者位置更新的改进

    将鸡群优化算法中的随机跟随策略引入麻雀搜索算法中的跟随者位置更新过程,充分利用上一代个体的位置信息和概率性变化。改进后跟随者位置更新公式如下: X i d t + 1 = { Q ⋅ exp ⁡ ( X w o r s t t − X i d t i 2 ) ,   i > n / 2 X i d t + S 3 ⋅ r a n d ( 0 , 1 ) ⋅ ( X s d t − X i d t ) , i ≤ n / 2 (6) X_{id}^{t+1}=\begin{dcases}Q\cdot\exp\left(\frac{X_{worst}^t-X_{id}^t}{i^2}\right),\quad\quad\quad\quad\quad\, i>n/2\\X_{id}^t+S_3\cdot rand(0,1)\cdot(X_{sd}^t-X_{id}^t),\quad i≤n/2\end{dcases}\tag{6} Xidt+1=Qexp(i2XworsttXidt),i>n/2Xidt+S3rand(0,1)(XsdtXidt),in/2(6)其中, S 3 = exp ⁡ ( f s − f i ) S_3=\exp(f_s-f_i) S3=exp(fsfi) f i f_i fi表示第 i i i只麻雀的适应度值, k ∈ [ 1 , N ] k\in[1,N] k[1,N],且 k ≠ i k≠i k=i

    2.3 引入柯西高斯变异策略

    在基本SSA算法迭代的后期,麻雀个体的快速同化,导致容易出现局部最优停滞的情况。为了解决这一问题,采用柯西-高斯变异策略,选择当前适应度最好的个体进行变异,然后比较其变异前后的位置,选择较优的位置代入下一次迭代。具体公式如下: U b e s t t = X b e s t t [ 1 + λ 1 c a u c h y ( 0 , σ 2 ) + λ 2 G a u s s ( 0 , σ 2 ) ] (7) U_{best}^t=X_{best}^t\left[1+\lambda_1cauchy(0,\sigma^2)+\lambda_2Gauss(0,\sigma^2)\right]\tag{7} Ubestt=Xbestt[1+λ1cauchy(0,σ2)+λ2Gauss(0,σ2)](7) σ = { 1 ,   f ( X b e s t ) < f ( X i ) exp ⁡ ( f ( X b e s t ) − f ( X i ) ∣ f ( X b e s t ) ∣ ) , o t h e r w i s e (8) \sigma=\begin{dcases}1,\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\, f(X_{best})<f(X_i)\\\exp\left(\frac{f(X_{best})-f(X_{i})}{|f(X_{best})|}\right),\quad otherwise\end{dcases}\tag{8} σ=1,f(Xbest)<f(Xi)exp(f(Xbest)f(Xbest)f(Xi)),otherwise(8)其中, U b e s t t U_{best}^t Ubestt表示最优个体变异后的位置; σ 2 \sigma^2 σ2表示柯西-高斯变异策略的标准差; c a u c h y ( 0 , σ 2 ) cauchy(0,\sigma^2) cauchy(0,σ2)是满足柯西分布的随机变量; G a u s s ( 0 , σ 2 ) Gauss(0,\sigma^2) Gauss(0,σ2)是满足高斯分布的随机变量; λ 1 = 1 − t 2 / T max ⁡ 2 \lambda_1=1-t^2/T_{\max}^2 λ1=1t2/Tmax2 λ 2 = t 2 / T max ⁡ 2 \lambda_2=t^2/T_{\max}^2 λ2=t2/Tmax2是随迭代次数自适应调整的动态参数。在寻优过程中, λ 1 \lambda_1 λ1逐渐减小, λ 2 \lambda_2 λ2逐渐增大,使算法可以跳出当前停滞,并协调其局部开发和全局探索的能力。

    二、仿真实验与分析

    选取麻雀搜索算法、改进麻雀搜索算法、粒子群算法(Particle Swarm Optimization,PSO)、鲸鱼优化算法(Whale Optimization Algorithm, WOA)和灰狼优化算法(Grey Wolf Optimizer, GWO)进行测试函数寻优对比,各算法的参数设置如文献[1]中表2所示,所有算法的共有参数保持一致,种群规模设置为50,最大迭代次数设置为500。为了去除偶然性引起的误差,分别对文献[1]中30维的10个测试函数进行30次独立试验。结果显示如下:
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

    函数:F1
    PSO:最大值: 94.1718,最小值:17.6926,平均值:43.1902,标准差:21.5546
    GWO:最大值: 2.3984e-32,最小值:3.8255e-35,平均值:2.3802e-33,标准差:4.9171e-33
    WOA:最大值: 3.3871e-84,最小值:3.2334e-97,平均值:1.4843e-85,标准差:6.3226e-85
    SSA:最大值: 1.9781e-128,最小值:0,平均值:6.5937e-130,标准差:3.6115e-129
    ISSA:最大值: 7.0119e-145,最小值:0,平均值:2.3373e-146,标准差:1.2802e-145
    函数:F2
    PSO:最大值: 22.4617,最小值:8.3081,平均值:14.7181,标准差:3.3139
    GWO:最大值: 2.7549e-19,最小值:8.4841e-21,平均值:7.5663e-20,标准差:6.5594e-20
    WOA:最大值: 3.5085e-53,最小值:3.2133e-61,平均值:1.2074e-54,标准差:6.3988e-54
    SSA:最大值: 2.7213e-67,最小值:0,平均值:9.0717e-69,标准差:4.9684e-68
    ISSA:最大值: 3.1039e-71,最小值:0,平均值:1.0462e-72,标准差:5.665e-72
    函数:F3
    PSO:最大值: 1006.0408,最小值:113.1589,平均值:404.6592,标准差:208.4944
    GWO:最大值: 1.4311e-07,最小值:7.2939e-12,平均值:1.5049e-08,标准差:2.9366e-08
    WOA:最大值: 43586.0771,最小值:5103.9347,平均值:27484.4536,标准差:10315.9446
    SSA:最大值: 5.6306e-98,最小值:0,平均值:1.8769e-99,标准差:1.028e-98
    ISSA:最大值: 4.3727e-142,最小值:0,平均值:1.7094e-143,标准差:8.0547e-143
    函数:F4
    PSO:最大值: 9.1564,最小值:3.7073,平均值:5.7951,标准差:1.3134
    GWO:最大值: 5.2453e-08,最小值:2.2348e-09,平均值:1.719e-08,标准差:1.3886e-08
    WOA:最大值: 88.9979,最小值:0.0011268,平均值:34.206,标准差:31.6887
    SSA:最大值: 3.2885e-69,最小值:0,平均值:1.0989e-70,标准差:6.0035e-70
    ISSA:最大值: 4.8263e-78,最小值:0,平均值:2.7736e-79,标准差:1.0282e-78
    函数:F5
    PSO:最大值: 13586.9939,最小值:476.0513,平均值:4443.7836,标准差:2976.608
    GWO:最大值: 27.95,最小值:25.7358,平均值:26.6093,标准差:0.65434
    WOA:最大值: 28.7226,最小值:26.289,平均值:27.3783,标准差:0.50655
    SSA:最大值: 0.00021528,最小值:3.5465e-08,平均值:3.7463e-05,标准差:5.9155e-05
    ISSA:最大值: 6.6921e-07,最小值:1.1515e-10,平均值:9.2932e-08,标准差:1.5127e-07
    函数:F6
    PSO:最大值: 507,最小值:54,平均值:213,标准差:120.0698
    GWO:最大值: 0,最小值:0,平均值:0,标准差:0
    WOA:最大值: 0,最小值:0,平均值:0,标准差:0
    SSA:最大值: 0,最小值:0,平均值:0,标准差:0
    ISSA:最大值: 0,最小值:0,平均值:0,标准差:0
    函数:F7
    PSO:最大值: 2.1261,最小值:0.20768,平均值:0.71418,标准差:0.44671
    GWO:最大值: 0.00316,最小值:0.00035024,平均值:0.0010796,标准差:0.00058815
    WOA:最大值: 0.011361,最小值:8.1668e-06,平均值:0.0017113,标准差:0.0026093
    SSA:最大值: 0.0012206,最小值:6.8919e-06,平均值:0.00028975,标准差:0.00027191
    ISSA:最大值: 0.0012369,最小值:6.4683e-05,平均值:0.00044429,标准差:0.00031557
    函数:F8
    PSO:最大值: -2586.1539,最小值:-4001.1163,平均值:-3118.0535,标准差:300.6732
    GWO:最大值: -3455.1784,最小值:-7447.7589,平均值:-6058.3656,标准差:801.597
    WOA:最大值: -6773.6387,最小值:-12568.7061,平均值:-10613.429,标准差:1871.9202
    SSA:最大值: -7081.2722,最小值:-9624.2635,平均值:-8277.0795,标准差:644.6189
    ISSA:最大值: -6811.2203,最小值:-12568.9849,平均值:-9880.1618,标准差:1802.1352
    函数:F9
    PSO:最大值: 138.8482,最小值:61.9705,平均值:94.4587,标准差:18.1114
    GWO:最大值: 6.3524,最小值:0,平均值:0.89469,标准差:1.8793
    WOA:最大值: 0,最小值:0,平均值:0,标准差:0
    SSA:最大值: 0,最小值:0,平均值:0,标准差:0
    ISSA:最大值: 0,最小值:0,平均值:0,标准差:0
    函数:F10
    PSO:最大值: 1.8337,最小值:0.90763,平均值:1.1396,标准差:0.21535
    GWO:最大值: 0.021544,最小值:0,平均值:0.0014906,标准差:0.0048577
    WOA:最大值: 0.081078,最小值:0,平均值:0.0027026,标准差:0.014803
    SSA:最大值: 0,最小值:0,平均值:0,标准差:0
    ISSA:最大值: 0,最小值:0,平均值:0,标准差:0
    

    结果证明改进策略具有一定的协作互补性,ISSA算法具有更好的收敛性能、整体寻优协同能力和求解稳定性,相较SSA算法综合性能提升显著。

    三、参考文献

    [1] 付华, 刘昊. 多策略融合的改进麻雀搜索算法及其应用[J]. 控制与决策, 2022, 37(1): 87-96.

    展开全文
  • 基于麻雀搜索算法的函数寻优算法

    千次阅读 2021-05-28 10:54:38
    麻雀搜索算法(Sparrow Search Algorithm, SSA)是2020年提出的一种新兴的元启发式算法,它与粒子群算法、蜻蜓优化算法等同属于基于群体的社会化特征优化的群智能算法。该算法通过不断更新个体位置,模拟麻雀觅食和反...

    一、理论基础

    麻雀搜索算法(Sparrow Search Algorithm, SSA)是2020年提出的一种新兴的元启发式算法,它与粒子群算法、蜻蜓优化算法等同属于基于群体的社会化特征优化的群智能算法。该算法通过不断更新个体位置,模拟麻雀觅食和反捕食行为。相比传统算法,麻雀搜索算法的结构简单、易于实现,且控制参数较少,局部搜索能力较强。该算法在单峰、多峰等基准函数上的表现优于粒子群算法、蚁群算法等传统算法。
    在麻雀搜索算法中,将个体区分为发现者、跟随者和警戒者,每个个体位置对应一个解。根据算法设定,警戒者所占种群比例10%~20%,而发现者和跟随者是动态变化的, 即一只个体成为发现者必然意味着另一只个体将成为跟随者。按照分工划分,发现者主要为整个种群提供觅食方向和区域,跟随者则是跟随发现者进行觅食,警戒者负责对于觅食区域的监视。在觅食过程中,通过不断更新三者位置,完成资源的获取。
    设种群中有 n n n只麻雀,则由所有个体组成的种群可表示为 X = [ x 1 , x 2 , ⋯   , x n ] T X=[x_1,x_2,\cdots,x_n]^T X=[x1,x2,,xn]T,个体各自对应的适应度函数为 F = [ f ( x 1 ) , f ( x 2 ) , ⋯   , f ( x n ) ] T F=[f(x_1),f(x_2),\cdots,f(x_n)]^T F=[f(x1),f(x2),,f(xn)]T。具体表示为: 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=\begin{bmatrix} x_{1,1} & x_{1,2} & \cdots & \cdots & x_{1,d} \\x_{2,1} & x_{2,2} & \cdots & \cdots & x_{2,d} \\\vdots & \vdots & \vdots & \vdots & \vdots\\ x_{n,1} & x_{n,2} & \cdots & \cdots & x_{n,d} \\ \end{bmatrix}\tag{1} X=x1,1x2,1xn,1x1,2x2,2xn,2x1,dx2,dxn,d(1) F = [ 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=\begin{bmatrix} f(\begin{bmatrix}x_{1,1} & x_{1,2} & \cdots & \cdots & x_{1,d}\end{bmatrix}) \\f(\begin{bmatrix}x_{2,1} & x_{2,2} & \cdots & \cdots & x_{2,d}\end{bmatrix})\\ \vdots\\ f(\begin{bmatrix}x_{n,1} & x_{n,2} & \cdots & \cdots & x_{n,d}\end{bmatrix}) \end{bmatrix}\tag{2} F=f([x1,1x1,2x1,d])f([x2,1x2,2x2,d])f([xn,1xn,2xn,d])(2)

    1、发现者位置更新

    发现者的位置更新方式如下: x i , j t + 1 = { x i , j t ⋅ exp ⁡ ( − i α × i t e r m a x ) , R 2 < S T x i , j t + Q ⋅ L ,      R 2 ≥ S T (3) x_{i,j}^{t+1}=\begin{dcases}x_{i,j}^t\cdot \exp(\frac{-i}{\alpha×iter_{max}}),R_2<ST\\x_{i,j}^t+Q\cdot L,\quad\quad\quad\quad \,\,\,\,R_2≥ST\end{dcases}\tag{3} xi,jt+1=xi,jtexp(α×itermaxi),R2<STxi,jt+QL,R2ST(3)其中, t t t表示当前迭代次数, x i , j t x_{i,j}^t xi,jt表示在第 t t t代中第 i i i只麻雀在第 j j j维的位置, α ∈ ( 0 , 1 ) \alpha∈(0,1) α(0,1) i t e r m a x iter_{max} itermax是最大迭代次数, R 2 R_2 R2表示报警值, S T ST ST表示安全阈值, Q Q Q是服从正态分布的随机数, L L L 1 × dim ⁡ 1×\dim 1×dim的全1矩阵, dim ⁡ \dim dim表示维度。发现者位置更新方式可总结如下:当 R 2 < S T R_2<ST R2<ST时,意味着觅食区域周围没有捕食者,发现者可以广泛搜索食物;当 R 2 ≥ S T R_2≥ST R2ST时,意味着捕食者出现,所有发现者都需要飞往安全区域。

    2、跟随者位置更新

    跟随者的位置更新方式如下: x i , j t + 1 = { Q ⋅ exp ⁡ ( x w o r s t t − x i , j t i 2 ) ,    i > n 2 x P t + 1 + ∣ x i , j t − x P t + 1 ∣ ⋅ A + ⋅ L , i ≤ n 2 (4) x_{i,j}^{t+1}=\begin{dcases}Q\cdot\exp(\frac{x_{worst}^t-x_{i,j}^t}{i^2}),\quad\quad\quad\,\, i>\frac n2\\x_P^{t+1}+|x_{i,j}^t-x_P^{t+1}|\cdot \boldsymbol A^+\cdot L,\quad i≤\frac n2\end{dcases}\tag{4} xi,jt+1=Qexp(i2xworsttxi,jt),i>2nxPt+1+xi,jtxPt+1A+L,i2n(4)其中, x w o r s t t x_{worst}^t xworstt表示第 t t t代适应度最差的个体位置, x P t + 1 x_P^{t+1} xPt+1表示第 t + 1 t+1 t+1代中适应度最佳的个体位置。 A \boldsymbol A A表示 1 × dim ⁡ 1×\dim 1×dim的矩阵,矩阵中每个元素随机预设为-1或1, A + = A T ( A A T ) − 1 \boldsymbol A^+=\boldsymbol{A^T}\boldsymbol{(AA^T)^{-1}} A+=AT(AAT)1。跟随者位置更新方式可总结为:当 i > n 2 i>\frac n2 i>2n时,表示第 i i i个加入者的适应度较低,没有同发现者竞争食物的资格,需要飞往其他区域觅食;当 i ≤ n 2 i≤\frac{n}2 i2n时,加入者将在最优个体 x P x_P xP近觅食。

    3、警戒者位置更新

    警戒者位置更新方式如下: x i , j t + 1 = { x b e s t t + β ⋅ ∣ x i , j t − x b e s t t ∣ ,    f i ≠ f g x b e s t t + k ⋅ ( x i , j t − x b e s t t ∣ f i − f w ∣ + ε ) , f i = f g (5) x_{i,j}^{t+1}=\begin{dcases}x_{best}^t+\beta\cdot|x_{i,j}^t-x_{best}^t|,\quad\quad\,\, f_i≠f_g\\x_{best}^t+k\cdot(\frac{x_{i,j}^t-x_{best}^t}{|f_i-f_w|+\varepsilon}),\quad f_i=f_g\end{dcases}\tag{5} xi,jt+1=xbestt+βxi,jtxbestt,fi=fgxbestt+k(fifw+εxi,jtxbestt),fi=fg(5)其中, x b e s t t x_{best}^t xbestt表示第 t t t代中全局最优位置, β \beta β为控制步长,服从均值为0,方差为1的正态分布, k ∈ [ − 1 , 1 ] k∈[-1,1] k[1,1] ε \varepsilon ε设置为常数,用以避免分母为0。 f i f_i fi表示当前个体的适应度值, f g f_g fg f w f_w fw表示目前全局最优和最差个体的适应度值。警戒者位置更新方式可总结为:当 f i ≠ f g f_i≠f_g fi=fg时,意味着该个体处于种群外围,需要采取反捕食行为,不断变换位置获得更高 的适应度;当 f i = f g f_i=f_g fi=fg时,意味着该个体处于种群中心,它将不断接近附近的同伴,以此远离危险区域。

    4、SSA算法伪代码

    在这里插入图片描述

    图1 SSA算法的基本框架

    二、仿真实验与分析

    为了使算法更具说服力,在所有情况下,我们对每个测试函数进行30次独立试验。在每个实验中,迭代的最大次数为1000,种群大小设置为100( n = 100 n=100 n=100)。GWO的参数设置如下: a a a的值从2线性减少到0, r 1 , r 2 r_1,r_2 r1,r2 [ 0 , 1 ] [0,1] [0,1]中的随机向量;PSO的参数为 c 1 = c 2 = 1.49445 , w = 0.729 c_1=c_2=1.49445,w=0.729 c1=c2=1.49445,w=0.729;GSA的参数为 G 0 = 100 , α = 20 G_0=100,\alpha=20 G0=100,α=20。SSA的参数设置如下:发现者数量和 S D SD SD分别占20%和10%, S T = 0.8 ST=0.8 ST=0.8。以文献[1]的F1、F2、F3为例。
    下图为对比曲线。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述最大值、最小值、平均值及标准差显示如下:

    函数:F1
    GWO:最大值: 1.9014e-90,最小值:1.1467e-93,平均值:2.6184e-91,标准差:5.3549e-91
    PSO:最大值: 25.6849,最小值:2.8582,平均值:9.0364,标准差:5.9129
    GSA:最大值: 6.5868e-18,最小值:2.3286e-18,平均值:4.0924e-18,标准差:1.0661e-18
    SSA:最大值: 0,最小值:0,平均值:0,标准差:0
    函数:F2
    GWO:最大值: 8.0552e-52,最小值:4.8965e-54,平均值:1.5053e-52,标准差:2.105e-52
    PSO:最大值: 14.9366,最小值:4.5229,平均值:8.2907,标准差:2.6433
    GSA:最大值: 1.2197e-08,最小值:8.179e-09,平均值:1.0214e-08,标准差:9.821e-10
    SSA:最大值: 9.1086e-306,最小值:0,平均值:3.0362e-307,标准差:0
    函数:F3
    GWO:最大值: 1.7551e-17,最小值:1.049e-25,平均值:7.2717e-19,标准差:3.1948e-18
    PSO:最大值: 255.9549,最小值:38.1862,平均值:112.098,标准差:53.1931
    GSA:最大值: 215.1596,最小值:44.459,平均值:106.1498,标准差:36.8177
    SSA:最大值: 0,最小值:0,平均值:0,标准差:0
    

    结果表明,该算法在搜索精度、收敛速度和稳定性等方面均优于现有算法。

    三、参考文献

    [1] Jiankai Xue & Bo Shen (2020) A novel swarm intelligence optimization approach: sparrow search algorithm, Systems Science & Control Engineering, 8:1, 22-34, DOI:10.1080/21642583.2019.1708830.
    [2] 段玉先,刘昌云.基于Sobol序列和纵横交叉策略的麻雀搜索算法[J/OL].计算机应用:1-9[2021-05-28].http://kns.cnki.net/kcms/detail/51.1307.TP.20210525.1453.002.html.

    展开全文
  • 【路径规划】基于麻雀搜索算法的无人机三维路径规划matlab 源码.md
  • 麻雀搜索算法——Matlab

    千次阅读 2021-10-11 20:53:24
    麻雀搜索算法是2020年提出的元启发式算法,算法的具体过程见下面链接 https://blog.csdn.net/weixin_43821559/article/details/117355563 https://blog.csdn.net/u011835903/article/details/108830958 个人写的...

    麻雀搜索算法是2020年提出的元启发式算法,算法的具体过程见下面链接

    https://blog.csdn.net/weixin_43821559/article/details/117355563

    https://blog.csdn.net/u011835903/article/details/108830958

    个人写的麻雀搜索算法的Matlab代码,仅供参考,由于算法的一些变量介绍的并不是很清楚,所以就自己凭感觉写的。算法的测试函数如下:

    y=\sum _{i=1}^{n}x_i^2

    三维的matlab图像如下:

     

    在自变量上下限为10,-10,有一个全局最优解{x}_{1}={x}_{2}=0y=0

    第二个测试用例如下:

    y=\sum _{i=1}^{n}{x}_{i}*sin({x}_{i})+0.1*{x}_{i}

    它三维的matlab图像如下:

     在自变量上下限为10,-10时,这个函数在四个边界点(10,10)  (-10,-10)  (-10,10)  (10,-10)有最小值。

    Matlab代码如下:

    clear all; 
    close all;
    clc;
    
    %% 参数设置
    N=30;  %麻雀个数
    dim=2;  %评估函数维度
    N_discoverer=0.7*N;  %发现者个数
    N_Followers=0.1*N;   %追随者个数
    N_Vigilant=0.2*N;   %警戒者个数
    Max_iter=100;    %最大迭代次数
    ST=0.6;   %安全阈值
    
    
    %% 测试函数
    f=@(x) sum(x.^2);
    ub=10;%边界上限
    lb=-10;%边界下限
    
    %% 初始化
    x=lb+rand(N,dim).*(ub-lb);  %初始化麻雀种群
    
    for i=1:N
        fitness(i)=f(x(i,:));  %计算麻雀种群的适应度值
    end
    [A,index]=sort(fitness);
    x_best=x(index(1),:);  %记录所有麻雀走过的位置的最优位置
    x_worst=x(index(end),:);  %记录所有麻雀走过的位置的最差位置
    best_fitness=A(1);  %记录所有麻雀走过的位置的最优值
    worst_fitness=A(end);  %记录所有麻雀走过的位置的最差值
    x_best_currently=x(index(1),:);  %记录当前麻雀种群最优位置
    x_worst_currently=x(index(end),:);  %记录当前麻雀种群最差位置
    best_fitness_currently=A(1);   %记录当前麻雀种群最优值
    worst_fitness_currently=A(end);   %记录当前麻雀种群最差值
    x_discoverer=x(index(1:N_discoverer),:);   %发现者位置
    x_Followers=x(index(N_discoverer+1:N_discoverer+N_Followers),:);  %追随者位置
    x_Vigilant=x(index(N_discoverer+N_Followers+1:N),:);   %警戒者位置
    B=[-1,1];
    F=best_fitness;  %记录每次迭代的麻雀走过的位置的最优值
    iter=1;  %初始化迭代次数
    
    
    
    %% 开始迭代更新
    while iter<Max_iter
        for i=1:dim
            C(i)=B(round(rand)+1);
        end
        A=C'*inv((C*C'));
        R2=rand;
        %更新发现者位置
        for i=1:N_discoverer
            for j=1:dim
                if R2<ST
                    x_discoverer(i,j)=x_discoverer(i,j)*exp(-i/rand*Max_iter);
                else
                     x_discoverer(i,j)=x_discoverer(i,j)+randn;
                end
            end
            %边界判断
            ub_flag=x_discoverer(i,:)>ub;
            lb_flag=x_discoverer(i,:)<lb;
            x_discoverer(i,:)=(x_discoverer(i,:).*(~(ub_flag+lb_flag)))+ub.*ub_flag+lb.*lb_flag;
        end
        %更新追随者位置
        for i=1:N_Followers
            for j=1:dim
                if i>N/2
                    x_Followers(i,j)=rand*exp((x_worst_currently(j)-x_Followers(i,j))/i^2);
                else
                    x_Followers(i,j)=x_discoverer(1,j)+abs(x_Followers(i,j)-x_discoverer(1,j))*A(j);
                end
            end
            %边界判断
            ub_flag=x_Followers(i,:)>ub;
            lb_flag=x_Followers(i,:)<lb;
            x_Followers(i,:)=(x_Followers(i,:).*(~(ub_flag+lb_flag)))+ub.*ub_flag+lb.*lb_flag;
        end
        %更新警戒者位置
        for i=1:N_Vigilant
            for j=1:dim
                if f(x_Vigilant(i,:))~=best_fitness_currently
                    x_Vigilant(i,j)=x_best_currently(j)+randn*abs(x_Vigilant(i,j)-x_best_currently(j));
                else
                    x_Vigilant(i,j)=x_Vigilant(i,j)+B(round(rand)+1)*(abs(x_Vigilant(i,j)-x_worst_currently(j)))/abs(f(x_Vigilant(i,:))-worst_fitness_currently)+1;
                end
            end
            %边界判断
            ub_flag=x_Vigilant(i,:)>ub;
            lb_flag=x_Vigilant(i,:)<lb;
            x_Vigilant(i,:)=(x_Vigilant(i,:).*(~(ub_flag+lb_flag)))+ub.*ub_flag+lb.*lb_flag;
        end
        x=[x_discoverer;x_Followers;x_Vigilant];  %得到该次迭代下的所有麻雀的新位置
        for i=1:N
            fitness(i)=f(x(i,:));   %计算适应度
        end
        [E,index]=sort(fitness);
        if f(x(index(1),:))<best_fitness    %更新所有麻雀走过的位置的最优位置和最优值
            best_fitness=f(x(index(1),:));
            x_best=x(index(1),:);
        end
        if f(x(index(end),:))>worst_fitness   %更新所有麻雀走过的位置的最差位置和最差值
            worst_fitness= f(x(index(end),:));
            x_worst=x(index(end),:);
        end
        x_best_currently=x(index(1),:);   %更新当前麻雀种群的最优位置
        x_worst_currently=x(index(end),:);  %更新当前麻雀种群的最差位置
        best_fitness_currently=E(1);   %更新当前麻雀的种群的最优值
        worst_fitness_currently=E(end);  %更新当前麻雀的种群的最差值
        x_discoverer=x(index(1:N_discoverer),:);  %重新选择种群中的发现者
        x_Followers=x(index(N_discoverer+1:N_discoverer+N_Followers),:);  %重新选择种群中的追随者
        x_Vigilant=x(index(N_discoverer+N_Followers+1:N),:);  %重新选择种群中的警戒者
        F=[F,best_fitness];   
        iter=iter+1;  %迭代次数加一
    end
    
    %% 结果 作图
    display(['最优值是:',num2str(F(end)),'最优麻雀位置:',num2str(x_best)]);
    figure(1);
    plot(F);
    xlabel('迭代次数'),ylabel('适应度值');

    第一个测试函数结果:

     

    第二个测试函数结果:

     

     

     由于该算法只能找到一个最值,故只找到一个最优麻雀位置,可以看到即使在有许多极小值的测试函数中麻雀搜索算法都能够有效的找到最优值而不会陷入局部最优。

    展开全文
  • 为了改善基本麻雀搜索算法在处理优化问题时存在的收敛精度不高,速度慢和易陷入局部极小值的问题,本文提出一种改进搜索机制的单纯形法引导麻雀搜索算法。首先,针对发现者搜索过程随机性过高的问题,改进发现者搜索...
  • 针对元启发算法中麻雀搜索算法(SSA)的早熟收敛,易陷入局部最优,全局搜索性差等问题进行研究,提出一种融合黄金正弦和曲线自适应的多策略麻雀搜索算法。首先,利用Chebyshev混沌映射初始化种群,使初始解位置分布...
  • 改进麻雀搜索算法

    2021-12-29 17:56:16
    改进的麻雀搜搜算法,物超所值,含有灰狼优化算法对比和粒子群优化算法对比
  • 【优化求解】基于levy飞行改进的麻雀搜索算法matlab源码.md
  • 基于麻雀搜索算法的极限学习机(ELM)分类算法 文章目录基于麻雀搜索算法的极限学习机(ELM)分类算法1.极限学习机原理概述2.ELM学习算法3.分类问题4.基于麻雀搜索算法优化的ELM5.测试结果6.参考文献7.Matlab代码 摘要:...
  • 基本的SSA算法,可跑,可运行,是2020年新出算法,可用于优化其他算法,值得推荐,基本的SSA算法,可跑,可运行,是2020年新出算法,可用于优化其他算法,值得推荐
  • 麻雀搜索算法SSA优化BP神经网络回归预测以及MATLAB代码实现 文章目录麻雀搜索算法SSA优化BP神经网络回归预测以及MATLAB代码实现1. 麻雀搜索算法SSA原理1.1 算法灵感来源1.2 算法模型描述2. SSA优化BP神经网络预测...
  • 智能优化算法应用:基于麻雀搜索算法PID参数优化 - 附代码 文章目录智能优化算法应用:基于麻雀搜索算法PID参数优化 - 附代码1.PID简介2.麻雀搜索算法简介3.适应度函数设计4.算法实验与结果5.参考文献:6.Matlab ...
  • 【优化求解】基于 Sobol 序列和纵横交叉策略的麻雀搜索算法(SSASC) Matlab源码.md
  • 致敬开源工作者:他的连接:麻雀搜索算法——Matlab_q7719的博客-CSDN博客_麻雀搜索算法麻雀搜索算法是2020年提出的元启发式算法,算法的具体过程见下面链接...仅供参考,由于算法的一些变量介绍的并不是很清楚,所以就...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 637
精华内容 254
关键字:

麻雀搜索算法