正在加载中...

展开本页目录
算法教程GOA-蝗虫优化

GOA-蝗虫优化

No.187 · 在线教程

蝗虫优化算法(Grasshopper Optimization Algorithm, GOA)是一类通过模拟蝗虫群体社会相互作用实现全局寻优的连续优化方法。本项目的核心实现位于 GOA-蝗虫优化/core/goa.py,并由 core/goacalculator.py 封装为桌…

GOA-蝗虫优化

1. 方法概述

蝗虫优化算法(Grasshopper Optimization Algorithm, GOA)是一类通过模拟蝗虫群体社会相互作用实现全局寻优的连续优化方法。本项目的核心实现位于 GOA-蝗虫优化/core/goa.py,并由 core/goa_calculator.py 封装为桌面端分析器,支持内置测试函数和上传数据代理优化。

设第 \(i\) 个蝗虫在第 \(t\) 轮迭代时的位置为

$$ \boldsymbol{x}_i^{(t)}=(x_{i1}^{(t)},x_{i2}^{(t)},\ldots,x_{id}^{(t)})^\top\in\Omega \tag{1} $$

其中 \(d\) 为维度,\(\Omega=[\boldsymbol{l},\boldsymbol{u}]\subset\mathbb{R}^d\) 为可行域。项目以当前最优解作为目标位置 Target,并围绕社会作用力构造群体更新。

2. 问题定义与代理优化

在内置基准函数模式下,项目求解

$$ \min_{\boldsymbol{x}\in\Omega} f(\boldsymbol{x}) \tag{2} $$

problem_mode=upload_surrogate 时,系统使用随机森林回归器建立代理模型。设训练样本为

$$ \mathcal{D}=\{(\boldsymbol{x}^{(n)},y^{(n)})\}_{n=1}^{N_s} \tag{3} $$

则代理目标函数写为

$$ \hat{f}(\boldsymbol{x})=\frac{1}{B}\sum_{b=1}^{B}T_b(\boldsymbol{x}),\qquad B=300 \tag{4} $$

变量边界由样本极值确定:

$$ l_j=\min_{1\le n\le N_s}x_j^{(n)},\qquad u_j=\max_{1\le n\le N_s}x_j^{(n)} \tag{5} $$

若上传模式的目标方向为最大化,项目通过 direction_sign 在内部完成等价最小化处理,并在结果展示时恢复原方向。

3. 核心数学模型

3.1 初始化

设种群规模为 \(N\)。项目按均匀分布生成初始群体:

$$ \boldsymbol{x}_i^{(0)}=\boldsymbol{l}+\boldsymbol{r}_i\odot(\boldsymbol{u}-\boldsymbol{l}),\qquad \boldsymbol{r}_i\sim U(0,1)^d \tag{6} $$

初始最优个体作为目标位置

$$ \boldsymbol{T}^{(0)}=\arg\min_{1\le i\le N}f(\boldsymbol{x}_i^{(0)}) \tag{7} $$

3.2 社会作用函数

项目采用 README 中给出的经典 GOA 社会相互作用函数:

$$ s(r)=f\exp(-r/l)-\exp(-r) \tag{8} $$

其中代码中固定 \(f=0.5\)、\(l=1.5\)。

3.3 控制参数 \(c\)

在第 \(t\) 轮迭代,GOA 使用线性递减控制参数

$$ c^{(t)}=c_{\max}-t\cdot \frac{c_{\max}-c_{\min}}{T} \tag{9} $$

其中 \(T\) 为最大迭代次数。

3.4 个体间社会作用

对第 \(i\) 个蝗虫和第 \(j\) 个蝗虫,代码先计算相对位移与欧氏距离:

$$ \boldsymbol{d}_{ij}^{(t)}=\boldsymbol{x}_j^{(t)}-\boldsymbol{x}_i^{(t)},\qquad r_{ij}^{(t)}=\|\boldsymbol{d}_{ij}^{(t)}\|_2 \tag{10} $$

归一化方向向量为

$$ \hat{\boldsymbol{d}}_{ij}^{(t)}=\frac{\boldsymbol{d}_{ij}^{(t)}}{r_{ij}^{(t)}} \tag{11} $$

项目没有直接把 \(r_{ij}\) 送入 \(s(\cdot)\),而是采用参考实现中的距离映射:

$$ \tilde{r}_{ij}^{(t)}=2+\big(r_{ij}^{(t)} \bmod 2\big) \tag{12} $$

于是个体 \(j\) 对个体 \(i\) 的社会作用写为

$$ \boldsymbol{S}_{ij}^{(t)}= \left(\frac{c^{(t)}}{2}(\boldsymbol{u}-\boldsymbol{l})\right)\odot s\!\left(\tilde{r}_{ij}^{(t)}\right)\hat{\boldsymbol{d}}_{ij}^{(t)} \tag{13} $$

