先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出的新型智能优化算法,并附MATLAB代码。
“应粉丝要求,讲一下樽海鞘算法~
昨天调研了一下,搞这个算法的人还挺多,在WOS上也是被高引的文献。有兴趣的同学可以了解一下,这个算法本身是非常简单的,因此也比较容易上手~”
樽海鞘群算法(Salp Swarm Algorithm, SSA)是Mirjalili等人于2017年提出的一种全新的群体智能优化算法。该算法的主要思想来源于樽海鞘的群链生物特征。樽海鞘算法的整个寻优过程起源于樽海鞘链的群聚觅食行为,将樽海鞘群体对最佳食物源搜索的过程类比为对函数寻优。SSA的原始参考文献如下:
“Mirjalili S, Gandomi A H, Mirjalili S Z, et al. Salp Swarm Algorithm: A bio-inspired optimizer for engineering design problems[J]. Advances in engineering software, 2017, 114: 163-191.”
01
灵感来源
樽海鞘是一种身体几乎完全透明的桶状海洋生物。这种透明特性可以很好地保护樽海鞘在海洋中免受天敌捕食,主要以浮游植物为食,依靠吸入喷出海水前进。它们每天可以将成吨的碳从海洋表面运送到深海中,防止这些碳重新进入大气圈,有效地减少了碳进入大气圈成为温室气体的可能性,对大自然来说有很好的清碳作用。樽海鞘这一特殊功能使其在海洋中发挥着不可替代的作用。自然界中的大多数生物以群的方式移动、觅食,但樽海鞘却是首尾相连,组成链的形式进行觅食。樽海鞘在海洋中以群体形成链状结构漂浮生活,樽海鞘链分为两部分:领导者和跟随者。樽海鞘链最前端的个体被认为是领导者,其他个体被认为是跟随者,领导者根据食物源位置指导引领着跟随者移动,如图1所示。
图1 樽海鞘的觅食原理
在SSA中,位于樽海鞘链的第一个樽海鞘为领导者,其余的为跟随者。和其他的群体智能优化算法不同在于,领导者不会影响整个群体的移动,跟随者会根据前一个个体的位置来更新自己的位置。依此类推形成了樽海鞘链。领导者对于排在后面的跟随者的领导作用会越来越弱,在后面的跟随者不会一味的向着领导者移动,保持了种群的多样性。樽海鞘群算法将目前得到的最优解保存下来,并将其赋值给食物源变量,因此即使整个种群恶化,它也不会丢失。SSA只更新领导者相对于食物源的位置,这是目前得到的最佳解,所以领导者一直在探索和开发它周围的空间;跟随者的跟随运动提高了局部搜索的性能,在一定程度上避免了陷入局部最优的情况。
02
算法设计
与往期推送一样,目前我还不会在公众号里编辑数学公式。因此,这部分内容在Word文档里先写好,然后做成图片,最后导入。
03
计算流程
SSA的计算流程伪代码如图2所示:
图2 SSA计算流程
04
实验仿真
同样地,对SSA的性能进行简单测试。将SSA用于函数寻优,它的MATLAB程序严格按照原始参考文献进行编写。此外,种群规模N为50,最大迭代次数T取2000,Benchmark函数采用的是CEC2005测试集。
这里以CEC2005测试集中的单峰函数Sphere (f1)和多峰函数Ackley (f10)为例,展示SSA在30维环境下的收敛效果。如图3所示,这里就不再做进一步的分析了。
(a) f1
(b) f10
图3 SSA的收敛曲线
其次,不妨检验一下SSA对全局勘探和局部开发的平衡能力。如图4所示,是SSA在CEC2005测试函数f3上的勘探和开发占比曲线。
图4 SSA在CEC2005 f3上的勘探和开发百分占比变化曲线
最后,将SSA应用于复杂工程约束优化问题,例如之前推送的两期算法应用内容:
算法应用:基于DBO算法的工程优化设计(第1期)(含MATLAB代码)
这里以焊接梁设计问题为例,展示SSA求解效果。收敛曲线如图5所示。
图5 SSA在焊接梁设计问题上的目标函数收敛曲线
05
MATLAB代码
SSA的MATLAB代码可通过复制下方链接进入获得。代码严格按照原始参考文献编写,附有详细注释。
(公众号里有,关注公众号:启发式算法讨论)
SSA的勘探(Exploration)和开发(Exploitation)占比分析:
(公众号里有,关注公众号:启发式算法讨论)
SSA的工程应用(第1期):压力容器设计、滚动轴承设计、拉伸/压缩弹簧设计、悬臂梁设计、轮系设计、三杆桁架设计。
(公众号里有,关注公众号:启发式算法讨论)
SSA的工程应用(第2期):焊接梁设计、多盘离合器制动器设计问题、步进圆锥滑轮问题、减速机设计问题、行星轮系设计优化问题、机器人夹持器问题。
(公众号里有,关注公众号:启发式算法讨论)