正在加载中...

展开本页目录
算法教程NGO-北方苍鹰优化

NGO-北方苍鹰优化

No.198 · 在线教程

NGO(Northern Goshawk Optimization)是一类模拟北方苍鹰“发现猎物 + 追逐逃逸”两阶段搜索行为的单目标优化算法。本项目的核心实现位于 NGO-北方苍鹰优化/core/ngo.py,上传数据代理优化由 ui/uploadwidget.py 完成,结…

NGO-北方苍鹰优化

1. 方法概述

NGO(Northern Goshawk Optimization)是一类模拟北方苍鹰“发现猎物 + 追逐逃逸”两阶段搜索行为的单目标优化算法。本项目的核心实现位于 NGO-北方苍鹰优化/core/ngo.py,上传数据代理优化由 ui/upload_widget.py 完成,结果导出则由 ui/results_widget.py 在展示阶段自动执行。项目当前以单次运行版本为主,不包含多次独立运行统计。

设第 \(i\) 只苍鹰在第 \(t\) 轮的位置为

$$ \boldsymbol{x}_i^{(t)}\in\Omega \tag{1} $$

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

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

2. 问题定义与代理优化

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

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

若目标方向为最大化,则内部目标改写为

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

样本特征极值给出搜索边界

$$ l_j=\min_n x_j^{(n)},\qquad u_j=\max_n x_j^{(n)} \tag{5} $$

并在结果展示阶段再把预测目标值恢复到真实方向。

3. 核心数学模型

3.1 初始化

苍鹰群体按均匀分布初始化:

$$ \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{x}_{best}^{(0)}= \operatorname*{arg\,min}_{1\le i\le N}\tilde f(\boldsymbol{x}_i^{(0)}) \tag{7} $$

3.2 第一阶段:识别猎物

对第 \(i\) 只苍鹰,项目随机选取一个参考个体 \(k\),令

$$ \boldsymbol{P}^{(t)}=\boldsymbol{x}_k^{(t)},\qquad I^{(t)}\in\{1,2\} \tag{8} $$

若当前个体适应度劣于参考个体,即 \(\tilde f(\boldsymbol{x}_i^{(t)})>\tilde f(\boldsymbol{P}^{(t)})\),则第一阶段候选为

$$ \boldsymbol{y}_{i,1}^{(t)}= \boldsymbol{x}_i^{(t)}+ \boldsymbol{r}_{i,1}^{(t)}\odot\big(\boldsymbol{P}^{(t)}-I^{(t)}\boldsymbol{x}_i^{(t)}\big) \tag{9} $$

否则使用

$$ \boldsymbol{y}_{i,1}^{(t)}= \boldsymbol{x}_i^{(t)}+ \boldsymbol{r}_{i,1}^{(t)}\odot\big(\boldsymbol{x}_i^{(t)}-\boldsymbol{P}^{(t)}\big) \tag{10} $$

其中 \(\boldsymbol{r}_{i,1}^{(t)}\sim U(0,1)^d\)。

3.3 第二阶段:追逐与逃逸

第二阶段首先计算随时间收缩的局部步长半径

$$ R^{(t)}=0.02\left(1-\frac{t}{T}\right) \tag{11} $$

再生成追逐与逃逸候选:

$$ \boldsymbol{y}_{i,2}^{(t)}= \boldsymbol{x}_i^{(t)}+ \big(2R^{(t)}\boldsymbol{r}_{i,2}^{(t)}-R^{(t)}\mathbf{1}\big)\odot \boldsymbol{x}_i^{(t)} \tag{12} $$

其中 \(\boldsymbol{r}_{i,2}^{(t)}\sim U(0,1)^d\)。

3.4 贪婪接受与边界处理

两个阶段的候选都采用边界截断:

$$ y_{ij,s}^{(t)}\leftarrow \min\!\big(\max(y_{ij,s}^{(t)},l_j),u_j\big), \qquad s\in\{1,2\} \tag{13} $$

并使用贪婪策略逐阶段接受:

$$ \boldsymbol{x}_i^{(t+\frac{1}{2})}= \begin{cases} \boldsymbol{y}_{i,1}^{(t)}, & \tilde f(\boldsymbol{y}_{i,1}^{(t)})<\tilde f(\boldsymbol{x}_i^{(t)})\\ \boldsymbol{x}_i^{(t)}, & \text{否则} \end{cases} \tag{14} $$

$$ \boldsymbol{x}_i^{(t+1)}= \begin{cases} \boldsymbol{y}_{i,2}^{(t)}, & \tilde f(\boldsymbol{y}_{i,2}^{(t)})<\tilde f(\boldsymbol{x}_i^{(t+\frac{1}{2})})\\ \boldsymbol{x}_i^{(t+\frac{1}{2})}, & \text{否则} \end{cases} \tag{15} $$

全局最优值更新为

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

项目将 \(\{g^{(t)}\}_{t=1}^{T}\) 记录为收敛曲线。

4. 算法流程

结合 core/ngo.pyui/upload_widget.pyui/results_widget.py,本项目 NGO 的流程为:

  1. 选择内置基准函数或上传代理优化模式。
  2. 若为上传模式,则训练随机森林代理模型并推断样本边界。
  3. 按式(6)初始化苍鹰群体并确定初始最优个体。
  4. 每轮随机选取参考猎物并执行式(9)或式(10)的第一阶段更新。
  5. 再按式(11)至式(12)执行第二阶段局部追逐。
  6. 两个阶段都按式(13)至式(15)进行截断和贪婪接受。
  7. 记录式(16)的收敛曲线。
  8. 结果页自动导出 Excel、收敛图和复现实验脚本。

