操作环境:

MATLAB 2024a

1、算法描述

旗鱼优化算法(Sailfish Optimizer,简称 SFO)是一种自然启发式的群体智能优化方法,它把海洋中旗鱼捕食沙丁鱼群的生存策略抽象成一个寻找最优解的过程。直观地说,你可以把整个优化问题想象成一片很大的海域,海里每一个位置都对应一个候选解。算法里有两类“生物”在这片海里游动:一类是旗鱼,数量相对少、速度快、攻击性强,代表更有方向的全局搜索力量;另一类是沙丁鱼,数量多、分布散、灵活度高,代表对局部空间的大范围探测与扰动。SFO 的核心思想不是让所有解一股脑冲向某个方向,而是让捕食者与猎物在不断对抗与协作中推动搜索进程,使算法既能快速靠近优解,又不容易被局部最优困住。

理解 SFO 的关键在于它对真实生态行为的提炼。真实海洋里,旗鱼靠速度和感知优势追逐沙丁鱼。它们往往会锁定一条最容易被捕的目标,持续追击,同时根据沙丁鱼群的运动调整自己的方向。沙丁鱼本身单体弱小,但群体高度协调,一旦感知到捕食者接近,会通过改变队形、突然分散、再快速聚拢等方式降低被捕概率。这种捕食与逃逸的动态博弈,天然对应到优化里两种互补的搜索机制:旗鱼的“追逐”体现为向当前最优解区域的快速收敛,属于强引导的全局搜索;沙丁鱼的“逃逸”体现为在压力下对解空间做多样化扰动和细致探索,属于维持多样性、跳出局部陷阱的局部搜索。SFO 正是把这套博弈关系写成迭代更新规则,让两类群体在搜索中各司其职又互相影响。

算法启动时,会在可行解空间内随机生成一群旗鱼和一群沙丁鱼。每一条鱼的位置就是一个候选解向量,适应度就是目标函数的优劣程度。初始随机分布的意义很像在大海里撒网,尽量覆盖不同区域,避免搜索从一开始就偏向某个小角落。随后算法会分别在旗鱼群和沙丁鱼群中找出各自当前最优秀的个体。旗鱼群里最优的那条被称为精英旗鱼,它代表当前全局最好的方向;沙丁鱼群里最优的那条被称为受伤沙丁鱼,名字听起来有点奇怪,但在隐喻上是合理的——在捕食中,最接近旗鱼、最容易被盯上的猎物往往意味着它处在“最优区域附近”,所以它也携带了很有价值的位置信息。SFO 让这两条“最强个体”共同充当全局信息源,为后续更新提供引导。

进入主迭代后,旗鱼首先更新位置。更新的直觉是:普通旗鱼会参考精英旗鱼的方向,同时也借助受伤沙丁鱼的位置信息来修正自己的追击轨迹。这里会引入类似“猎物密度”的概念,用来描述当前沙丁鱼群在海域里的聚集程度。密度较高,意味着猎物信息更集中、追击方向更可靠,旗鱼移动可以更大胆;密度较低,意味着猎物稀疏、信息可能带有偶然性,旗鱼移动就会更谨慎。算法以此调节旗鱼靠近优解的幅度,使其既有冲刺能力,又不至于过度冒进造成早熟收敛。

旗鱼更新之后,轮到沙丁鱼更新。沙丁鱼的运动机制体现了 SFO 在“探索”上的巧思。现实里,当旗鱼离得远时,沙丁鱼群通常只是小范围游动、维持队形;当旗鱼逼近时,沙丁鱼群会出现明显的局部剧烈变化,目的是制造混乱、逃脱捕杀。SFO 用一个随迭代逐步变化的压力强度来模拟这种情形。早期压力较强,沙丁鱼更受旗鱼影响,整体更偏向向优解区域靠拢,这能加快全局收敛;后期压力减弱,沙丁鱼的变化幅度变小、扰动更细腻,重点转为在优解附近做精修。这样就自然形成了从“粗搜索”逐渐过渡到“细搜索”的节奏,不需要人工分阶段调参。