第 \(i\) 个蝗虫受到的总社会作用为

$$ \boldsymbol{S}_i^{(t)}=\sum_{j=1,j\neq i}^{N}\boldsymbol{S}_{ij}^{(t)} \tag{14} $$

3.5 位置更新

项目使用目标位置作为群体引导项,更新公式为

$$ \boldsymbol{x}_i^{(t+1)}=c^{(t)}\boldsymbol{S}_i^{(t)}+\boldsymbol{T}^{(t)} \tag{15} $$

这与标准 GOA 中“社会作用 + 目标项”的思想一致,但项目实现省略了风力/重力附加项。

3.6 边界处理与目标更新

更新后所有个体均采用截断边界处理:

$$ x_{ij}^{(t+1)}\leftarrow \min\!\big(\max(x_{ij}^{(t+1)},l_j),u_j\big) \tag{16} $$

随后重新评估适应度,并更新当前全局最优目标:

$$ \boldsymbol{T}^{(t+1)}= \arg\min_{1\le i\le N}f(\boldsymbol{x}_i^{(t+1)}) \tag{17} $$

收敛曲线记录为

$$ g^{(t)}=\min_{1\le i\le N}f(\boldsymbol{x}_i^{(t)}) \tag{18} $$

4. 算法流程

根据 GOAOptimizer.optimizeGOACalculator.calculate,本项目的 GOA 求解步骤为:

  1. 选择内置目标函数或上传代理优化模式。
  2. 初始化蝗虫群体并确定初始目标位置。
  3. 每轮迭代按式(9)更新控制参数 \(c\)。
  4. 对每个个体累加来自其他个体的社会作用,形成 \(\boldsymbol{S}_i^{(t)}\)。
  5. 按式(15)更新位置并执行边界截断。
  6. 重算适应度,刷新全局最优目标位置。
  7. 输出收敛曲线、最佳解和边界信息。

5. 关键参数说明

  • pop_size:蝗虫数量 \(N\)。
  • max_iter:最大迭代次数 \(T\)。
  • c_minc_max:控制参数上下界,对应式(9)。
  • dim:问题维度。
  • lbub:变量边界。
  • seed:随机种子。

6. 评价指标与输出结果解释

本项目当前主要输出单次运行结果。若最终最优解记为 \(\boldsymbol{x}^*\),则

$$ f^*=f(\boldsymbol{x}^*) \tag{19} $$

实际导出的主要工作表包括:

  • Summary:最佳适应度、问题模式等摘要;
  • Objective:目标函数或代理问题定义;
  • GOA_Params:蝗虫优化参数;
  • Bounds:变量边界;
  • Convergence:收敛曲线;
  • Best_Solution:最优解向量;
  • Charts:图表路径。

上传代理模式下还会追加 UploadedDataSurrogateMetrics

由于该实现当前以单次运行为主,论文结果部分更适合采用“Summary 报告最优值、Convergence 展示收敛轨迹、Best_Solution 给出最优解向量”的写法,而不应写成多次运行均值统计。若为上传代理模式,建议把 SurrogateMetrics 与最优预测结果同时给出,以说明代理模型训练质量。

7. 论文写作模板

可在论文方法部分表述为:

“本文采用蝗虫优化算法对连续变量单目标问题进行求解。算法通过模拟蝗虫个体间的社会排斥与吸引作用构建群体动力学,并在每轮迭代中使用线性递减控制参数调节探索与开发能力。本文实现中,对个体间距离采用参考代码中的模运算映射处理,以增强不同距离尺度下的社会作用差异;随后将社会作用总和与当前最优目标位置叠加形成新的个体位置。对于数据驱动问题,则先训练随机森林代理模型,再在样本特征边界内执行 GOA 搜索。”

7.1 结果部分补充模板

若需把实验结果直接写入论文结果部分,可进一步表述为:

“表X给出了算法在当前问题上的最优目标值、平均最优值和标准差(如有多次独立运行),图X展示了收敛曲线变化。结果表明,该算法在迭代前期能够快速逼近优势区域,并在后期逐步趋于稳定,最终获得最优解 \(\boldsymbol{x}^*\) 及其对应目标值 \(f(\boldsymbol{x}^*)\)。对于上传代理优化场景,结合代理模型误差指标可认为该最优结果具有一定的数据驱动解释性。”

7.2 写作替换提示

为便于直接落稿,正文撰写时可将结果文件中的字段替换为以下论文措辞:

  • best_fitness 或结果汇总表中的最优值,可写为“最优目标函数值”或“最优适应度值”;
  • BestSolutionBestPositionBest_Solution最优解 等工作表,可统一写为“最优决策变量组合 \(\boldsymbol{x}^*\)”;
  • Convergence收敛曲线 等图表,可统一写为“算法收敛曲线图”;
  • SurrogateMetrics 可写为“代理模型训练误差与拟合优度指标”,如 RMSE、MAE、\(R^2\)。

