正在加载中...

展开本页目录
算法教程ALO-蚁狮优化

ALO-蚁狮优化

No.172 · 在线教程

ALO-蚁狮优化 的真实核心位于:

ALO-蚁狮优化

1. 方法概述

ALO-蚁狮优化 的真实核心位于:

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

这份实现对应 Ant Lion Optimizer,核心思路是:

  1. 同时维护 antlionsants 两类个体
  2. 每只蚂蚁围绕一个轮盘赌选中的蚁狮和当前精英蚁狮做随机游走
  3. 通过“合并排序后截断”的方式更新新一代蚁狮

设蚁狮和蚂蚁的种群规模都为 \(N\),搜索维度为 \(d\),则位置变量满足

$$ x_i\in [l,u]\subset\mathbb{R}^d \tag{1} $$

2. 选择机制与随机游走

2.1 轮盘赌权重

当前实现只支持最小化口径。对已排序的蚁狮适应度 \(f_i\),轮盘赌权重取为

$$ w_i=\frac{1}{\max(f_i,10^{-300})} \tag{2} $$

然后按 \(w_i\) 做随机抽样。在常见的非负目标函数场景里,适应度越小,被选中的概率越大;但若 \(f_i\le 0\),代码会先把它裁到 \(10^{-300}\),此时这些个体的权重会退化成同一个极大值。

2.2 收缩系数

ALO 的搜索半径不是线性缩小,而是按分段规则急剧收缩。代码定义

$$ I(t)= \begin{cases} 1, & t\le T/10\\ 1+100\,t/T, & t>T/10\\ 1+1000\,t/T, & t>T/2\\ 1+10000\,t/T, & t>3T/4\\ 1+100000\,t/T, & t>0.9T\\ 1+1000000\,t/T, & t>0.95T \end{cases} \tag{3} $$

后面的条件会覆盖前面的条件,所以越到后期,局部搜索范围收得越紧。

2.3 围绕蚁狮的随机游走

对某个被选中的蚁狮 \(a\),代码先把全局边界缩成

$$ l'(t)=\frac{l}{I(t)},\qquad u'(t)=\frac{u}{I(t)} \tag{4} $$

再按随机符号把这个区间平移到蚁狮附近,然后对每个维度生成一维随机游走并线性归一化到 \([l'_j,u'_j]\)。这样得到一条围绕该蚁狮的轨迹 \(RW_a(t)\)。

同理,还会围绕当前精英蚁狮生成另一条轨迹 \(RW_e(t)\)。

2.4 蚂蚁位置更新

第 \(i\) 只蚂蚁在第 \(t\) 轮的新位置取两条游走轨迹的平均:

$$ x_i^{(t)}=\frac{RW_a(t)+RW_e(t)}{2} \tag{5} $$

然后再做逐维裁剪到真实边界区间。

3. 蚁狮更新

所有蚂蚁评估完成后,代码把“旧蚁狮 + 新蚂蚁”拼接成一个大小为 \(2N\) 的总体,再按适应度排序,只保留前 \(N\) 个:

$$ \mathcal{P}^{(t+1)}=\operatorname{TopN}\big(\mathcal{A}^{(t)}\cup \mathcal{M}^{(t)}\big) \tag{6} $$

若当前最优蚁狮优于历史精英,则更新精英:

$$ x_{\mathrm{elite}}^{(t+1)}= \arg\min_{x\in \mathcal{P}^{(t+1)}} f(x) \tag{7} $$

随后代码还会强制把精英写回排序后的第 1 个位置,保证下一轮不会丢失历史最优。

4. 上传代理优化与输出结果

上传模式下,程序先训练随机森林代理模型,再把代理目标作为 ALO 的最小化目标:

$$ \tilde f(x)= \begin{cases} \hat y(x), & \text{上传方向为 min}\\ -\hat y(x), & \text{上传方向为 max} \end{cases} \tag{8} $$

最后再通过 display_curve()predict_actual() 把结果映射回原始目标值。

真实 Excel 工作表为:

  • Parameters
  • Summary
  • BestPosition
  • Convergence
  • ElitePositions
  • Bounds
  • UploadedData(仅上传模式)
  • SurrogateMetrics(仅上传模式)
  • Charts

其中 ElitePositions 会记录每轮迭代的精英位置向量。

5. 实现说明与注意事项

从真实实现看,这个目录应明确写出:

  1. 基准函数模式本质上是最小化版 ALO,没有单独的 benchmark 最大化接口。
  2. bounds_mode 主要影响输入参数检查;真正的迭代过程中仍然统一做 clip
  3. 收缩系数 I(t) 采用分段急剧放大,不是简单线性退火。
  4. 每只蚂蚁的位置来自“选中蚁狮游走 + 精英游走”的平均,这是该实现最关键的更新逻辑。
  5. 上传模式仍然是“随机森林代理模型 + ALO”,并会把训练集拟合指标导出到 SurrogateMetrics

6. 论文写作模板

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

“本文采用蚁狮优化算法对连续优化问题进行求解。首先,在给定边界内初始化蚁狮种群与蚂蚁种群,并根据适应度排序确定当前精英蚁狮;其次,通过轮盘赌机制为每只蚂蚁选择参考蚁狮,并分别围绕被选蚁狮和精英蚁狮生成随机游走轨迹;随后,将两条游走轨迹取平均得到蚂蚁新位置,再通过‘旧蚁狮与新蚂蚁合并排序后截断’的方式更新下一代蚁狮;最后,输出最优位置、最优适应度、精英轨迹与收敛曲线,用于评价算法的搜索性能。”

7. 单篇终审补充

7.1 表格标题模板

  • Summary 表可写为:表X ALO 最优解与运行结果汇总。
  • BestPosition 表可写为:表X ALO 求得的最优位置向量。
  • Convergence 表可写为:表X ALO 各迭代最优适应度变化。
  • ElitePositions 表可写为:表X ALO 精英蚁狮位置演化轨迹。

7.2 图表题注模板

  • convergence.png 可写为:图X 蚁狮优化算法收敛曲线。

7.3 结果解释模板段落

“由 SummaryBestPositionConvergence 可见,ALO 能够通过围绕被选蚁狮与精英蚁狮的双重随机游走逐步缩小搜索范围,并在后期稳定到较优区域。图X 所示 convergence.png 反映了最佳适应度的逐代变化过程;若曲线在后期趋于平稳,则说明精英蚁狮附近的局部开发已占主导。ElitePositions 工作表进一步给出了精英解在各代的坐标演化,可用于解释算法由大范围探索逐步收缩到精细搜索的过程。”

7.4 抽检复核补充

本次抽检绑定的真实手工上传验证目录为 具体的算法3/优化与多目标/ALO-蚁狮优化/results/manual_upload_verify_20260328/ALO-蚁狮优化分析结果_20260328_111301。代表性结果文件为 ALO-蚁狮优化分析结果_20260328_111301.xlsx,实际工作表为 ParametersSummaryBestPositionConvergenceElitePositionsBoundsUploadedDataSurrogateMetricsCharts,与第 4 节列出的上传代理优化导出口径一致。

复现脚本为 repro_alo.py,脚本参数中 problem_mode = 'upload_surrogate',目标名为 UploadSurrogate::f_sphere,输入文件口径为 source_file = 'repro_inputs/alo_sample.xlsx',并在运行时解析为脚本所在目录下的 repro_inputs/alo_sample.xlsx。因此该篇论文附录应明确写成“上传代理模型模式的 ALO 复现”,不要只写传统基准函数最小化。

需要特别说明的是,上传模式的最终目标值来自随机森林代理模型,SurrogateMetrics 工作表用于说明代理模型拟合质量;如果论文用该结果作为真实优化结论,应同时报告 UploadedDataSurrogateMetricsBestPosition,避免只引用 Convergence 曲线而忽略代理误差来源。

7.5 全量强化补充

  • 当前应锁定的首层主结果目录是 具体的算法3/优化与多目标/ALO-蚁狮优化/results/manual_upload_verify_20260328/ALO-蚁狮优化分析结果_20260328_111301。主工作簿为 具体的算法3/优化与多目标/ALO-蚁狮优化/results/manual_upload_verify_20260328/ALO-蚁狮优化分析结果_20260328_111301/ALO-蚁狮优化分析结果_20260328_111301.xlsx
  • 当前主工作簿实际工作表为 ParametersSummaryBestPositionConvergenceElitePositionsBoundsUploadedDataSurrogateMetricsCharts。这说明本次主证据明确属于上传代理优化模式,而不是只跑 benchmark 函数的纯函数求解模式。
  • 当前首层实体图只有两张,分别是 具体的算法3/优化与多目标/ALO-蚁狮优化/results/manual_upload_verify_20260328/ALO-蚁狮优化分析结果_20260328_111301/charts/convergence.pngbest_position.png。旧文的图题模板里只列了 convergence.png,但当前磁盘上实际还存在 best_position.png,正文若解释最优解分量,应把这张图一起纳入。
  • 当前 repro 脚本为 具体的算法3/优化与多目标/ALO-蚁狮优化/results/manual_upload_verify_20260328/ALO-蚁狮优化分析结果_20260328_111301/repro_alo.py。其内部真实参数口径写为 problem_mode = 'upload_surrogate',并在参数字典中明确包含 source_file': 'repro_inputs/alo_sample.xlsx'。对应输入副本位于首层目录的 repro_inputs/alo_sample.xlsx
  • 当前目录下还存在一层再生产物 具体的算法3/优化与多目标/ALO-蚁狮优化/results/manual_upload_verify_20260328/ALO-蚁狮优化分析结果_20260328_111301/repro_outputs/ALO-蚁狮优化分析结果_20260328_111400/,其中重新生成了工作簿、两张图、repro_alo.py 和新的 repro_inputs/alo_sample.xlsx。写文档时应把 111301 视为首层主结果,把 111400 视为由 repro 递归生成的二次结果。
  • 因为这套主证据明确依赖 UploadedDataSurrogateMetrics,所以论文或交付说明中不应把它简化成“ALO 在 Sphere 上求得最优解”。更准确的说法应是“ALO 在上传样本训练出的随机森林代理模型上完成搜索,并导出代理拟合指标与最优解结果”。

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

本篇对应的软件源码目录是 具体的算法3/优化与多目标/ALO-蚁狮优化。当前界面提供“内置/自定义函数”和“上传数据代理优化”两类入口,上传模式使用 csv/xlsx/xls 数值表训练随机森林代理模型,再由 ALO 围绕被选蚁狮和精英蚁狮进行搜索。文档中的标准随机游走、轮盘选择和精英引导公式属于理论基础;软件输出应按 Problem.problem_modeALO_Params 中的实际参数解释。

当前较新的代表性目录为 results/ALO-蚁狮优化分析结果_20260517_113112-优化模式results/ALO-蚁狮优化分析结果_20260517_113123-上传数据代理优化。主工作簿 ALO_results_*.xlsx 在优化模式下包含 字段说明SummaryProblemALO_ParamsBoundsRun_SummaryHistory_MeanHistory_AllBest_SolutionElitePositionsCharts;上传模式额外包含 UploadedProblemUploadedBoundsUploadedDataSurrogateMetricsElitePositions 是 ALO 区别于普通群智能导出的关键表,可用于解释精英蚁狮位置随迭代的演化。

图表当前稳定输出为 charts/convergence.pngcharts/best_position.png。前者展示最佳值与平均值的收敛过程,后者展示最优位置向量。复现代码位于 复现代码/优化模式/复现代码/上传数据代理优化/,上传模式的输入副本会进入 repro_inputs/alo_sample.xlsx,复现结果进入 repro_outputs/。因此文档和论文附录应把首层主结果目录作为正式结果,把 repro_outputs 视为复现生成的二次证据,不要混成同一次实验。