先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出的新型智能优化算法,并附MATLAB代码。
“很长时间没有更新啦,久等了~
今天推送的旗鱼优化算法是2019年提出的,大家可以用来作为对比算法。”
旗鱼优化算法(Sailfish Optimizer, SFO)的设计源于对海洋中旗鱼捕食沙丁鱼行为的模拟。严格来说,应该叫旗鱼优化器。作者在24个经典的单峰和多峰Benchmark函数上对SFO算法进行了评估,对比了六种不同的元启发式算法。实验结果表明,SFO算法比所有对比算法具有更好的性能。SFO算法的原始参考文献如下:
“Shadravan S, Naji H R, Bardsiri V K. The Sailfish Optimizer: A novel nature-inspired metaheuristic algorithm for solving constrained engineering optimization problems[J]. Engineering Applications of Artificial Intelligence, 2019, 80: 20-34.”
01
灵感来源
SFO算法的灵感源于一群捕猎的旗鱼,模拟的是旗鱼的捕食过程。在自然界中,它们会成群结队地捕猎,如图1所示。下面对攻击过程依次进行介绍:1) 发现猎物后,旗鱼会将其驱赶至水面;2) 到达合适位置后,旗鱼对整个鱼群进行包围;3) 沙丁鱼本身具有很强的机动性,对旗鱼来说非常具有挑战性;4) 在攻击时,旗鱼要么用它的喙进行一次猛烈的攻击,伤害几条沙丁鱼,要么干扰沙丁鱼,使其混乱,破坏它们的阵型;5) 旗鱼的速度是水生脊椎动物中有记录以来最高的,沙丁鱼根本无法避开致命的穿刺伤害。受伤的沙丁鱼一旦与鱼群分离,它们很快就会被旗鱼捕获;6) 旗鱼在开始攻击之前,会改变体色,从通常的蓝银色侧面变暗到几乎黑色。作者基于旗鱼以上的捕猎过程,建立了相应的数学模型,具体可分为交替攻击、捕获猎物和替换位置三个阶段。
图1 旗鱼捕食过程
02
算法设计
与往期推送一样,目前我还不会在公众号里编辑数学公式。因此,这部分内容在Word文档里先写好,然后做成图片,最后导入。
03
计算流程
SFO算法的计算流程如图2所示:
图2 旗鱼优化算法流程图
04
实验仿真
对SFO算法的性能进行简单的测试。将SFO算法用于函数寻优,其MATLAB程序严格按照原始参考文献进行编写。此外,种群规模均为30,最大迭代次数为1000,基准函数采用的是CEC2005测试集。
这里以CEC2005测试集中的单峰函数Sphere (f1)和多峰函数Ackley (f10)为例,展示SFO算法在30维环境下的收敛效果,如图3所示,这里就不再做进一步的分析了。
(a) f1
(b) f10
图3 SFO算法的收敛曲线
05
MATLAB代码
SFO算法的MATLAB代码可通过复制下方链接进入获得。代码严格按照原始参考文献编写,附有详细注释。
(关注公众号:启发式算法讨论)
关于其他智能优化算法的MATLAB代码,可访问我的个人主页查看:
(关注公众号:启发式算法讨论)