资讯详情

资讯详情

12种新算法CEC2021基准测试实战:从实验设计到结果分析

从去年年底开始我就一直在折腾一件事把手头积累的、以及从近两年论文里复现的12种新算法全部拉到CEC2021测试集上跑一遍完整评测。CEC系列作为进化计算领域认可度比较高的基准测试集很多论文的对比实验都会引用它所以做算法测评基本绕不开。这篇就把整个测试过程、算法分类思路、结果分析、还有我踩过的坑一次性写清楚给同样要做算法对比实验的朋友提供一个可参考的模板。1. 为什么选CEC2021测试集选型与前期准备1.1 CEC2021测试集的核心特征CEC2021IEEE Congress on Evolutionary Computation 2021 的基准测试集一共包含10个测试函数覆盖了单峰、基本多峰、混合和组合四类问题。相比之前的CEC201730个函数CEC2021做了大规模精简去掉了大量性质重复的组合函数只保留区分度最高的10个。这个改动对做实验的人来说其实是好事跑一轮完整测试的时间成本降了不少而函数之间的特征差异反而更清晰。从问题结构上看CEC2021的所有函数都做了偏移和旋转处理。偏移让最优解不再位于原点附近旋转让变量之间产生强耦合关系。这意味着一个算法如果只在标准测试函数上表现好换到CEC2021往往会被打回原形——它在检验算法对问题旋转敏感性的同时也更接近真实优化场景中的复杂情况。另外一个关键点是评估次数预算。CEC2021延续了CEC系列的标准设置最大函数评估次数FES 10000 × 维度D。也就是说30维问题最多跑30万次评估50维问题跑50万次。这个预算限制非常重要它会直接影响算法的收敛策略设计稍后我在结果分析部分再展开讲。1.2 12种新算法的确定与分类我这次评测的12种算法来源主要有三个一是2022到2024年间发表在主流期刊上的一些改进型元启发式算法二是课程项目和开源社区里比较受关注的混合式新框架三是我在复现过程中自己做了改进的变体。为了避免商业和引用上的争议下面我用代号来指代它们。按照算法机制上的侧重点我习惯把它们分成三类第一类改进型元启发式算法以经典算法为基础引入新的变异算子、反向学习机制或者自适应参数控制。第二类混合与自适应策略算法把两种或多种算法的优点结合比如全局搜索和局部搜索的混合、不同进化算子的切换等。第三类新型机制算法不依赖于传统进化/群智能框架而是用更底层的数学模型来驱动搜索比如基于概率分布模型、基于混沌映射等。这个分类方式不是绝对的但用来组织实验和后续分析非常方便可以先看大类表现再深入到每个算法的具体机制。1.3 实验设置与复现基线实验设置我严格参照了CEC2021的官方建议每个函数独立运行51次统计平均值和标准差测试维度选了10维、30维、50维和100维四档但文章里我重点以30维的结果为准来分析其他维度作辅助验证。种群规模统一设为100最大评估次数按FES 10000 × D执行。在代码层面我用了Python 3.10 NumPy SciPy的组合所有算法都在同一个评估框架内跑确保调用测试函数的接口完全一致。还需要说明的是所有算法都使用相同的初始化方式拉丁超立方抽样初始种群质量对算法表现有直接影响这一点不能含糊。随机种子方面我固定了每轮实验的种子保证51次运行之间互不干扰也保证实验可复现。2. 12种新算法分类拆解2.1 第一类改进型元启发式算法这一类的共性特征是算法骨架是大家熟悉的粒子群、差分进化、灰狼优化等但会针对收敛速度、种群多样性、跳出局部最优等痛点做手术式改进。比如其中A1算法它在差分进化的变异环节引入了一个动态缩放因子会随着进化代数自动调整。前期缩放因子大种群探索范围广后期缩放因子小加速收敛到局部精细搜索。这个思路本身不新鲜但配合上自适应交叉率之后整体性能提升很明显尤其在Rosenbrock这类具有狭窄山谷形态的函数上收敛路径比原始DE要平滑得多。还有A3算法基础框架是灰狼优化GWO但增加了反向学习的初始化策略。具体做法是初始化种群的同时生成每个个体的反向解对比两者适应度保留更优的一半作为初始种群。这个改动成本极低几乎不占用额外评估次数但对多峰函数的初始多样性保障有明显的正面作用。实测下来A3在Rastrigin系函数上的初始收敛速度确实比其他几组要快。做这一类算法要注意的是改进不要堆砌每个模块都要能解释清楚为什么有效否则评测时黑箱化出了问题根本没法定位。2.2 第二类混合与自适应策略算法混合类算法是最考验“工程感”的一类因为组合方式决定了上限。我这次测试的4种混合算法中有2种是全局搜索加局部搜索的串行混合2种是不同进化算子的并行混合。A5算法的设计比较有代表性它以鲸鱼优化算法为骨架但在气泡网攻击阶段引入了差分进化的变异向量相当于把两个搜索机制融为一体。这个组合的逻辑在于——鲸鱼优化的螺旋更新在单峰问题上效率极高但处理复杂多峰问题时容易陷入局部最优DE的差分变异则提供了额外的扰动能力让种群有机会跳出局部陷阱。实测A5在混合函数类上的表现很稳定这应该和两个机制之间的平衡有关。A6算法走的是另一条路线主循环使用粒子群但每隔一定代数触发一次共轭梯度局部搜索对当前全局最优解做精细化优化。这种“全局局部”的组合在很多工程优化问题里都有应用但参数很敏感局部搜索触发太频繁计算预算会被快速消耗触发太少对高精度解的提升又有限。我测下来每200代触发一次、每次迭代50步是比较平衡的设置。混合算法最大的难点在参数组合爆炸。一个算法动辄十几二十个参数相互之间的交互作用很难靠调参手感解决。所以我在做这一类实验时额外做了一轮离线参数敏感性分析这个后面单独讲。2.3 第三类新型机制算法这一类严格意义上不算“进化”算法但它们在测试集上的表现值得关注。A9算法基于概率分布估计类似EDA的思路每一代用当前最优解集合拟合一个多元高斯分布然后从分布中采样生成下一代。这个算法在低维问题10维上表现非常亮眼在30维上性能有所衰减主要是协方差矩阵的估计在高维时不稳定需要更多的样本来支撑。这也符合EDA算法一贯的优缺点。A10算法采用混沌映射来驱动种群更新用Logistic混沌序列替代随机数发生器。这个设计初看有点“玄学”但实际测下来混沌序列的遍历性和规律性确实能让种群在部分函数上保持更均匀的空间覆盖。不过在高度旋转的函数上混沌映射的优势并不明显说明这类算法对问题结构的偏好比较强。从评测者的角度看新型机制算法最大的问题是通用性不足往往某个或某几个函数上能进前三但排名中位数不高。这种“偏科”现象在评价中需要认真对待如果只看平均排名可能低估其潜力但如果不看平均排名又容易高估实际应用价值。2.4 实现过程中的公共问题12个算法一起写代码公共问题相当多。我在这里集中列几个供大家参考边界处理方式不统一有的算法用反弹、有的用随机重置、有的直接截断到边界。评测对比时这些差异会直接影响最终分数。我的建议是全部统一为“随机重置”——效果稳定且实现简单。数值稳定性部分旋转函数的取值区间跨度很大计算适应度时容易溢出。一定要先在测试函数上跑一轮极小规模的冒烟测试确认所有算法的评估结果在一个数量级上再正式开跑。随机种子管理我遇到过不同算法在同一随机种子下初始化结果不一致的情况原因是NumPy的全局随机数状态被某个算法内部污染了。解决办法是每个算法独立保存随机种子生成器互不干扰。3. 测试结果与排名分析3.1 评价指标设定CEC系列的标准评价指标是函数误差值即算法找到的最优解减去理论最优值。由于所有函数都做了偏移理论最优值不等于0必须用官方定义的最优值做差。需要注意的是CEC2021的函数最优值定义在不同维度下会变化算误差的时候一定要用官方代码里给出的目标值。统计方面我用三套指标综合判断均值与标准差反映算法的平均表现和稳定性。最优值与最差值反映算法的极端表现尤其在多峰函数上很关键。Wilcoxon秩和检验在α0.05的显著性水平下比较算法两两之间是否有显著差异。这一步必不可少——只看均值的话几个微小差距可能根本没有统计意义。3.2 总体排名与平均误差先看30维条件下的总体结果。下表是12种算法在10个函数上的平均误差排名本次测试结果FES预算为300,000次51次独立运行排名算法代号平均误差30维特点概括1A62.51E-03混合局部搜索收敛精度高2A14.37E-03动态缩放因子均衡性好3A56.19E-03鲸鱼DE稳定性突出4A91.02E-02概率模型低维优势5A71.85E-02双种群协同6A102.76E-02混沌驱动收敛快7A33.14E-02反向学习初始化8A84.52E-02自适应算子切换9A27.83E-02基础改进型10A111.29E-01数学驱动框架11A42.44E-01变体堆叠过度12A125.18E-01高维表现不佳从整体排名来看融合了局部搜索机制的A6和动态参数调整的A1排在前两位它们有一个共同特点在FES预算后半段仍然能保持有效的收敛能力。这一点很关键因为很多算法在前期表现凶猛到了后期搜索步长变小、多样性耗尽几乎停止更新。A1的动态缩放因子和A6的共轭梯度局部搜索本质上都在解决“后期收敛乏力”的问题。排名靠后的A4和A12也有共性机制复杂但没有形成协同效应。A4叠加了反向学习、自适应交叉、混沌扰动、精英保留等一堆模块每个模块单看都没有问题但合在一起之后参数空间急剧膨胀算法在不同函数上的表现方差极大稳定性不足。3.3 按照函数类别拆解表现只看总分可能会掩盖很多信息。我把10个函数按类型拆开观察每类问题上的最佳算法单峰函数如Bent Cigar、Zakharov对收敛速度要求高。A6优势非常明显误差精度比其他算法高1-2个数量级。这类函数没有太多局部最优谁收敛得快谁赢。基本多峰函数如Rastrigin、Expanded Scaffer对跳出局部最优的能力考验最大。A5表现最好鲸鱼优化加DE变异的结构在探索和开发之间取得了不错的平衡。A9在部分多峰函数上也有惊喜但在Rastrigin上方差偏大。混合函数由多个子函数拼接而成全局结构复杂。A1和A7表现靠前它们的共同点是具有较强的子空间搜索能力能够在不同子函数之间灵活切换搜索策略。组合函数由多个基础函数加权组合实现旋转和偏移程度最深。所有算法的误差都偏高但A6仍然最稳定。这说明组合函数对局部搜索能力的要求非常高间接验证了混合局部搜索路线的有效性。这个拆解告诉我们一个经验任何算法想在CEC2021上拿总榜第一几乎不可能靠单一机制通吃所有函数。排名靠前的算法都是“定位清晰”的——比如A6就是主打收敛精度A5主打稳定性A9主打低维探索。做算法对比实验时不建议只看一个总分建议把函数类别维度也纳入分析范围。3.4 收敛性与多样性实测我把几个头部算法在30维的收敛曲线拉出来对比发现两个有意思的现象第一A9在FES前5万次内的收敛速度是所有算法里最快的但5万次之后曲线明显放缓最终成绩被A6反超。这说明它的概率模型在有限样本下估计精度有瓶颈早期“跑得快”反而透支了后期的搜索能力。第二A5的收敛曲线虽然不是最陡的但51次运行的标准差是所有算法里最小的。换句话说是“下限很高”——正常发挥就能落在很好的区间。这种稳定性在求解实际问题时往往比单次最优更值钱因为你不可能永远运气好。多样性方面我统计了种群个体间的平均欧氏距离。头部算法的多样性曲线普遍呈现“前高后低再反弹”的模式前段快速下降是收敛的需求后段的小幅反弹则是跳出局部最优的表现。排名靠后的算法比如A12多样性下降后几乎没有任何反弹基本可以断定其早熟收敛。4. 参数敏感性、消融实验与问题排查4.1 参数敏感性分析我在测试前就预期参数会成为拉大算法差距的因素之一所以额外做了一轮参数敏感性分析。方法很简单对每个算法的核心参数在合理取值范围内取5个水平固定其他参数分别跑10次观察性能波动幅度。结果非常直观A1的动态缩放因子上下界对最终结果影响很大上下边界从[0.5, 1.0]改成[0.2, 1.2]后平均误差变化接近一个数量级。这个参数值得精细调校。A6的局部搜索触发频率影响局部搜索效率但在[100, 300]代区间内波动不大说明该算法对参数有一定宽容度。A12几乎对每个核心参数都极其敏感稍微改一点设置排名就从倒数第一跳到中游。这种高敏感性在实际工程中很难用因为你无法保证部署环境的问题特征和调参时一致。参数敏感性分析的意义不在于找到“最优参数”而在于识别“风险参数”。一个算法如果对某个参数过于敏感在做跨问题、跨领域迁移时就会非常不稳定。4.2 消融实验设计为了回答“改进到底有没有用”的问题我对几个关键算法做了消融实验。做法是关闭其中一个改进模块保留其他部分不变对比完整版本和去掉模块版本的成绩差。以A6为例关闭共轭梯度局部搜索后排名从第1掉到第7平均误差增加了约20倍。这个结果非常清晰地说了一个事实A6的亮眼成绩几乎完全依赖局部搜索模块全局搜索部分的贡献反而次要。这类消融结果虽然有点“残忍”但比含糊其辞有说服力得多。以A3为例去掉反向学习初始化后整体性能变化不大但前期收敛速度变慢说明这个模块的真正作用是“加速”而不是“提质”。如果你在论文里用这个模块重点讲它带来的收敛加速会更贴合实际。4.3 常见问题排查实录测试过程中我记录了几个反复出现的问题这里挑有代表性的三个说明问题一跑出来的结果在部分维度上保持不变排查过程我一开始以为是随机种子问题后来发现是测试函数在特定维度下的边界设置不一样而我的初始化方式没有完全按官方边界采样。比如一些函数在30维下的搜索边界是[-100, 100]²但组合函数的边界可能变成[-100, 100]³的不规则范围。解决方法是严格读取官方的bounds数组而不是按统一的经验值初始化。问题二不同算法的相同随机种子无法对齐排查过程A9算法内部使用了独立的随机数流导致全局种子状态错乱。后续我在每个算法类内部维护独立的default_rng实例从根本上解决了这个问题。问题三单位置局部搜索导致评估次数超限排查过程A6的局部搜索模块在每轮迭代中消耗大量FES我在代码里打印了实际FES消耗后发现跑完5个函数就已经超限。后来在评价器外层加了全局计数器每次调用函数评估前检查当前FES是否超过预算超过则强制终止当前优化流程。5. 实操心得与后续扩展建议5.1 我踩过的几个深层坑跑完整轮测试有些感悟不是写论文时会注意到的但对做实验的人来说很关键。第一个是测试函数的版本对齐。CEC2021官方MATLAB版和Python第三方实现之间个别函数的旋转矩阵生成逻辑有差异导致同一算法在不同实现下结果不一致。我的处理方式是所有算法统一调用同一个Python测试集实现不在不同实现之间做横向比较。如果你的对比实验要引用其他论文的结果务必确认对方用的是哪个版本、哪个维度的结果否则数字对不上。第二个是运行时间的公平性。CEC的评估次数预算是统一的但不同算法在每次评估后的额外开销差异很大。比如A5的差分变异阶段比原始鲸鱼优化多了几十次向量运算在300,000次FES下累计起来就是不小的差距。虽然这不影响算法精度排名但在“可复现效率”的比较上需要谨慎下结论。第三个是Python性能瓶颈。我第一版代码跑100维测试时光CEC函数本身的数值计算就占了总运行时间的60%以上。后来我做了两件事一是把测试函数的批量评估向量化二是用JIT编译优化了函数内部的循环。提速接近4倍整个100维测试从两天压缩到了半天。5.2 后续扩展方向这次测试只是第一轮完整评测后面我打算做三件事第一把12种算法放到真实工程优化问题上做验证比如路径规划、超参数调优、组合优化等看看测试集上的排名规律在真实场景下是否依然成立。第二针对A9这类数学驱动型算法做一次高维扩展实验重点测试50维和100维下的表现变化看能不能通过改进相关性矩阵估计来弥补高维短板。第三准备用这次测试的结果做一个算法选择推荐工具输入问题特征维度、函数类型、评估预算输出推荐算法列表。这样后续做新项目时可以少走很多弯路。根据我个人经验CEC2021这类测试集的价值不只是给了你一个排名更关键的是逼着你去想清楚每个算法“为什么在这个函数上好、在那个函数上差”。把这个问题想透了做算法对比实验才真正有沉淀。希望这篇内容能帮到正在做同样事情的朋友。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →