正在加载中...

展开本页目录
算法教程IGOA-改进蝗虫优化

IGOA-改进蝗虫优化

No.192 · 在线教程

IGOA(Improved Grasshopper Optimization Algorithm)是在 GOA 基础上改造得到的群智能算法。本项目目录中同时包含底层类 core/igoa.py 和实际界面调用链 core/igoacalculator.py;其中用户通过 ui/…

IGOA-改进蝗虫优化

1. 方法概述

IGOA(Improved Grasshopper Optimization Algorithm)是在 GOA 基础上改造得到的群智能算法。本项目目录中同时包含底层类 core/igoa.py 和实际界面调用链 core/igoa_calculator.py;其中用户通过 ui/upload_widget.py 发起分析时,真正执行的是 IGOACalculator.run_analysis。因此,论文说明应以 calculator 中的运行逻辑、多次独立运行统计和奇数维补位策略为准。

设第 \(r\) 次独立运行中,第 \(i\) 只蝗虫在第 \(t\) 轮的位置为

$$ \boldsymbol{x}_{i,r}^{(t)}\in\Omega' \tag{1} $$

若原始问题维度为 \(d\),则工作维度为

$$ d'= \begin{cases} d, & d\ \text{为偶数}\\ d+1, & d\ \text{为奇数} \end{cases} \tag{2} $$

当 \(d\) 为奇数时,calculator 会将最后一维边界复制一份作为补位维度,并在最终输出时再截回原维度。

2. 问题定义与代理优化

项目求解的内部问题统一写为