7.3 可直接替换的论文结果段落

若需进一步直接落稿,可按以下模板替换其中的表号、图号和数值:

“由表X可知,该算法在[问题名称]上的最优目标值为 [best_fitness]。若进行了多次独立运行,则其平均最优值与标准差分别为 [mean_best_fitness] 和 [std_best_fitness]。由图X所示收敛曲线可见,算法在迭代前期快速逼近优势区域,后期逐渐趋于平稳,表现出较好的收敛性。最终得到的最优决策变量组合为 \(\boldsymbol{x}^*=[x_1^*,x_2^*,\ldots,x_d^*]\)。若采用上传代理优化模式,则结合 RMSE、MAE 和 \(R^2\) 等代理误差指标,可认为该优化结果具有一定的数据驱动可信度。”

8. 实现说明与注意事项

  • 本实现适用于连续变量单目标优化。
  • 距离映射 \(\tilde{r}=2+(r\bmod 2)\) 是本项目参考代码中的特定实现,不应误写成直接使用欧氏距离。
  • 控制参数 \(c\) 线性递减是 GOA 平衡探索与开发的关键。
  • 上传代理优化结果依赖随机森林拟合精度,应结合训练误差指标解释最优结果。

9. 单篇终审补充

9.1 图题与表题对齐建议

  • Summary 表可写为:表X GOA 最优适应度与问题配置摘要。
  • Objective 表可写为:表X GOA 目标函数或代理问题定义。
  • GOA_Params 表可写为:表X GOA 算法参数设置。
  • Convergence 表可写为:表X GOA 收敛曲线数据。
  • Best_Solution 表可写为:表X GOA 求得的最优解向量。
  • Charts 中收敛图建议写为:图X 蝗虫优化算法收敛曲线。

9.2 终审说明

  • 当前实现以单次运行为主,正文不宜写成“多次独立运行均值统计”。
  • 若为上传代理模式,最优值解释必须和 SurrogateMetrics 同时出现。

9.3 全量强化补充

本次全量强化绑定的真实结果目录为 具体的算法3/优化与多目标/GOA-蝗虫优化/results/pytest_ui_goa_test_swarm_improved_ui_flow_of2。其中较新的主结果文件可直接绑定为 GOA_results_20260329_171720.xlsx,实际工作表为 SummaryObjectiveGOA_ParamsBoundsConvergenceBest_SolutionCharts

该目录里同时保留了多轮连续生成产物:GOA_results_20260329_151629.xlsxGOA_results_20260329_152348.xlsxGOA_results_20260329_152952.xlsxGOA_results_20260329_171720.xlsx,以及对应的四张 GOA_convergence_*.png。因此这不是单一文件快照,而是同一 UI/回归目录里累积了多轮导出结果。本次文档建议以时间戳最后的 171720 这一组作为主引用对象,其余可视为同目录下的历史残留或连续复算产物。

复现脚本为 repro_goa.py,其真实口径是 objective_name = 'F1'problem_mode = 'benchmark',并把 output_dir 写成相对目录 results。因此 GOA 当前绑定的并不是 repro_inputs 上传数据链路,而是 benchmark 函数复算链路。正文若解释可复现性,应明确写成“基于 F1 基准函数的问题复现”,不要误写成上传代理模式。

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

本篇对应的软件源码目录是 具体的算法3/优化与多目标/GOA-蝗虫优化。当前软件实现支持优化模式和上传数据代理优化模式;上传模式读取数值表后导出代理问题和代理模型指标。文档中关于社会相互作用、重力项、风向项和收缩系数的理论说明可以保留,但软件结果应以当前 GOA_ParamsObjectiveConvergenceBest_Solution 表为准。

当前较新的代表性目录为 results/GOA-蝗虫优化分析结果_20260517_130324-优化模式results/GOA-蝗虫优化分析结果_20260517_130335-上传数据代理优化。主工作簿 GOA_results_*.xlsx 在优化模式下包含 结果摘要结果说明字段说明SummaryProblemGOA_ParamsBoundsRun_SummaryHistory_MeanHistory_AllBest_SolutionChartsObjectiveConvergence;上传模式额外包含 UploadedProblemUploadedDataSurrogateMetrics。旧文中绑定的 benchmark 回归目录仍可作为历史证据,但当前较新结果已经覆盖上传代理模式。

当前图表通常直接位于结果目录或复现输出目录下,例如 GOA_convergence_时间戳.png。复现代码位于 复现代码/优化模式/复现代码/上传数据代理优化/,上传模式输入副本为 repro_inputs/goa_sample.xlsx,复现输出进入 repro_outputs/。如果用户遇到旧版 excel_handler.py 的路径变量问题,应以当前新版结果目录和工作簿结构为准重新打包/运行后再验收。