GTO-大猩猩优化
大猩猩优化算法(Gorilla Troops Optimization, GTO)是一类模拟大猩猩群体迁移、竞争和跟随银背行为的群智能方法。本项目的核心实现位于 GTO-大猩猩优化/core/gto.py,基准函数批量运行与结果汇总由 core/gtorunner.py 完成;…
GTO-大猩猩优化
1. 方法概述
大猩猩优化算法(Gorilla Troops Optimization, GTO)是一类模拟大猩猩群体迁移、竞争和跟随银背行为的群智能方法。本项目的核心实现位于 GTO-大猩猩优化/core/gto.py,基准函数批量运行与结果汇总由 core/gto_runner.py 完成;同时,ui/upload_widget.py 还额外实现了上传数据后的代理优化流程,并复用了同一套 GTOOptimizer 搜索器。
设第 \(i\) 只大猩猩在第 \(t\) 轮的位置为
$$ \boldsymbol{x}_i^{(t)}=(x_{i1}^{(t)},x_{i2}^{(t)},\ldots,x_{id}^{(t)})^\top\in\Omega \tag{1} $$
群体中当前最优个体称为银背大猩猩(Silverback),记作
$$ \boldsymbol{x}_{sb}^{(t)}=\operatorname*{best}_{1\le i\le N}\boldsymbol{x}_i^{(t)} \tag{2} $$
其中 best 由 minmax 决定,最小化时取最小,最大化时取最大。
2. 问题定义
项目求解的基本问题为
$$ \operatorname*{best}_{\boldsymbol{x}\in\Omega} f(\boldsymbol{x}) \tag{3} $$
其中 \(\Omega=[l,u]^d\) 为统一标量边界扩展而成的连续空间。需要注意的是:run_gto 主要负责内置测试函数批量运行;而上传代理优化并不是写在 run_gto 内,而是由 ui/upload_widget.py 中的 _run_upload_surrogate() 单独实现。
在上传代理优化模式下,系统会先基于上传样本训练随机森林代理模型,并在样本逐维边界内调用 GTOOptimizer.optimize(..., minmax='min') 执行搜索;最终再通过 predict_actual() 和 display_curve() 把结果恢复为用户选定的目标方向。
3. 核心数学模型
3.1 初始化
设种群规模为 \(N\)。项目按均匀分布初始化全部个体:
$$ \boldsymbol{x}_i^{(0)}=l+\boldsymbol{r}_i\odot(u-l),\qquad \boldsymbol{r}_i\sim U(0,1)^d \tag{4} $$
并计算初始适应度
$$ F_i^{(t)}=f(\boldsymbol{x}_i^{(t)}) \tag{5} $$
最优个体初始化为银背:
$$ \boldsymbol{x}_{sb}^{(0)}=\operatorname*{best}_{1\le i\le N}\boldsymbol{x}_i^{(0)} \tag{6} $$
3.2 控制参数
在第 \(t\) 轮迭代中,项目先生成控制参数
$$ a^{(t)}=\big(\cos(2u_t)+1\big)\left(1-\frac{t}{T}\right),\qquad u_t\sim U(0,1) \tag{7} $$
以及
$$ C^{(t)}=a^{(t)}\big(2v_t-1\big),\qquad v_t\sim U(0,1) \tag{8} $$
其中 \(T\) 为最大迭代次数。
3.3 探索阶段
探索阶段包含三种分支。
3.3.1 随机探索
若随机数小于参数 \(p\),则个体直接在全空间内随机迁移:
$$ \boldsymbol{x}_i^{(t+1)}=l+\boldsymbol{r}_i^{(t)}\odot(u-l) \tag{9} $$
3.3.2 Z-based movement
若未触发随机探索,且另一随机判断满足条件,则先生成
$$ \boldsymbol{Z}_i^{(t)}\sim U(-a^{(t)},a^{(t)})^d \tag{10} $$
并定义
$$ \boldsymbol{H}_i^{(t)}=\boldsymbol{Z}_i^{(t)}\odot \boldsymbol{x}_i^{(t)} \tag{11} $$
然后选取随机个体 \(r\),更新为
$$ \boldsymbol{x}_i^{(t+1)}= \big(u_i^{(t)}-a^{(t)}\big)\boldsymbol{x}_r^{(t)}+C^{(t)}\boldsymbol{H}_i^{(t)} \tag{12} $$
其中 \(u_i^{(t)}\sim U(0,1)\)。
3.3.3 C-based movement
另一探索分支中,代码会随机选取两个参考个体 \(r_1,r_2\),并按
$$ \boldsymbol{x}_i^{(t+1)}= \boldsymbol{x}_i^{(t)}- C^{(t)}\Big( C^{(t)}\big(\boldsymbol{x}_i^{(t)}-\boldsymbol{g}_{r_1}^{(t)}\big) + u_i^{(t)}\big(\boldsymbol{x}_i^{(t)}-\boldsymbol{g}_{r_2}^{(t)}\big) \Big) \tag{13} $$
执行更新,其中 \(\boldsymbol{g}_{r_1}^{(t)}\)、\(\boldsymbol{g}_{r_2}^{(t)}\) 对应代码中的 GX[random_idx]。
3.4 开发阶段
项目中的开发阶段由参数 \(a^{(t)}\) 与阈值 \(w\) 控制。
3.4.1 Delta-based movement
若 \(a^{(t)}\ge w\),则先计算
$$ g^{(t)}=2^{C^{(t)}} \tag{14} $$
以及群体均值构造的 \(\Delta\) 项
$$ \boldsymbol{\delta}^{(t)}= \left(\left|\frac{1}{N}\sum_{i=1}^{N}\boldsymbol{g}_i^{(t)}\right|^{g^{(t)}}\right)^{1/g^{(t)}} \tag{15} $$
随后更新为
$$ \boldsymbol{x}_i^{(t+1)}= C^{(t)}\boldsymbol{\delta}^{(t)}\odot \big(\boldsymbol{x}_i^{(t)}-\boldsymbol{x}_{sb}^{(t)}\big)+\boldsymbol{x}_i^{(t)} \tag{16} $$
3.4.2 Beta-based movement
若 \(a^{(t)}<w\),则进入银背引导的局部开发。设 \(r_1\sim U(0,1)\),\(\boldsymbol{h}\) 为标准正态随机变量,则更新为
$$ \boldsymbol{x}_i^{(t+1)}= \boldsymbol{x}_{sb}^{(t)}- \Big(\boldsymbol{x}_{sb}^{(t)}(2r_1-1)-\boldsymbol{x}_i^{(t)}(2r_1-1)\Big)\odot(\beta \boldsymbol{h}) \tag{17} $$
其中 \(\beta\) 对应代码参数 Beta。
3.5 边界处理与群体重组
每个阶段后,项目均对新位置执行截断边界处理:
$$ x_{ij}^{(t+1)}\leftarrow \min\!\big(\max(x_{ij}^{(t+1)},l),u\big) \tag{18} $$
随后采用贪婪接受策略:
$$ \boldsymbol{x}_i^{(t+1)}= \begin{cases} \boldsymbol{g}_i^{(t+1)}, & \text{若新解更优}\\ \boldsymbol{x}_i^{(t)}, & \text{否则} \end{cases} \tag{19} $$
若某个新解优于当前银背,则同步更新银背位置与适应度。
3.6 收敛记录
第 \(t\) 轮的全局最优值记为
$$ g^{(t)}=\operatorname*{best}_{1\le i\le N}F_i^{(t)} \tag{20} $$
项目记录 best_fitness、mean_fitness、worst_fitness 以及最佳运行收敛曲线,并在 run_gto 中汇总多次独立运行统计。
4. 算法流程
根据 GTOOptimizer.optimize 与 run_gto,本项目的 GTO 求解步骤为:
- 初始化种群并确定银背大猩猩。
- 在每轮中计算控制参数 \(a^{(t)}\) 和 \(C^{(t)}\)。
- 执行探索阶段的三种候选更新之一。
- 对新个体做边界截断并进行群体重组。
- 根据 \(a^{(t)}\) 与阈值 \(w\) 进入 Delta-based 或 Beta-based 开发阶段。
- 再次进行边界截断与贪婪接受。
- 记录每轮最优、均值、最差适应度;若
runs>1,则汇总多次运行结果。
5. 关键参数说明
pop_size:大猩猩数量 \(N\)。max_iter:最大迭代次数 \(T\)。p:随机探索概率,对应式(9)触发条件。beta:局部开发强度,对应式(17)中的 \(\beta\)。w:开发阶段切换阈值。runs:独立重复运行次数。seed:随机种子,第 \(r\) 次运行采用seed + r。
6. 评价指标与输出结果解释
设共有 \(R\) 次独立运行,第 \(r\) 次运行最终最优值为 \(b_r\),则项目会形成运行汇总表:
$$ b_{\mathrm{best}}= \begin{cases} \min_{1\le r\le R}b_r, & \text{最小化}\\ \max_{1\le r\le R}b_r, & \text{最大化} \end{cases} \tag{21} $$
并对全部历史按相同迭代轮求均值,形成
$$ \bar{g}^{(t)}=\frac{1}{R}\sum_{r=1}^{R}g_r^{(t)} \tag{22} $$
实际导出的主要工作表包括:
Summary:最佳适应度、运行次数和目标信息等摘要;Problem、GTO_Params:问题配置与大猩猩优化参数;Bounds:变量边界;Run_Summary:每次运行的最优值;History_Mean:跨运行均值历史;History_All:全部运行历史;Best_Solution:最佳运行的解向量;Convergence:最佳运行收敛曲线;Charts:图表路径。
上传代理模式下还会追加 UploadedData、SurrogateMetrics;此时结果中的 best_fitness 与收敛曲线已经在 UI 层恢复为原始目标方向。
论文结果部分可按“Summary 与 Run_Summary 报告多次运行统计、History_Mean/History_All 说明稳定性、Convergence 与 Best_Solution 展示代表性最佳运行”的顺序组织。若为上传代理模式,正文中应明确最优值和收敛曲线已经恢复为原始目标方向,并配套报告 SurrogateMetrics。
7. 论文写作模板
可在论文方法部分表述为:
“本文采用大猩猩优化算法对连续变量单目标问题进行求解。算法首先随机初始化种群,并将当前全局最优个体记为银背大猩猩。每轮迭代先执行探索阶段,包括全局随机迁移、基于随机群体成员的 Z 型移动以及基于群体差分的 C 型移动;随后根据控制参数与阈值关系进入开发阶段,采用 Delta-based 或 Beta-based 策略围绕银背大猩猩进行局部搜索。本文实现中,每个阶段结束后均对新解进行边界截断和贪婪接受,并对多次独立运行结果进行均值汇总,以评估算法稳定性。”
7.1 结果部分补充模板
若需把实验结果直接写入论文结果部分,可进一步表述为:
“表X给出了算法在当前问题上的最优目标值、平均最优值和标准差(如有多次独立运行),图X展示了收敛曲线变化。结果表明,该算法在迭代前期能够快速逼近优势区域,并在后期逐步趋于稳定,最终获得最优解 \(\boldsymbol{x}^*\) 及其对应目标值 \(f(\boldsymbol{x}^*)\)。对于上传代理优化场景,结合代理模型误差指标可认为该最优结果具有一定的数据驱动解释性。”
7.2 写作替换提示
为便于直接落稿,正文撰写时可将结果文件中的字段替换为以下论文措辞:
best_fitness或结果汇总表中的最优值,可写为“最优目标函数值”或“最优适应度值”;BestSolution、BestPosition、Best_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. 实现说明与注意事项
- 本实现适用于连续变量单目标优化。
GX在探索和开发阶段都被复用,实际更新与某些文献中的分离写法存在细微差别,应以项目代码为准。- 参数
p过大时随机探索会明显增强,可能延缓后期收敛;beta和w则主要影响局部开发力度。 run_gto主要服务于内置基准函数批量运行,但当前桌面 UI 已额外支持上传数据代理优化,并沿用同一套 GTO 核心搜索器。
9. 单篇终审补充
9.1 图题与表题对齐建议
Run_Summary表可写为:表X GTO 多次独立运行结果汇总。History_Mean表可写为:表X GTO 平均收敛曲线。History_All表可写为:表X GTO 全部运行历史。Convergence表可写为:表X GTO 最佳运行收敛曲线。Best_Solution表可写为:表X GTO 最佳运行最优解向量。Charts中收敛图建议写为:图X 大猩猩优化算法收敛曲线。
9.2 终审说明
- 正文中若写总体统计,应优先引用
Run_Summary,不要把它泛化写成未导出的Summary主表。 - 上传代理模式下,需明确
best_fitness与收敛曲线已恢复为原始目标方向。
9.3 全量强化补充
本次全量强化绑定的真实结果目录为 具体的算法3/优化与多目标/GTO-大猩猩优化/results/window3_baseline_test_window3_singleobj_extende6_gto。当前可作为主结果引用的工作簿为 GTO_results_20260329_171854.xlsx,实际工作表为 Summary、Problem、GTO_Params、Bounds、Run_Summary、History_Mean、History_All、Best_Solution、Convergence、Charts。
该目录中保存了大量连续时间戳结果和对应收敛图,说明它是 baseline/回归过程中反复运行后累计下来的结果池。本次文档建议固定引用最后一轮 GTO_results_20260329_171854.xlsx 与 GTO_convergence_20260329_171854.png,并在正文中说明同目录还有较多历史产物,不宜把所有时间戳混写成一轮实验结果。
复现脚本 repro_gto.py 的真实口径是 benchmark 基准函数:objective_name = 'F1'、runs = 2,并通过 run_gto(problem, gto) 后在当前目录再次 save_results()。因此 GTO 这一篇当前绑定的是“benchmark 多次运行统计”链路,而不是 repro_inputs 数据驱动链路。论文中若引用 Run_Summary、History_Mean、History_All,应明确它们对应的是 benchmark 两次运行汇总。
10. 软件实现核查补充(2026-07)
本篇对应的软件源码目录是 具体的算法3/优化与多目标/GTO-大猩猩优化。软件实现支持优化模式和上传数据代理优化模式;上传模式额外导出代理问题和代理指标。理论部分关于探索、跟随银背、竞争和开发阶段的更新公式可以保留,但软件当前结果要按 GTO_Params、Raw_Config、Run_Summary、History_Mean、History_All、Best_Trace 和 Best_Solution 解释。
当前较新的代表性目录为 results/GTO-大猩猩优化分析结果_20260517_134714-优化模式 与 results/GTO-大猩猩优化分析结果_20260517_134731-上传数据代理优化。主工作簿包含 结果说明、Summary、Problem、GTO_Params、Raw_Config、Bounds、Run_Summary、稳定性统计、History_Mean、History_All、Convergence_Curves、Convergence、Best_Trace、Best_Solution、Initial_Population、Final_Population、Charts 以及中文兼容表;上传模式额外包含 UploadedProblem、UploadedData、SurrogateMetrics。因此这篇文档应说明 GTO 结果表比普通优化算法更详细,包含初末种群和最佳轨迹。
当前图表稳定输出为 charts/convergence.png 和 charts/best_position.png。复现代码位于 复现代码/优化模式/ 或 复现代码/上传数据代理优化/,上传模式输入副本为 repro_inputs/gto_sample.xlsx,复现结果进入 repro_outputs/。旧文绑定的 baseline 结果池可保留为历史证据,但当前用户交付说明应优先使用 20260517 的标准结果目录和上传代理结果。