正在加载中...

展开本页目录
算法教程BA-蝙蝠算法

BA-蝙蝠算法

No.175 · 在线教程

BA-蝙蝠算法 的真实核心位于:

BA-蝙蝠算法

1. 方法概述

BA-蝙蝠算法 的真实核心位于:

  • core/ba_calculator.py
  • ui/upload_widget.py
  • ui/results_widget.py
  • utils/problem_definition.py

这份实现对应 Bat Algorithm,完整维护了经典 BA 的几组状态量:

  • 位置 pop
  • 速度 vel
  • 频率 freq
  • 响度 loudness
  • 脉冲率 pulse_rate

设第 \(i\) 只蝙蝠在第 \(t\) 轮的位置为 \(x_i^{(t)}\),全局最优位置为 \(x_\star^{(t)}\)。

2. 目标函数与问题模式

2.1 基准函数与上传代理

基准模式支持:

  • Sphere
  • Rosenbrock
  • Rastrigin
  • Ackley
  • Griewank
  • Schwefel

上传模式下,会先训练随机森林代理模型:

$$ \hat y(x)=\mathrm{RandomForestRegressor}_{300}(x) \tag{1} $$

与本窗口其它算法不同,这个目录在上传模式中直接把

$$ f(x)=\hat y(x) \tag{2} $$

作为真实目标值传给 BA;若用户选择最大化,则 _run_single() 直接改用“大者更优”的比较函数,而不是显式取负。

2.2 多次运行统计

若运行 \(R\) 次,程序会记录每次最优值 \(f_r^\star\),并计算

$$ \bar f=\frac{1}{R}\sum_{r=1}^{R} f_r^\star \tag{3} $$

以及样本标准差,用于评价稳定性。

3. BA 更新公式

3.1 频率、速度与全局搜索

对第 \(i\) 只蝙蝠,代码先采样

$$ \beta_i\sim U(0,1) \tag{4} $$

并计算频率

$$ f_i=f_{\min}+(f_{\max}-f_{\min})\beta_i \tag{5} $$

随后更新速度与候选位置:

$$ v_i^{(t+1)}=v_i^{(t)}+\big(x_i^{(t)}-x_\star^{(t)}\big)f_i \tag{6} $$

$$ \tilde x_i^{(t+1)}=x_i^{(t)}+v_i^{(t+1)} \tag{7} $$

3.2 局部搜索

若随机数满足

$$ r>\texttt{pulse\_rate}_i \tag{8} $$

则代码改为围绕当前全局最优做局部搜索:

$$ \tilde x_i^{(t+1)}=x_\star^{(t)}+\varepsilon\cdot \texttt{local\_step}\cdot \overline{A}^{(t)}, \qquad \varepsilon\sim U(-1,1)^d \tag{9} $$

其中 \(\overline{A}^{(t)}\) 是当前种群响度均值。

3.3 接受准则

候选解满足“更优且随机数小于响度”时才被接受:

$$ x_i^{(t+1)}= \begin{cases} \tilde x_i^{(t+1)}, & \tilde f_i \text{ 更优且 } u<A_i^{(t)}\\ x_i^{(t)}, & \text{否则} \end{cases} \tag{10} $$

3.4 响度与脉冲率更新

一旦接受新解,响度和脉冲率按经典 BA 形式更新:

$$ A_i^{(t+1)}=\alpha A_i^{(t)} \tag{11} $$

$$ r_i^{(t+1)}=r_{0}\Big(1-e^{-\gamma (t+1)}\Big) \tag{12} $$

这里的 alphagamma 都来自 UI 参数页。

4. 输出结果与导出

真实 Excel 工作表为:

  • 参数
  • 边界设置
  • 运行汇总
  • 收敛曲线
  • 最佳解
  • 最佳适应度
  • 结果解读
  • UploadedData(上传模式)
  • SurrogateMetrics(上传模式)
  • 图表清单
  • 初始群体
  • 初始速度
  • 最终群体
  • 最终速度

其中 初始速度 默认全为零,最终速度 反映了整个 BA 过程后保留下来的速度向量。

若维度为 2,代码还会额外尝试导出等高线与最优轨迹图;若 n_runs>1,则会再生成最优值箱线图。

5. 实现说明与注意事项

从真实代码看,这个目录应明确说明:

  1. 上传模式不是“代理目标取负后统一最小化”,而是直接把 predict_actual 作为目标,再由 minmax 比较函数决定优劣。
  2. 局部搜索触发条件写成 rand > pulse_rate[i],这和部分教材中的不等号方向完全一致,但文档里最好写明。
  3. 新解只有在“更优且随机数小于当前响度”时才真正接受。
  4. 结果导出会保留初始/最终群体与速度矩阵,这在当前窗口其它优化算法里并不常见。
  5. 多次运行时,最终导出的 初始群体最终群体 只取第一次运行,不是所有运行的拼接结果。

