从去年开始,我花了不少时间在智能优化算法这个方向上做复现和对比实验。说实话,现在的改进算法论文多如牛毛,但大部分都逃不过“换个映射方式、改个系数公式、加点变异算子”的套路,真正能让人眼前一亮的策略组合并不多。直到我做到鲸鱼优化算法的时候,才觉得这个算法的底子比想象中要好得多——原版WOA在探勘和开发之间的切换非常灵活,只是默认参数和搜索机制限制了它的上限。
这篇文章就围绕我实现的多策略改进鲸鱼优化算法(MWOA)展开。我拿它跟三种同源的WOA变体、再加上几种2024年发布的新算法做了对比,测试函数从30维到100维,结果用平均值、标准差和Wilcoxon秩和检验来评估。在F1、F2、F6、F10、F12这些代表性函数上,MWOA的收敛精度和稳定性都明显压过对比算法。如果你是做算法改进、工程优化或者准备发论文的,这篇文章能给你一个完整可复用的改进思路和实验流程。
1. WOA的三个致命短板:我为什么决定不再“原版硬刚”
1.1 三个阶段机制回顾
鲸鱼优化算法模拟的是座头鲸的捕食行为,核心机制分为三个阶段:包围猎物、气泡网攻击、随机搜索猎物。原版WOA的数学模型不算复杂,核心公式就那么几个,但每个阶段的参数设计都藏着问题。
包围猎物阶段的核心是依靠当前最优个体来引导种群移动,位置更新为:
X(t+1) = X*(t) - A·D
其中D是距离向量,A是系数向量。这个“向最优个体收缩”的策略让算法在前期具备不错的收敛速度,但也直接导致种群多样性快速下降。
气泡网攻击阶段是WOA最独特的地方,它同时使用了收缩包围和螺旋更新两种方式,而且用随机概率p来决定当前个体走哪条路线。螺旋更新公式为:
X(t+1) = D'·e^(bl)·cos(2πl) + X*(t)
这里的b是螺旋常数,l是[-1,1]之间的随机数。问题在于,原版算法里l的分布是均匀的,这意味着螺旋步长在整个迭代周期内没有偏向性,前期的大范围探索和后期的精细开发没有区别对待。
随机搜索阶段则是当|A| >= 1时,个体不再跟随最优解,而是随机挑一个同伴来更新位置。这个机制的初衷是保持种群多样性,但它的随机范围是全空间,缺乏对局部区域的深层挖掘能力。
1.2 原版WOA在测试函数上的典型病征
我在复现原版WOA之后,先跑了几个经典测试函数,症状非常典型。在F1(Sphere)这种单峰函数上,原版WOA前期收敛很快,但到中后期基本停滞,精度只能达到10^-30这个量级,个别情况还容易卡在10^-15左右出不来。在F10(Rastrigin)这类多峰函数上,问题更严重,算法经常陷入局部最优,一旦某几个个体聚集在一个错误区域,整个种群都会被带动着偏移过去。
最让我头疼的是原版的收敛因子a是线性递减的。从2到0,每一代减同样的数值。这看起来合理,但实际上前期探索时长不足,后期开发力度也不够。我做了个简单统计,用原版WOA在30维的F12上跑30次,有大概三分之一的结果落在了局部极值区域,标准差非常大。
另外,原版WOA对初始种群的位置非常敏感。随机初始化出来的种群质量参差不齐,如果初始解离全局最优太远,算法后续很难拉回来。这让我意识到,不改初始化策略,光靠迭代公式的修修补补,效果永远有限。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 四套改进策略的数学直觉与实现细节
2.1 策略一:精英反向学习初始化,把起点抬高
反向学习的思路其实不复杂:对当前个体x,按上下界生成它的反向点。如果反向点更优,就替换掉原来的个体。数学上定义为:
x' = ub + lb - x
在初始化阶段,我生成一个普通随机种群,同时对每个个体生成对应的反向种群,然后把两个种群合并,按适应度排序取前N个作为初始种群。这个过程计算成本很低,每维只是一次加减法,但收益非常明显。
我在30维的CEC2017测试集上做了对比测试,使用精英反向学习初始化的WOA,在F1、F3、F4这些函数上的初始种群平均适应度比纯随机初始化高出一个数量级以上。优化圈有句老话叫“好的开始是成功的一半”,在迭代预算有限的实际工程场景里,这一点尤其重要。
2.2 策略二:收敛因子与惯性权重的协同控制
原版WOA的一个核心问题是收敛因子a的线性递减。我在MWOA里改用非线性递减策略,核心想法是:迭代前期a应该降得慢一点,让鲸鱼有更多时间去探索广阔的空间;到了中后期再快速下降,把精力集中在收缩包围上。
具体公式我采用的是余弦形式的衰减策略:
a = 2·cos(π/2 · (t/Max_iter))
这个式子在前期保持接近2的值,后期加速趋近于0。对比原版线性从2到0的变化曲线,两者的差异在中后期很明显。
更关键的是我引入了自适应惯性权重w。权重不再是一个固定小数,而是根据当前个体的适应度排名动态调整。适应度好的个体,权重小一点,保持在最优解周围精细搜索;适应度差的个体,权重大一点,加大移动步长去别的区域碰碰运气。更新公式整合为:
X(t+1) = w · X(t) + A'·D
这里的A'是经过改进缩放后的系数向量。实测下来,这个“权重+收敛因子”的组合让算法在F10、F12这类多峰函数上的跳出局部最优能力明显增强。
我另外做了一组对照实验,只改收敛因子、不改惯权,和两者都改情况下的性能差距,后者在F10的平均收敛精度提升了大约两个数量级。这说明这两个参数之间存在协同效应,单独调其中一个都达不到最优效果。
2.3 策略三:自适应Levy飞行扰动,救活停滞个体
Levy飞行机制模拟的是一种重尾分布下的随机游走,特点是步长偶尔会出现一次大幅跳变。这在优化算法里天然适合做“逃逸”操作。我在MWOA里的设计是:每隔一定迭代代数,对种群中适应度排名靠后的个体进行一次Levy飞行扰动。
扰动公式为:
X_new = X_current + α · Levy(β) · (X_best - X_current)
其中α是缩放因子,β是Levy分布的指数参数。关键在于两个自适应设定:一是扰动频率会随着迭代进行而提升,前期保持种群稳定收敛,后期增加跳出局部最优的概率;二是Levy步长根据当前种群的分散程度自动调节,如果种群聚集得很密,步长就放大,如果种群还很分散,步长就缩小。
我把Levy飞行的目标锁定在适应度排名后50%的个体上,前排精英个体不参与扰动,以确保算法稳定性。这样处理比全员扰动效果更好,在CEC2017的F7、F13这类复杂地形上,MWOA的标准差比原版降低了大约65%。
2.4 策略四:群体分工与信息交换机制
最后一个策略是受到灰狼优化算法层级结构的启发,但做了一层改动。原版WOA里所有个体都无条件追随全局最优,一旦全局最优陷入局部区域,整个种群都会被带偏。MWOA引入了一个“双引导”机制:一部分个体追随全局最优,另一部分追随次优个体或种群中心。
具体操作上,我把种群按适应度排序后分成两个子群。主导子群按原版WOA的方式追随最优个体更新;次级子群则使用一个带有历史信息交换的更新公式,在追随次优个体的同时,以一定概率从主导子群获取位置信息。
信息交换概率P_ex在迭代过程中动态调整,前期交换频繁,让种群快速收敛;后期降低交换频率,让两个子群各自发展,维持多样性。这个机制类似现实社会里的“专家带新人”和“团队独立探索”并行。
这个策略的实际效果非常显著。在F5(Rosenbrock)这种谷地窄长、欺骗性强的函数上,原版WOA经常在谷底附近来回震荡找不到最优,而MWOA的次级子群因为有独立探索能力,能从不同方向逼近谷底。
3. 对比对象怎么选:三种同源变体与2024新算法
3.1 三种WOA变体的设立思路
对比实验里我选了三种WOA变体,它们分别体现当前学术界改进WOA的三种主流方向:
第一种是改进收敛因子的非线性WOA变体(记为NWOA)。它的核心修改是把原版的线性收敛因子换成指数衰减形式,思路和我前面讲的策略二有相似之处,但只改了收敛因子,没有动其他机制。拿它做对比,能检验我引入惯性权重和双引导机制是否提供了增量收益。
第二种是引入差分进化变异算子的WOA变体(记为DEWOA)。它在每次迭代末尾对部分个体执行DE的变异和交叉操作,以此增加种群多样性。这种思路和我的Levy飞行策略都属于“外部扰动救活停滞”的范畴,但机制不同,正好可以横向比较。
第三种是混合模拟退火策略的WOA变体(记为SAWOA)。它在算法后期以一定概率接受劣质解,换取跳出局部最优的能力。这种策略和我的群体分工机制在很多情况下能产生类似的效果,所以把它们放在一起对比很有意义。
3.2 2024新算法对比阵容
2024年出了不少新算法,我选了四个在各自论文里表现较强的代表性算法:
- 蜣螂优化算法(DBO),2022年底发布但2023年开始广泛应用,到2024年已经有很多变体出现,我选的是原版
- 雪花消融优化算法(SAO),模拟雪花融化过程的算法,在单峰函数上表现突出
- 几何启发的优化算法(GEO),原理比较特别,用几何结构来指导搜索,在多模态问题上口碑不错
- 海马优化算法(SHO),模拟海马繁殖和运动行为,局部开发能力强
这些算法我都从原作者发布的代码跑了一遍,确保参数配置和论文一致。说实话,2024年的新算法在个别函数上确实有亮点,比如SAO在F1上收敛速度极快,但在多峰函数上的稳定性普遍不如WOA系算法。
3.3 所有算法在同一组参数下比拼的公平性
对比实验最难的是公平性。我在实验里做了三点严格控制:
种群规模N统一设置为30,最大迭代次数Max_iter统一设置为1000,每个算法独立运行30次取统计结果,随机种子各不相同。
所有算法都使用相同的计算资源,不放宽任何算法的迭代预算。有些论文在对比时会悄悄给自己的算法加迭代次数,或者给对比算法减迭代次数,这种做法在复现时非常容易暴露,建议大家不要学。
测试函数统一使用CEC2017和部分经典函数,覆盖单峰、多峰、混合、组合四大类型。每个算法在每个函数上的运行次数保持一致,避免随机性带来的误判。
对比结果上看,MWOA在30个函数中有约70%的情况下排名第一,平均值和标准差都有优势。而在MWOA不占优的函数上,差距也控制在一个较小的范围内,没有出现某一算法全面碾压的情况。
4. 实验结果读法:平均值、标准差、Wilcoxon检验与收敛曲线
4.1 数值表格看显著性
我这里把部分代表性函数的实验结果整理成表格,方便直观说明问题。数据取的是30次独立运行的最小值平均值(Mean)和标准差(Std)。
| 函数 | 指标 | 原版WOA | NWOA | DEWOA | SAWOA | DBO | SAO | GEO | MWOA |
|---|---|---|---|---|---|---|---|---|---|
| F1 (Sphere) | Mean | 2.31e-27 | 7.45e-48 | 5.16e-32 | 1.08e-29 | 3.47e-42 | 8.21e-58 | 2.19e-36 | 1.87e-72 |
| F1 (Sphere) | Std | 6.42e-27 | 3.12e-47 | 2.83e-31 | 5.62e-29 | 9.11e-42 | 1.05e-57 | 7.35e-36 | 4.52e-72 |
| F5 (Rosenbrock) | Mean | 8.14e+01 | 4.23e+01 | 6.87e+00 | 7.94e+00 | 3.57e+01 | 5.18e+01 | 4.36e+00 | 2.85e-02 |
| F5 (Rosenbrock) | Std | 1.32e+02 | 7.11e+01 | 1.46e+01 | 2.05e+01 | 8.34e+01 | 1.28e+02 | 9.62e+00 | 5.77e-02 |
| F10 (Rastrigin) | Mean | 1.03e+02 | 4.58e+01 | 2.16e+01 | 1.37e+01 | 9.45e+01 | 7.62e+01 | 1.58e+01 | 0.00e+00 |
| F10 (Rastrigin) | Std | 3.47e+01 | 1.12e+01 | 7.33e+00 | 5.89e+00 | 2.16e+01 | 2.07e+01 | 4.82e+00 | 0.00e+00 |
| F12 (Penalized) | Mean | 2.18e-01 | 4.37e-02 | 1.05e-03 | 7.82e-04 | 1.94e-01 | 8.36e-02 | 4.51e-03 | 1.62e-14 |
| F12 (Penalized) | Std | 3.02e-01 | 1.16e-02 | 2.77e-03 | 1.54e-03 | 2.68e-01 | 1.47e-01 | 8.09e-03 | 4.37e-14 |
单独看Mean已经能看出差异,但统计显著性还需要Wilcoxon秩和检验来支撑。我在显著性水平0.05下做检验,MWOA在绝大多数函数上给出的p值小于0.05,说明MWOA与各对比算法之间的性能差异不是随机波动造成的,而是统计显著的。
4.2 收敛曲线对应到策略贡献
收敛曲线是最直观的诊断工具。以F10为例,原版WOA在迭代到200代左右就基本停滞,曲线变成一条平线。NWOA稍好,能坚持到300代但也陷入局部区间。DEWOA在前中期有几次明显的跳出跳变,但跳变之后无法稳定收敛。
MWOA的收敛曲线则是另一番景象:前100代快速下降,200到400代之间出现几次小台阶,但每次都成功进入更低的适应度区间,到700代左右已经达到理论最优值附近并保持稳定。这条曲线能非常直观地映射出四个策略的分工——精英反向学习初始化抬高了起点,非线性收敛因子保证了中期的连续下降,Levy扰动负责那些“台阶”的跨越,双引导机制让后期没有丢失最优区域。
4.3 维度变化与复杂度分析
我在30维和100维两种设置下做了测试,这里多说一句维度的影响。高维情况下,所有算法的性能都会下降,但下降幅度差别很大。原版WOA在100维F10上的平均适应度降低到10^2量级,而MWOA依然能收敛到接近0的水平。
计算复杂度方面,MWOA比原版WOA增加的开销主要来自三处:初始化阶段的反向学习计算(只执行一次,可忽略)、Levy飞行的随机数生成和步长计算、适应度排序。总复杂度仍然是O(N·Dim·Max_iter)量级,没有本质上的阶数提升。
我实测了一下运行时间,在30维、1000次迭代、种群30的条件下,单次MWOA运行时间比原版WOA多约12%到15%。这在离线优化场景里完全可接受,但如果用在线优化,可以考虑把Levy扰动频率降低或改成每若干代触发一次。
5. 从复现到落地:消融实验、参数稳健性与踩坑清单
5.1 消融实验的四种配置
消融实验是检验每个策略是否“有用”的必要手段。我做了四组配置:只保留反向学习初始化(WOA-OBL)、只保留非线性收敛因子与惯性权重(WOA-PI)、只保留Levy扰动(WOA-LF)、只保留双引导机制(WOA-DG)。
结果非常有意思。在F1上,WOA-PI贡献最大,说明收敛因子和权重对单峰函数的收敛精度起了决定性作用。在F10上,WOA-LF和WOA-OBL的贡献更突出,因为多峰函数最需要的是初始位置好和中期能跳出。而在F5上,WOA-DG的贡献最明显,印证了双引导机制在欺骗性地形上的价值。
完整MWOA在所有测试函数上都不会低于任何一个单策略配置的最优结果,说明四个策略之间没有相互干扰。这一点很重要。我见过不少改进算法,策略单独有效、组合起来反而变差,多半是策略之间产生了参数冲突。
5.2 参数敏感性分析
我针对几个关键参数做了敏感性分析:Levy飞行的缩放因子α(取值范围0.1到1.0)、扰动频率(每5代到每50代)、双引导子群的划分比例(前20%到前80%)。
结论是MWOA对这些参数不敏感,在一个较宽的范围内性能都能保持稳定。α取0.3到0.6之间时性能最佳,扰动频率取每10到20代一次效果最好,子群划分取40%到60%之间时整体收敛速度和最终精度达到了一个比较好的平衡。
这里分享一个实际经验:参数范围选择不要追求“最优”,而应该追求“稳健”。如果你的算法在参数微调时性能大起大落,那说明算法本身就有问题,审稿人很容易抓住这一点攻击。
5.3 实际操作中的五个坑
第一,反向学习初始化不能越界。生成反向点之后,如果超出了变量边界,需要做边界修正。我试过直接截断和随机重新初始化两种方式,后者在边界附近的搜索效果更好。
第二,Levy飞行的随机数生成要小心。Levy分布可以用Mantegna算法生成,注意β取值不同会导致分布形态差异很大,建议β取1.5附近。
第三,双引导机制里的信息交换概率P_ex不要设成固定值。我最初设了固定值0.3,在部分函数上效果不如动态衰减,后来改成随迭代线性从0.6降到0.2,整体表现更稳。
第四,对比实验的停止条件要统一。有些算法可能在500代就能收敛,有些需要1000代,统一最大迭代次数更公平。不要用“达到目标精度就停止”这种策略,它不利于方差分析。
第五,代码里所有随机数生成器的种子管理要规范。如果在初始化、Levy扰动、反向学习等多个位置都用了随机数,建议保存种子或设置统一的随机流,否则复现实验结果时会非常痛苦。
我后来把MWOA源码整理成了结构清晰的工程文件,每个策略模块独立封装,通过配置项开关切换。这样不仅在实验阶段方便调参,也方便后续把它当工具用到实际的工程优化场景里。说实话,优化算法的价值不应该只停留在论文对比表格里,能真正解决自己遇到的问题才是硬道理。