5. 关键参数说明

  • population_size:苍鹰数量 \(N\)。
  • max_iter:最大迭代次数 \(T\)。
  • dim:问题维度。
  • random_state / seed:随机种子。
  • objective_direction:上传代理优化时的优化方向。

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

本项目当前是单次运行版本,实际导出的主要工作表包括:

  • Convergence:逐轮最优值曲线;
  • Best Solution:最终最优位置;
  • Parameters:问题名、模式、迭代次数、种群规模、维度、边界等;
  • Metrics:最佳适应度、首代值、末代值等;
  • Charts:收敛图路径。

上传模式下还会追加 UploadedDataSurrogateMetricsBounds_Detail

结果页会自动保存 APP_NAME分析结果_时间戳.xlsx 和对应的收敛图 PNG。论文结果部分建议按“Metrics 总结最优值与改进幅度、Convergence 展示搜索过程、Best Solution 给出最终决策变量”的顺序组织,其中 Best Solution 仅保存位置向量,最优目标值应以 Metrics 中的 best_fitness 为准。若为上传代理模式,还应把 SurrogateMetrics 与最优预测结果同时报告,以说明代理模型的可靠性。

7. 论文写作模板

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

“本文采用 Northern Goshawk Optimization 算法求解连续变量优化问题。算法包含两个串联阶段:第一阶段通过随机参考个体实现猎物识别与全局探索;第二阶段通过随迭代收缩的局部扰动半径执行追逐与逃逸搜索。本文实现中,两个阶段均采用边界截断与贪婪接受策略,并支持基于随机森林代理模型的上传数据优化模式。”

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

  • 本实现适用于连续变量单目标优化。
  • UI 线程实际调用 optimize(..., bounds_mode="lenient"),因此边界输入在运行时会尽量被纠正,而不是一律报错。
  • 结果导出不在 optimizer 内完成,而是在 results_widget.py 展示结果后自动触发。
  • 上传模式输出的是代理预测最优目标值,真实性依赖训练样本质量。

9. 单篇终审补充

9.1 图题与表题对齐建议

  • Metrics 表可写为:表X NGO 最优值与改进幅度摘要。
  • Parameters 表可写为:表X NGO 问题配置与算法参数。
  • Convergence 表可写为:表X NGO 单次运行收敛轨迹。
  • Best Solution 表可写为:表X NGO 求得的最优解向量。
  • Charts 中收敛图建议写为:图X 北方苍鹰优化算法收敛曲线。

9.2 终审说明

  • 该实现为单次运行版,正文不应写成多次独立运行均值统计。
  • 上传代理模式下,最优值解释必须和 SurrogateMetricsBounds_Detail 一起出现。

9.3 全量强化补充

本次全量强化绑定的真实结果目录为 具体的算法3/优化与多目标/NGO-北方苍鹰优化/results/NGO-北方苍鹰优化分析结果_20260329_171915。主结果文件为 NGO-北方苍鹰优化分析结果_20260329_171915.xlsx,实际工作表为 ConvergenceBest SolutionParametersMetricsCharts;主图文件为 NGO-北方苍鹰优化_convergence.png

这份目录是当前几篇里最干净的一种结构:一份主工作簿、一张主图、一个 repro_ngo.py,没有内层再生产物目录,也没有额外堆积的多轮时间戳文件。正文如果需要绑定工程证据,可以直接引用这三个对象,不必再做“主结果/再生产物”二次区分。

repro_ngo.py 当前使用的是 benchmark 口径:problem = 'sphere'population_size = 14max_iter = 20dim = 5,脚本内部直接调用 Benchmark.get_function(problem)Benchmark.get_bounds(problem, dim),没有 repro_inputs 或上传样本。因此这篇文档应明确写成 benchmark 实跑与复算,不要误写成上传代理模式。

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

本篇对应的软件源码目录是 具体的算法3/优化与多目标/NGO-北方苍鹰优化。当前软件实现支持优化模式和上传数据代理优化模式;上传模式把数值表训练成代理目标后再执行北方苍鹰搜索。文档中的迁徙、捕食、攻击和位置更新理论可以保留,但软件结果应以 NGO_ParamsRun_SummaryHistory_MeanHistory_AllBest_Solution 为准。

当前较新的代表性目录为 results/NGO-北方苍鹰优化分析结果_20260517_143925-优化模式results/NGO-北方苍鹰优化分析结果_20260517_143940-上传数据代理优化。主工作簿 NGO_results_*.xlsx 在优化模式下包含 字段说明SummaryProblemNGO_ParamsBoundsRun_SummaryHistory_MeanHistory_AllBest_SolutionCharts;上传模式额外包含 UploadedProblemUploadedDataSurrogateMetrics。这类结果与旧文中某些简单 benchmark 目录不同,当前交付说明应优先按新版结果结构解释。

当前图表一般直接位于 charts/ 或结果目录下,稳定输出包括 NGO_convergence_时间戳.pngNGO_preview_时间戳.png。复现代码位于 复现代码/优化模式/复现代码/上传数据代理优化/,上传模式输入副本为 repro_inputs/ngo_sample.xlsx,复现输出进入 repro_outputs/。如果后续正文要提及代理优化,就必须把 SurrogateMetrics 和结果文件一起引用。