$$ \min_{\boldsymbol{x}\in\Omega'}\tilde f(\boldsymbol{x}) \tag{3} $$

上传模式下,先构建样本集

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

并训练随机森林代理模型

$$ \hat f(\boldsymbol{x})=\frac{1}{300}\sum_{b=1}^{300}T_b(\boldsymbol{x}) \tag{5} $$

若用户选择最大化,则内部目标按

$$ \tilde f(\boldsymbol{x})= \begin{cases} \hat f(\boldsymbol{x}), & \text{min}\\ -\hat f(\boldsymbol{x}), & \text{max} \end{cases} \tag{6} $$

转化为最小化问题。最终展示给用户的收敛曲线和最优值会再通过 display_curvepredict_actual 转回真实方向。

3. 核心数学模型

3.1 初始化与社会作用函数

第 \(r\) 次运行的初始群体按均匀分布生成:

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

项目采用的社会作用函数为

$$ s(z)=0.5e^{-z/1.5}-e^{-z} \tag{8} $$

这与 igoa.pyigoa_calculator.py 中的 _s_func 完全一致。

3.2 收缩因子与距离映射

第 \(t\) 轮的收缩因子按线性方式从 c_max 衰减到 c_min

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

对个体 \(i\) 和 \(j\),先计算欧氏距离

$$ D_{ij}^{(t)}=\left\|\boldsymbol{x}_{j}^{(t)}-\boldsymbol{x}_{i}^{(t)}\right\|_2 \tag{10} $$

再按项目实现中的 dist % 2 做改进映射:

$$ \zeta_{ij}^{(t)}=2+\big(D_{ij}^{(t)}\bmod 2\big) \tag{11} $$

单位方向向量定义为

$$ \boldsymbol{r}_{ij}^{(t)}= \frac{\boldsymbol{x}_{j}^{(t)}-\boldsymbol{x}_{i}^{(t)}}{D_{ij}^{(t)}+\varepsilon} \tag{12} $$

3.3 群体交互与位置更新

由第 \(j\) 只蝗虫对第 \(i\) 只蝗虫产生的作用项为

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

对全部邻居求和得到总社会作用

$$ \boldsymbol{S}_{i}^{(t)}=\sum_{j\ne i}\boldsymbol{s}_{ij}^{(t)} \tag{14} $$

设当前运行的历史最优位置为 \(\boldsymbol{x}_{best,r}^{(t)}\),则位置更新为

$$ \boldsymbol{x}_{i,r}^{(t+1)}= c^{(t)}\boldsymbol{S}_{i}^{(t)}+\boldsymbol{x}_{best,r}^{(t)} \tag{15} $$

随后执行逐维边界截断:

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

并用更优个体更新历史最优值

$$ g_r^{(t)}=\min_{1\le i\le N}\tilde f(\boldsymbol{x}_{i,r}^{(t)}) \tag{17} $$

3.4 多次独立运行统计

项目支持 \(R\) 次独立重复运行。若第 \(r\) 次运行最终最优值为 \(b_r\),则最佳运行编号为

$$ r^*=\operatorname*{arg\,min}_{1\le r\le R} b_r \tag{18} $$

并计算跨运行均值收敛曲线

$$ \bar g^{(t)}=\frac{1}{R}\sum_{r=1}^{R}g_r^{(t)} \tag{19} $$

以及逐轮上下包络

$$ g_{\min}^{(t)}=\min_r g_r^{(t)},\qquad g_{\max}^{(t)}=\max_r g_r^{(t)} \tag{20} $$

这些量在导出阶段分别对应 收敛曲线收敛曲线_全部运行汇总 等工作表。

4. 算法流程

结合 ui/upload_widget.pycore/igoa_calculator.py,本项目 IGOA 的流程为:

  1. 选择基准函数模式或上传代理优化模式。
  2. 若为上传模式,则读取数值表、识别目标列并训练随机森林代理模型。
  3. 若维度为奇数,则按式(2)扩展到偶数维工作空间。
  4. 对每次独立运行按式(7)初始化群体,并记录初始最优个体。
  5. 在每轮中按式(9)至式(15)计算社会作用并更新位置。
  6. 按式(16)处理边界,按式(17)更新该次运行的历史最优。
  7. 全部运行结束后按式(18)至式(20)汇总最佳运行和均值/范围曲线。
  8. 导出 Excel、均值收敛图、箱线图,以及在 dim=2 且目标函数不是 F7 时导出二维等高线轨迹图。

5. 关键参数说明

  • pop_size:种群规模 \(N\)。
  • max_iter:最大迭代次数 \(T\)。
  • n_runs:独立重复运行次数 \(R\)。
  • c_maxc_min:收缩因子上下界,对应式(9)。
  • seed:基础随机种子;第 \(r\) 次运行自动使用 seed + r
  • objective_direction:上传代理优化时的目标方向。

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

项目输出的重点不只是单次最优解,还包括多次运行统计。实际导出的主要工作表包括:

  • 运行汇总:每次运行的最优值、耗时和函数调用次数;
  • 收敛曲线:均值、最小值、最大值三条汇总曲线;
  • 收敛曲线_全部:每次运行逐轮收敛历史;
  • 最优轨迹:最佳运行中每轮最优位置轨迹;
  • 最佳解最佳适应度:最佳运行的解向量与最优值;
  • 参数边界设置结果解读图表清单:参数、边界和结果说明。

若为上传代理模式,结果文件还会追加 BoundsUploadedDataSurrogateMetrics,用于说明样本边界、上传数据预览与代理模型训练精度。论文结果部分建议先用 运行汇总 报告多次独立试验的 best_fitness 与耗时,再结合 收敛曲线收敛曲线_全部 展示总体收敛趋势与运行间波动,并把 最优轨迹 作为解释代表性最佳运行搜索路径的支撑图表。最佳解最佳适应度 在结果表达中也应分开引用。

7. 论文写作模板

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

“本文采用改进蝗虫优化算法求解连续变量优化问题。算法在标准 GOA 的基础上,使用距离余数映射 \(2+(D_{ij}\bmod 2)\) 调整个体间作用距离,并通过线性衰减因子控制全局搜索向局部开发的过渡。针对实验稳定性评估,本文实现并非只运行一次,而是执行多次独立重复试验,并汇总均值收敛曲线、最优值分布和最佳轨迹。”

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. 实现说明与注意事项

  • 用户界面实际调用的是 IGOACalculator,因此论文说明应以 calculator 的多次运行版本为准。
  • 奇数维问题会被临时补成偶数维计算,最终输出再截回原维度。
  • 上传模式下展示给用户的是代理模型预测值,而不是内部最小化后的符号翻转值。
  • 若目标函数为带噪的 F7,项目会跳过二维等高线轨迹图,以避免可视化解释失真。

9. 单篇终审补充

9.1 图题与表题对齐建议

  • 运行汇总 表可写为:表X IGOA 多次独立运行结果汇总。
  • 收敛曲线 表可写为:表X IGOA 均值、最小值与最大值收敛曲线。
  • 收敛曲线_全部 表可写为:表X IGOA 全部运行收敛历史。
  • 最优轨迹 表可写为:表X IGOA 最佳运行最优位置轨迹。
  • 最佳解 表可写为:表X IGOA 求得的最优解向量。
  • 最佳适应度 表可写为:表X IGOA 最终最优目标值。

9.2 终审说明

  • 该实现是多次运行版,正文可以写稳定性统计,但应明确这些统计来自重复运行而非单次轨迹平滑。
  • 若为上传代理模式,最优结果与 SurrogateMetrics 必须同步出现。

9.3 全量强化补充

本次全量强化优先绑定修复后的真实上传验证目录 具体的算法3/优化与多目标/IGOA-改进蝗虫优化/results/manual_upload_verify_20260328/igoa_sample_upload_real_after_fix/IGOA-改进蝗虫优化_结果_20260328_202107。主结果文件为 IGOA-改进蝗虫优化_结果_20260328_202107.xlsx,实际工作表为 参数边界设置运行汇总收敛曲线收敛曲线_全部最佳解最佳适应度最优轨迹结果解读图表清单初始群体最终群体BoundsUploadedDataSurrogateMetricsCharts

当前目录中没有额外图文件落在首层,但结果工作簿本身已经带有 Charts图表清单 两类索引页。因此正文引用时应优先按工作簿中的索引页组织图表,不要再沿用修复前目录的旧口径。

复现脚本为 repro_igoa.py,输入口径为 INPUT_FILE = Path('repro_inputs/igoa_sample.xlsx'),并显式采用 problem_mode = 'upload_surrogate'target_column = 'f_sphere'objective_direction = 'min'n_runs = 1。由于同级目录还保留 before_fix 版本,论文或说明文档中应固定引用 after_fix 目录,避免把修复前结果混入正式证据链。

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

本篇对应的软件源码目录是 具体的算法3/优化与多目标/IGOA-改进蝗虫优化。软件实现支持优化模式和上传数据代理优化模式;上传模式通过数值表训练代理目标后运行改进蝗虫优化。文档中的社会相互作用、收缩系数、局部扰动或改进搜索策略可以保留,但软件结果应以当前 IGOA_ParamsRun_SummaryHistory_MeanHistory_AllBest_Solution 为准。

当前较新的代表性目录为 results/IGOA-改进蝗虫优化分析结果_20260517_141927-优化模式results/IGOA-改进蝗虫优化分析结果_20260517_141941-上传数据代理优化。主工作簿 IGOA_results_*.xlsx 在优化模式下包含 字段说明SummaryProblemIGOA_ParamsBoundsRun_SummaryHistory_MeanHistory_AllBest_SolutionCharts;上传模式额外包含 UploadedProblemUploadedDataSurrogateMetrics。旧文中 after_fix 目录可作为历史修复证据,但当前较新目录已经提供标准化结果结构。

当前图表通常直接位于结果目录或复现输出目录下,例如 IGOA_convergence_时间戳.png,上传模式还会有 IGOA_preview_时间戳.png。复现代码位于 复现代码/优化模式/复现代码/上传数据代理优化/,上传模式输入副本为 repro_inputs/igoa_sample.xlsx,复现输出进入 repro_outputs/。如果说明上传代理模式,应把 SurrogateMetrics 与最优值一起解释,避免把代理模型搜索结果写成直接解析目标函数结果。