麻雀搜索算法(SSA)(含MATLAB代码)

先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出的新型智能优化算法,并附MATLAB代码。

图片

麻雀搜索算法(Sparrow Search Algorithm, SSA)是受到麻雀种群的觅食行为和反捕食行为的启发,从而提出的新型群智能优化算法。

麻雀是一种喜欢群居的动物,在自然界中种类繁多,常出现在人类居住的环境中。通过研究发现,麻雀群内部在觅食过程中有着明确分工。内部麻雀分为两种不同类型,一种为发现者,另外为跟随者。发现者麻雀为种群觅食提供方向引导,剩余的个体为跟随者麻雀,在种群中通过跟随发现者麻雀觅食获取食物。在种群中,发现者麻雀和跟随者麻雀两者的身份是不固定的,可以灵活转变身份。同时,麻雀种群内部也会因为争夺食物而引起竞争。另外,由于种群中靠外部的麻雀更容易受到捕食者的攻击,所以麻雀种群中的个体会不断调整自身位置,向相邻的同伴靠拢或向内部聚集,以此减少被捕食的风险。

它的原始参考文献如下:

Xue J, Shen B. A novel swarm intelligence optimization approach: sparrow search algorithm[J]. Systems science & control engineering, 2020, 8(1): 22-34.

01
设计原则

类似于其他群体智能优化算法,麻雀搜索算法在寻优过程会约定一些规则,这让算法实现具有高效性、简易性和易解释性。算法设计中一般把麻雀种群的觅食行为进行理想化,分为下面六个步骤原则:

(1)麻雀种群中的发现者个体,其适应度值一般较其他个体更优,在种群的寻觅食物过程中负责搜索食物方位,并把食物存在的地点和方向信息传递到整个种群中,使跟随者个体跟随其觅食;

(2)觅食过程中,如果种群中的随机麻雀个体预知到危险时,会自动发出警戒信号,引起种群注意。警戒信号有大小之分,算法设计时通过人工设置安全警戒值阈值,倘若警戒信号值大于安全警戒值阈值,麻雀种群则不会往该处觅食,发现者麻雀会带领跟随者去别的安全区域继续觅食;

(3)觅食过程中,两种不同的麻雀身份是可以互换的。如果跟随者麻雀在寻觅过程中发现了更优异的食物地点,则该跟随者个体的身份就会转变成发现者,在转变过程中,每有一只跟随者麻雀转变成发现者麻雀,那么就会有一只发现者麻雀的分身变为跟随者,整个麻雀种群的发现者麻雀和跟随者麻雀的数量比例是固定的;

(4)因为食物数量是一定的,所以最先到达食物地点的发现者会先吃到食物,补充自身能量,而后来的跟随者相对获得的食物便较少,有的甚至吃不到食物。因此,后来的跟随者麻雀由于饥饿,会促使他们飞离种群,重新寻找新的食物地点,以此补充能量,此数学模型可以使算法有概率跳出局部区域,使得种群可以探索更多区域空间;

(5)种群中跟随者总会跟随发现食物最多的发现者,跟随他们去觅食。因为它们认为适应度值最高的发现者身边的优质食物会更多更丰富,但同时一部分跟随者也会监视发现者,与它们竞争和争夺食物资源;

(6)当麻雀种群发现外来捕食者时,处于种群边缘的麻雀个体由于要保护自身安全,它会改变自身位置,往种群中部或内部靠近,以此躲避捕食者的抓捕;而处于麻雀种群中间的麻雀个体则会向周围靠拢,通过和同伴聚堆的方式降低被捕食概率。

02
算法设计

图片

图片

图片

03
计算流程

图片

04
实验仿真

将SSA用于函数寻优,算法的MATLAB程序是严格按照它的原始参考文献进行编码的。利用CEC2005测试集验证SSA的性能,这里选择今年很火热的蜣螂优化(DBO)算法进行对比(为了对比的公平,两种算法的种群大小设置为30,最大迭代次数为500)。仅对仿真结果进行简要展示,不再进一步分析。

对比结果如下所示:

SSA Vs DBO

在一些函数上收敛曲线突然不见了,是因为已经收敛到理论最优值0了。我使用的是semilogy来绘制的收敛曲线,而semilogy画的是y轴的对数,因此,若曲线收敛到0,semilogy是画不出来的。

05
MATLAB代码

SSA对应的MATLAB代码链接如下:

SSA跑CEC2005测试集 公众号里有链接
SSA跑CEC2013测试集 公众号里有链接
SSA跑CEC2014测试集 公众号里有链接
SSA跑CEC2017测试集 公众号里有链接
SSA跑CEC2020优化函数测试集 公众号里有链接
SSA跑CEC2022优化函数测试集 公众号里有链接
SSA的勘探(Exploration)和开发(Exploitation)占比分析 公众号里有链接
SSA的工程应用(第1期):压力容器设计、滚动轴承设计、拉伸/压缩弹簧设计、悬臂梁设计、轮系设计、三杆桁架设计 公众号里有链接
SSA的工程应用(第2期):焊接梁设计、多盘离合器制动器设计问题、步进圆锥滑轮问题、减速机设计问题、行星轮系设计优化问题、机器人夹持器问题 公众号里有链接

可通过下方链接下载代码清单,在里面寻找需要的算法代码,然后去对应的链接获取。清单会同步更新,一旦有新的代码,就可以在清单里找到。清单里面有部分代码是开源获取的。可随时免费下载。

链接:https://pan.baidu.com/s/1SFDMplrL7tiqGZlrpOSGYg
提取码:8023

猜你喜欢

转载自blog.csdn.net/jieyanping/article/details/133620903
今日推荐