蜣螂优化算法DBO的复现和改进混沌反向学习初始化 自适应权重 柯西高斯变异附实验图个人学习成果从复现开始 → 找 bug → 修 bug → 三项改进 → 五函数验证 → 路径规划落地全程有数据、有代码、有统计检验。一、本篇解决的问题将 2023 年提出的蜣螂优化算法DBO从 “能跑” 改到 “能打赢”—— 我在复现时发现网络上流传的实现代码藏着一个缺陷即滚球公式里的全局最差位置X^w被固定住了导致 30 次独立运行只有 2 次能收敛到 1e-2对照原始论文修正后 30/30 全收敛、平均精度提升约 5 个数量级。随后针对 DBO 的初始化质量、探索开发失衡、早熟收敛三个毛病做了三项改进1、混沌反向学习初始化2、 自适应线性递减惯性权重 3、柯西 - 高斯混合变异在 5 个标准测试函数的 4 个上实现均值、标准差双优最后用 “基准线偏移量编码” 把它成功迁移到机器人路径规划规划出的路径长度 129.26反超 PSO 和 GA。二、背景什么是蜣螂优化算法 DBO蜣螂优化算法Dung Beetle Optimizer, DBO是 Xue 和 Shen 于 2023 年发表在The Journal of Supercomputing上的新型群智能算法 [1]。它模拟蜣螂的滚球、跳舞、繁殖、觅食、偷窃五种生存行为把种群按20% / 20% / 25% / 35%的比例分成四个角色子群构建 “多角色协同搜索” 框架。优点是参数少只有滚球扰动系数 k、光强影响系数 b、偷窃强度常数 S、收敛快缺点是 —— 哒哒哒哒哒~后面会讲。2.1 五种行为与数学模型设种群规模 N、维度 d第 i 个个体第 t 代位置为x_i(t)搜索空间[Lb, Ub]最大迭代T_max。先定义动态收缩因子R 从 1 线性衰减到 0控制产卵区 / 觅食区的收缩。① 滚球行为20% 个体负责全局探索蜣螂利用光源导航直线滚球光照越弱路径越偏其中 k0.1、b0.3α 为自然系数α1方向未偏概率 0.9α−1偏离概率 0.1X^w 是当前种群的全局最差位置划重点第三节的主角。第一项是惯性第二项让个体远离最差位置、维持种群扩散。② 跳舞行为滚球遇障碍时触发θ~U (0, π)。注意 tan (θ) 在 θ→π/2 时发散实现时必须做数值保护我的实现里用 while 循环重抽避免 |tanθ| 超过 1e6。③ 繁殖行为20% 个体负责局部开发雌蜣螂在 “安全产卵区” 产卵产卵区以当前最优解 X* 为中心、随 R 收缩其中 b1、b2 ~ U (0,1)^d。④ 觅食行为25% 个体小蜣螂在以全局最优 X^b 为中心的觅食区内随机觅食C1 ~ N (0,1)^d正态扰动幅度更大C2 ~ U (0,1)^d。⑤ 偷窃行为35% 个体小偷围绕全局最优 X^b 抢粪球S0.5g ~ N (0,1)^d。注意扰动幅度与个体到最优解的距离成正比 ——种群越收敛、扰动越小这相当于一个天然的 “自动降温” 机制是 DBO 后期精度的主要来源。2.2 原始算法的三个问题问题一初始种群质量不稳定且直接决定收敛轨迹。繁殖、觅食、偷窃全部围绕当前最优解 X^b 展开初始种群里的最优个体几乎决定了整条收敛曲线。而原始 DBO 用均匀随机初始化d 维空间里 N 个样本覆盖有限多次运行结果波动大。问题二探索与开发失衡。滚球行为的扰动强度由固定常数 k、b 决定全程不变。可算法前期需要大扰动探索、后期需要小扰动精细开发固定参数导致后期仍在大幅随机游走收敛精度上不去。问题三后期趋同 → 早熟收敛。R→0 时产卵区 / 觅食区收缩种群迅速挤到 X^b 附近。一旦 X^b 是个局部最优整个种群没有逃逸机制就卡死了。Rastrigin、Ackley 这类多峰函数尤其明显。另外还有一个我通过代数分析发现的隐藏问题 —— 更新公式的 “径向结构”产卵区 / 觅食区的半宽是 R・|X^*|正比于最优点到坐标原点的距离而不是搜索空间的尺度。这解释了为什么 DBO 在原点最优的测试函数上表现好、却在路径规划里失灵。三、复现时发现的问题网上流传的代码把 X^w 固定住了30 次只有 2 次能收敛到 1e-2复现论文时我核对了公式2-3滚球行为里的光强变化项 Δx 依赖X^w —— 当前种群的全局最差位置它应该每一代重新算取当前种群最差的那个个体。论文伪代码里写得清清楚楚X^w ← 当前种群中的最差位置 // 关键逐代更新但网上大量流传的 DBO 教程 / 示例代码X^w 在初始化之后就被固定再也没更新过顺带还把自然系数 α 取 ±1 的概率改成了各 50%论文是 0.9/0.1。这会导致什么种群收敛到原点附近之后|x_i (t) − X^w| 里那个 X^w 还是初始时离原点很远的点 —— 每只滚球蜣螂身上永远挂着一个 “量级等于初始种群尺度” 的永久扰动被反复踢开根本收敛不到高精度。实验证据Sphere 函数dim10N30200 次迭代30 次独立运行固定随机种子实现方式精度优于 1e-2 的次数平均最优适应度流传的简化实现X^w 固定2 / 304.09×10⁻¹按原始论文修正X^w 逐代更新30 / 303.24×10⁻⁶修正前后平均精度提升5 个数量级。就这么一行代码的差别。这件事给我的教训网上的二手代码不能直接信回到原始文献核对公式。很多 “DBO 复现效果差” 的吐槽源头可能就是这一个 bug。四、三项改进策略针对 2.2 的三个问题遵循 “一个问题对应一项策略” 的原则设计三个逐层叠加的改进M0 原始 DBO → M1 策略一 → M2 策略二 → M3 策略三M3 即完整改进算法 IDBO。4.1 混沌反向学习初始化解决问题初始种群质量不稳定。做法分三步步骤 1Logistic 混沌映射。混沌序列有遍历性在区间内不重复地跑遍所有状态比伪随机数覆盖更均匀步骤 2反正弦逆变换均匀化这里有个反直觉的坑直接把 Logistic 混沌序列线性映射到搜索空间效果反而比随机初始化更差初始化策略种群平均适应度较随机初始化A 均匀随机初始化334.96—B 纯 Logistic 混沌初始化395.00−17.9%C Logistic 混沌 反向学习238.2028.9%D混沌 反正弦均匀化 反向学习124.1362.9%为什么纯混沌反而更差因为 Logistic 映射在 (0,1) 上的不变密度不是均匀分布而是反正弦分布这个分布在 z→0 和 z→1 处发散—— 混沌序列的取值大量堆积在区间两端。映射到 [-10,10] 后初始个体全挤在搜索空间边界附近而对 Sphere 这种最优点在原点的函数边界恰恰是最差的区域。所以 “遍历性 ≠ 均匀性”直接套用混沌初始化未必有效。解决办法反正弦分布的 CDF 是 F (z) (2/π)・arcsin (√z)根据概率积分变换定理做一次逆变换就能把序列拉平为均匀分布做完这一步初始种群平均适应度从 395.00 直降到 124.13比随机还好 62.9%。步骤 3反向学习 精英选择。对每个候选解 x 定义反向解 x̃ Lb Ub − x。最优点未知时x 和它的镜像里必有一个更接近最优解同时评估两者命中率更高。具体做法生成 4N 个混沌个体 4N 个反向解 8N 个候选按适应度排序取前 N 个作为初始种群精英选择。4.2 自适应线性递减惯性权重解决问题探索与开发失衡。借鉴 PSO 的惯性权重思想在滚球行为前乘一个随迭代线性递减的权重前期 w≈0.9保持强探索后期 w≈0.4扰动衰减、转向精细开发。两个用实验调出来的实现细节w 要同时乘括号里的两项不能只乘第一项。实测只乘第一项时 Sphere 均值 6.087×10⁻⁷两项都乘时 5.639×10⁻⁷。跳舞行为不乘 w。跳舞是 “撞墙后的逃逸机制”如果也衰减算法后期就跳不出局部区域了。效果主要改善中期收敛速度 —— 第 100 次迭代时 M2 比 M1 快 27.5%第 150 次迭代快 31.2%。4.3 柯西 - 高斯混合变异解决问题后期早熟收敛。以 30% 概率p_m0.3对全局最优解 X^b 施加混合变异其中 ξ_C ~ C (0,1)柯西ξ_G ~ N (0,1)高斯。然后贪婪选择只有更优才接受保证变异只增不减。为什么要混合两种分布分布尾部特性擅长高斯 N (0,1)轻尾衰减快e^(−x²/2)小步长精细搜索局部开发柯西 C (0,1)重尾衰减慢1/(1x²)大跳变跳出局部最优全局探索柯西产生大幅度跳跃的概率远高于高斯适合 “逃跑”高斯适合 “精修”。混合起来两者兼得。两个必须注意的实现细节细节 1变异步长要按搜索空间尺度归一化。如果 δ 固定为 0.1在搜索范围 [-10,10] 上合适但 Griewank 的搜索范围是 [-600,600]0.1 相对 600 几乎等于没扰动。所以范围 [-10,10] 时 δ0.1和原来一致范围越大步长同步放大。归一化后 Sphere 的提升从 2.14 倍提高到 9.03 倍。细节 2变异只在迭代前期做。最初的想法当然是 “变异要全程做才能一直有机会跳出局部最优”。实验结果打脸变异作用阶段均值标准差全程变异100%8.472×10⁻⁷1.403×10⁻⁶只在前 60% 迭代3.585×10⁻⁷3.716×10⁻⁷只在前 50%2.053×10⁻⁶3.078×10⁻⁶只在前 30%2.465×10⁻⁶4.744×10⁻⁶为什么因为 DBO 的繁殖 / 觅食公式里用的是各个体自己当前的位置 X [i]。算法后期已经收敛得很精细了这时候突然把 X^b 换到远处种群成员 X [i] 并不会瞬移过去下一代的卵球位置反而被拉偏破坏了后期的精细搜索。前 60% 变异、后 40% 关闭均值提升 2.4 倍、稳定性提升 3.8 倍。五、实验设计与结果实验设置Python 3.10 NumPy 2.2.6 Matplotlib 3.10.9 SciPyN30d10T_max200全部显式设置随机种子seed 0~29结果完全可复现。测试函数为 Sphere[-100,100]、Rastrigin[-5.12,5.12]、Ackley[-32.768,32.768]、Griewank[-600,600]、Rosenbrock[-30,30]理论最优均为 0。5.1 四个模型的收敛曲线对比Sphere 函数30 次独立运行平均迭代次数M0 原始 DBOM1 混沌初始化M2 自适应权重M3 混合变异 (IDBO)11.354×10²6.192×10¹6.201×10¹6.194×10¹501.081×10⁰4.130×10⁻¹4.498×10⁻¹1.618×10⁻¹1001.804×10⁻²5.864×10⁻³4.249×10⁻³3.367×10⁻³1503.391×10⁻⁴1.257×10⁻⁴8.654×10⁻⁵6.219×10⁻⁵2003.238×10⁻⁶5.337×10⁻⁷6.087×10⁻⁷3.585×10⁻⁷三个关键观察初始化策略的贡献最立竿见影第 1 次迭代 M0 的平均最优适应度 1.354×10²M1~M3 都在 6.2×10¹ 左右初始解质量提升约 2.2 倍而且这个优势贯穿全程自适应权重在中段加速明显第 100 次迭代 M24.249×10⁻³比 M15.864×10⁻³快 27.5%第 150 次快 31.2%三条改进曲线全程位于原始曲线下方且不交叉说明提升是持续稳定的不是某一阶段偶然生效。最终 M3 相对 M0 提升9.03 倍。5.2 消融实验测试函数M0 原始 DBOM1 混沌初始化M2 自适应权重M3 混合变异 (IDBO)Sphere3.238×10⁻⁴ ± 7.68×10⁻⁴5.337×10⁻⁵ ± 7.05×10⁻⁵6.087×10⁻⁵ ± 9.32×10⁻⁵3.585×10⁻⁵ ± 3.72×10⁻⁵Rastrigin3.424×10¹ ± 1.68×10¹2.458×10¹ ± 1.25×10¹2.525×10¹ ± 1.19×10¹2.745×10¹ ± 1.34×10¹Ackley2.247×10⁰ ± 5.46×10⁰4.669×10⁻¹ ± 9.89×10⁻¹4.490×10⁻¹ ± 1.06×10⁰3.585×10⁻¹ ± 7.98×10⁻¹Griewank2.571×10⁻¹ ± 2.02×10⁻¹2.450×10⁻¹ ± 2.22×10⁻¹2.434×10⁻¹ ± 2.21×10⁻¹2.571×10⁻¹ ± 2.18×10⁻¹Rosenbrock3.071×10² ± 7.51×10²3.168×10² ± 7.48×10²3.746×10² ± 7.87×10²1.130×10² ± 1.49×10²结论很清晰而且每项策略的 “性格” 不一样混沌初始化是 “普适性” 改进5 个函数全部不劣于原始算法低风险高收益自适应权重主要调收敛节奏对最终精度贡献不大但对中段速度贡献明确混合变异是 “针对性” 改进对 Rosenbrock 这种狭长欺骗性山谷特别有效均值提升 2.72 倍、标准差降 80.2%但在 Rastrigin、Griewank 上没捞到好处。5.3 Wilcoxon 秩和检验只看均值容易被随机波动骗了。改用Wilcoxon 秩和检验非参数不要求正态分布假设原假设 “两个算法结果来自同一分布”α0.05单侧检验测试函数对比p 值是否显著均值提升SphereM0 vs M18.457×10⁻²否6.07×SphereM0 vs M23.802×10⁻²显著5.32×SphereM0 vs M32.922×10⁻²显著9.03×RastriginM0 vs M18.308×10⁻³显著1.39×RastriginM0 vs M29.747×10⁻³显著1.36×RastriginM0 vs M36.029×10⁻²否1.25×AckleyM0 vs M35.854×10⁻²否临界6.27×GriewankM0 vs M34.471×10⁻¹否1.00×RosenbrockM0 vs M33.951×10⁻¹否2.72×这里有个值得写进简历的洞察均值显著 ≠ 统计显著。Rosenbrock 上 M3 均值提升 2.72 倍但 p0.395 完全不显著 —— 因为原始 DBO 在 Rosenbrock 上的标准差高达 7.51×10²最差和最好结果相差 3 个数量级巨大的方差把均值差异淹没了。Ackley 上 p0.0585 临界但均值提升 6.27 倍、标准差降 85.4%工程意义明确。所以评价算法要同时报告均值、标准差和统计检验只看一个指标都会得出片面结论。5.4 参数敏感性分析变异步长 δ 是 IDBO 最重要的超参数。固定其他参数δ 取 {0, 0.01, 0.05, 0.1, 0.5, 1.0, 5.0}δ0 即不施加变异等于 M2每个函数 30 次运行测试函数搜索跨度δ0δ0.05δ0.5δ1.0δ5.0最优 δSphere2006.087×10⁻⁵1.603×10⁻⁴2.702×10⁻⁴3.585×10⁻⁵4.774×10⁻⁴1.0Rastrigin10.22.525×10¹2.870×10¹2.857×10¹2.863×10¹2.863×10¹0Ackley65.54.490×10⁻¹6.530×10⁻¹5.696×10⁻¹1.092×10⁻¹1.340×10⁻¹1.0Griewank12002.434×10⁻¹2.846×10⁻¹3.053×10⁻¹3.144×10⁻¹2.720×10⁻¹0Rosenbrock603.746×10²5.777×10¹1.819×10²4.958×10²5.089×10²0.05三个发现影响是非单调的 U 形δ 太小变异失效δ 太大直接跳过最优解所在区域最优 δ 与搜索跨度没有单调关系跨度最大的 Griewank1200和跨度最小的 Rastrigin10.2都不需要变异跨度中等的 Sphere200和 Ackley65.5反而需要大步长 —— 说明变异有没有效取决于适应度地形而不是搜索空间尺度我还尝试了直觉上更合理的 “变异步长随迭代衰减” 方案前期大步长、后期小步长实验结果证明更差对数平均从 0.400 恶化到 0.626于是在论文里如实写下了这个 “提出方案 → 实验检验 → 否定方案” 的过程。符合直觉的设计未必有效要用实验说话。六、应用机器人路径规划关键点为什么改用 “基准线偏移量” 编码路径规划是最优点远离原点的问题 —— 这是 DBO 的天然短板。回顾公式2-5产卵区的半宽是 R・|X^*|正比于当前最优解到坐标原点的距离。如果直接拿拐点绝对坐标当优化变量最优解在地图中心约 (50,50)离原点很远DBO 的搜索盒就被 “锚定” 在从原点指向最优解的径向上垂直方向几乎搜不动 —— 实测直接编码时原始 DBO 的最优路径只有 141.42~160连 GA 的 130.03 都不如。解法把 “找拐点绝对坐标” 改成 “找基准线上的偏移量”。先把起点终点连线等分成 K1 段得到 K 个基准点优化变量是每个基准点的偏移量 offset_i ∈ [-40, 40]²拐点位置 基准点 偏移量妙处在于全零向量恰好对应 “沿基准线直走”最优解被平移到了搜索空间原点附近—— 正好落进 DBO 最擅长的区域径向结构从短板变成优势。这就是 “分析公式结构 → 提出假设 → 实验验证 → 工程解决” 的完整闭环。适应度函数fitness 路径总长度 10000× 碰撞段数 5× 急转弯个数。碰撞判断用Liang-Barsky 线段裁剪算法比沿线采样判断快一个量级惩罚系数 10000 远大于路径长度130~200保证算法优先消碰撞、再优化长度。实验结果100×100 栅格地图9 个障碍物起点 (5,5) → 终点 (95,95)各算法 10 次独立运行算法最优路径长度平均长度标准差急转弯数无碰撞成功率原始 DBO142.55174.8929.031100%改进 DBO (IDBO)129.26140.088.000100%PSO129.76160.4829.010100%GA129.75139.127.540100%起点到终点的直线距离理论下界是 127.28IDBO 只比下界长 1.6%四种算法里最短而且转弯次数为 0、完全平滑。收敛过程还有个有意思的细节原始 DBO 直到约第 180 次迭代才首次找到无碰撞路径之前一直停留在含碰撞惩罚的较差解上适应度约 1.2×10³而 IDBO、PSO、GA 都在 20 次迭代内就降到无碰撞水平且 IDBO 的曲线全程最低。七、项目结构 如何运行DBO\_Project/ ├── dbo\_basic.py # 原始 DBO已修正 X^w 未更新的实现缺陷 ├── dbo\_improved1.py # 改进1混沌反向学习精英初始化 ├── dbo\_improved2.py # 改进2改进1 自适应线性递减惯性权重 ├── dbo\_improved3.py # 改进3完整改进算法 IDBO ├── plot\_compare.py # 四模型收敛曲线对比 ├── test\_functions.py # 5 个标准测试函数 ├── init\_compare.py # 初始化策略对比实验 ├── batch\_test.py # 批量对比实验300 次运行 ├── ablation\_test.py # 消融实验 Wilcoxon 秩和检验 ├── sensitivity\_delta.py # 变异步长参数敏感性分析 ├── map\_env.py # 100×100 栅格地图生成 ├── path\_planning.py # 四算法路径规划对比 ├── md2docx.py # 工具把论文 Markdown 转成 Word └── \*.png / \*.csv / \*\_log.txt # 全部实验图、数据、日志环境只要 3 个库pip install numpy matplotlib scipy一键复现全部实验python init\_compare.py # 表3-1 初始化策略对比 python dbo\_basic.py # 原始 DBO 收敛曲线 python dbo\_improved1.py # 改进1 收敛曲线 python dbo\_improved2.py # 改进2 收敛曲线 python dbo\_improved3.py # 改进3 收敛曲线 python plot\_compare.py # 四曲线对比 python batch\_test.py # 批量对比约 2 分钟 python ablation\_test.py # 消融 显著性检验约 4 分钟 python sensitivity\_delta.py # 参数敏感性约 5 分钟 python map\_env.py # 生成地图 python path\_planning.py # 路径规划对比所有实验显式设置随机种子seed 0, 1, …, 29结果完全可复现。绘图用了 SimHei 字体Linux/macOS 上若中文变方框改各脚本开头的plt.rcParams[font.sans-serif]即可。八、总结与不足成果修正了一个全网流传的实现缺陷2/30 → 30/30精度提升 5 个数量级三项改进在 5 个测试函数的 4 个上均值标准差双优Sphere 9.03×、Ackley 6.27×、Rosenbrock 2.72×消融实验证明每项策略都有独立贡献Wilcoxon 检验在 Sphere、Rastrigin 上显著路径规划以 129.26 反超 PSO/GA距理论下界仅 1.6%且零急转弯全程不增加时间复杂度量级。不足Griewank 没赢。两者均值几乎一样2.5707×10⁻¹ vs 2.5710×10⁻¹差异 0.01%p0.447。原因是 Griewank 的局部极小值尺度小、密度高归一化后的变异步长6.0对它偏大变异无法稳定获益 —— 混沌初始化和自适应权重带来的改善也被地形的高随机性掩盖了。这个结果我如实报告了没有选择性隐藏测试基准有限只有 5 个经典函数、d10没上 CEC2017/CEC2022 套件也没和 2024-2025 年的 DBO 改进变体横向对比超参数还是人工调的μ、w_max/w_min、p_m、φ、δ0 都靠实验确定没有自适应机制没有理论收敛性证明纯实验验证路径规划场景简单二维静态栅格、单一地图、10 次运行没涉及三维 / 动态 / 多机器人。九、实验图注本优化算法仅代表作者个人学习观点仅供学习参考。