更细的设计在于,SFO 不会让所有沙丁鱼在所有维度上同一时间做同样的移动。算法会根据当前压力强度,随机挑选部分沙丁鱼、随机挑选部分维度,对它们施加更显著的扰动;其他个体或维度则做较温和的调整。这样做能带来两个实际收益。第一,避免整个猎物群一窝蜂挤到同一处,从而丢掉解的多样性;第二,在高维问题里实现“分维度探测”,已经接近理想值的维度就不必反复大跳,尚未优化充分的维度由部分沙丁鱼去大范围试探。换句话说,沙丁鱼承担的是灵活探索与制造新可能的职责,它们既顺着精英旗鱼的趋势靠近好区域,又在细节上持续留出跳出局部最优的机会。

每轮位置更新后,算法都会进行边界与约束处理。鱼不会游出海域,候选解也不能越过问题的上下界或约束域。一旦某个维度越界,算法会把它拉回到可行范围内。这个步骤虽然朴素,却是保证优化稳定性的关键,尤其在可行域狭窄或约束复杂的工程情形里,越界解不但无意义,还会让适应度评价失真。

边界处理完成后,SFO 重新计算旗鱼和沙丁鱼的适应度,并更新精英旗鱼与受伤沙丁鱼。如果旗鱼群中出现更好的个体,它会接替精英旗鱼的位置;如果沙丁鱼中出现更好的个体,它会成为新的受伤沙丁鱼。这样的“双精英记忆”机制让两类群体都能把自己发现的有效信息汇入全局,防止搜索只听某一类群体的“单方面结论”。

SFO 还包含一个很有“生态味”的关键过程:捕食与替换。在自然捕食中,旗鱼最终会捕获最虚弱、最容易得手的沙丁鱼,猎物群规模会逐渐缩小,而旗鱼通过捕食获得了更有利的位置。SFO 把这一逻辑转化为优化操作:算法会随机挑一条表现较差的旗鱼,如果它的适应度还不如当前最优的沙丁鱼,就让这条旗鱼“吃掉”那条受伤沙丁鱼,直接把自己的位置替换成沙丁鱼的位置,同时将该沙丁鱼从沙丁鱼群中移除。这个过程有两层意义。一方面,优秀沙丁鱼携带的好解被提升为旗鱼层级,增强了搜索向优解区域集中的速度;另一方面,沙丁鱼数量减少会改变“猎物密度”,从机制上推动算法在后期更偏向局部精修,使搜索逐渐从广撒网变成精细化收敛。你可以把它理解为一种天然的种群精炼:越到后期,参与大范围探索的猎物越少,搜索越聚焦,也越像在最优附近做细微打磨。

从整体结构看,SFO 的技术特点可以概括为异构双群体协同搜索和压力驱动的自适应节奏控制。异构双群体的含义是旗鱼与沙丁鱼分工明确又互相牵制:旗鱼负责提供方向和收敛动力,沙丁鱼负责保持多样性与局部探索;二者交替更新,使搜索既不至于像纯随机方法那样漫无边际,也不至于像过分贪婪的策略那样早早陷入局部最优。压力驱动的自适应节奏则让算法无需人工划分阶段,更新尺度、扰动强弱、参与扰动的个体比例都会随迭代自然变化,早期更“粗放、快速、全局”,后期更“细致、谨慎、局部”。

这套机制使 SFO 在工程优化里尤其有价值,因为很多实际问题并不具备光滑、凸性或可导等理想特性,目标函数常常多峰、离散、噪声大甚至含强约束。传统方法在这类场景下容易卡在局部解或对初值高度敏感,而 SFO 的捕食—逃逸博弈和双精英引导可以不断把搜索拉回到更有希望的区域,同时保留适度的跳跃能力去探索新峰谷,因此往往表现出较好的稳定性与鲁棒性。比如结构参数寻优、控制器整定、能量管理、路径/调度规划等问题,常见的“局部最优太多、变量耦合强、尺度差异大”都很适合用 SFO 来处理。

当然,SFO 也和其他群体智能算法一样,效果会受到种群规模、旗鱼与沙丁鱼比例、迭代次数等因素影响。一般来说,沙丁鱼越多意味着探索范围更广、抗早熟能力更强,旗鱼越多意味着引导力更强、收敛更快;迭代次数越高,后期精修越充分,但计算量也会增加。好在 SFO 的关键参数都有清晰的生态对应关系,调节方向比较直观:希望更快贴近优解时,可以增强旗鱼引导或提高捕食压力;希望更稳健地避免早熟时,可以增加沙丁鱼比重或放缓压力衰减。

2、仿真结果演示

3、关键代码展示

4、MATLAB 源码获取

  V

点击下方名片关注公众号获取

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