6. 论文写作模板

可在论文“方法部分”中写为:

“本文采用蝙蝠算法对连续变量优化问题进行求解。首先,在给定边界内初始化蝙蝠种群的位置、速度、频率、响度和脉冲率,并根据目标函数确定初始全局最优解;其次,利用频率控制速度与位置更新,在需要时围绕当前全局最优解执行局部随机搜索;随后,依据‘候选解更优且随机数小于当前响度’的接受准则刷新个体状态,并同步更新响度与脉冲率;最后,输出最优解、最优适应度、收敛曲线以及初始/最终群体信息,用于分析算法的搜索行为与稳定性。”

7. 单篇终审补充

7.1 表格标题模板

  • 运行汇总 表可写为:表X BA 多次独立运行结果汇总。
  • 收敛曲线 表可写为:表X BA 各迭代最优值变化。
  • 最佳解 表可写为:表X BA 求得的最优解向量。
  • 最佳适应度 表可写为:表X BA 最终最优适应度。
  • 初始群体最终群体 表可写为:表X BA 初始与最终种群状态对比。

7.2 图表题注模板

  • convergence.png 可写为:图X 蝙蝠算法收敛曲线。
  • 二维等高线与最优轨迹图可写为:图X BA 在二维目标函数上的搜索轨迹。
  • 多次运行箱线图可写为:图X BA 多次运行最优值分布箱线图。

7.3 结果解释模板段落

“由 运行汇总最佳解最佳适应度 可见,BA 能够通过频率调节、局部搜索和响度-脉冲率动态更新逐步逼近更优解。图X 所示 convergence.png 展示了算法在迭代中的最优值变化;若曲线在前期快速改善、后期平稳,则说明搜索已由全局探索逐渐过渡到局部精修。初始群体最终群体 的对比还可用于分析种群在搜索后期的聚集程度。若 n_runs>1 并导出了箱线图,则应结合其分布范围讨论算法稳定性,而不是仅报告单次最优结果。”

7.4 全量强化补充

本次全量强化绑定的真实上传验证目录为 具体的算法3/优化与多目标/BA-蝙蝠算法/results/manual_upload_verify_20260328/BA-蝙蝠算法_结果_20260328_113216。主结果文件为 BA-蝙蝠算法_结果_20260328_113216.xlsx,实际工作表为 参数边界设置运行汇总收敛曲线最佳解最佳适应度结果解读UploadedDataSurrogateMetrics图表清单初始群体初始速度最终群体最终速度

当前真实图位于 charts/ 子目录,包括 convergence.pngbest_box.png。这说明本次结果目录实际保留了多次运行最优值分布图,但未导出二维轨迹图;论文若要讨论稳定性,可直接引用 best_box.png,不要保留并不存在的二维轨迹图占位。

复现脚本为 repro_ba.py,其输入口径为 source_file = 'repro_inputs/ba_sample.xlsx',且参数中显式保留 n_runs = 2problem_mode = 'upload_surrogate'。因此这篇文档应把复现描述为“上传代理模式下、带两次独立运行统计的 BA 复现”,同时结合 SurrogateMetrics 说明代理模型误差与优化结果之间的关系。

8. 软件实现核查补充(2026-07)

本篇对应的软件源码目录是 具体的算法3/优化与多目标/BA-蝙蝠算法。软件实现把频率、响度、脉冲率、种群规模、迭代次数、多次运行等参数接入连续优化流程,并同时支持优化模式与上传数据代理优化模式。上传模式读取 csv/xlsx/xls 后训练随机森林代理模型,因此软件中的 best_fitness 在上传模式下是代理目标上的优化显示值,需要结合 SurrogateMetrics 解释。

当前较新的代表性目录为 results/BA-蝙蝠算法分析结果_20260517_112942-优化模式results/BA-蝙蝠算法分析结果_20260517_113005-上传数据代理优化。主工作簿 BA_results_*.xlsx 包含 结果摘要结果说明字段说明SummaryProblemAlgorithm_ParamsBoundsRun_SummaryHistory_MeanHistory_AllBest_SolutionConvergence_BestRunExplanationChartsInitial_PopulationInitial_VelocityFinal_Population,优化模式还可包含 Final_Velocity;上传模式额外包含 UploadedProblemUploadedDataSurrogateMetrics。这些表比理论公式更直接反映当前软件的实际计算链路。

图表当前稳定输出为 图表/convergence.png,部分历史目录还存在 best_box.png,但较新实跑不应默认写成必有箱线图。复现代码位于 复现代码/优化模式/复现代码/上传数据代理优化/,上传模式会复制输入到 repro_inputs/ba_sample.xlsx,并在 repro_outputs/ 中再生成一套工作簿、图表和复现脚本。文档中如果讨论种群演化,应优先引用 Initial_PopulationInitial_VelocityFinal_PopulationFinal_Velocity 等实际工作表。