正在加载中...

展开本页目录
算法教程HHO-鹰群优化

HHO-鹰群优化

No.191 · 在线教程

HHO(Harris Hawks Optimization)是一类模拟哈里斯鹰围捕猎物过程的群智能算法。本项目的核心实现位于 HHO-鹰群优化/core/hho.py,上传代理优化与结果导出分别由 ui/uploadwidget.py、utils/hhoexporter.py …

HHO-鹰群优化

1. 方法概述

HHO(Harris Hawks Optimization)是一类模拟哈里斯鹰围捕猎物过程的群智能算法。本项目的核心实现位于 HHO-鹰群优化/core/hho.py,上传代理优化与结果导出分别由 ui/upload_widget.pyutils/hho_exporter.py 完成。代码实现是标准单次 HHO 流程,但支持上传数据后训练随机森林代理模型再执行搜索。

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

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

当前全局最优猎物位置记为

$$ \boldsymbol{x}_r^{(t)}=\operatorname*{arg\,min}_{1\le i\le N}\tilde f(\boldsymbol{x}_i^{(t)}) \tag{2} $$

其中 \(\tilde f\) 为内部最小化目标函数。

2. 问题定义与代理优化

上传模式下,项目先读取数值样本

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

并训练 300 棵树的随机森林代理:

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

各维边界取样本极值:

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

若用户选择最大化,则内部目标同样转写为

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

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{7} $$

猎物逃逸能量的衰减主因子为

$$ E_1^{(t)}=2\left(1-\frac{t}{T}\right) \tag{8} $$

随机因子为

$$ E_0^{(t)}=2u_t-1,\qquad u_t\sim U(0,1) \tag{9} $$

两者相乘得到实际逃逸能量

$$ E^{(t)}=E_1^{(t)}E_0^{(t)} \tag{10} $$

当 \(|E^{(t)}|\ge 1\) 时进入探索阶段,否则进入开发阶段。

3.2 探索阶段

若随机数 \(q<0.5\),代码采用“基于家族成员栖息”的更新:

$$ \boldsymbol{x}_i^{(t+1)} = \boldsymbol{x}_{rand}^{(t)}- r_1\left|\boldsymbol{x}_{rand}^{(t)}-2r_2\boldsymbol{x}_i^{(t)}\right| \tag{11} $$

其中 \(\boldsymbol{x}_{rand}^{(t)}\) 是随机选中的同群个体。

若 \(q\ge 0.5\),则采用“随机高树栖息”策略:

$$ \boldsymbol{x}_i^{(t+1)} = \left(\boldsymbol{x}_r^{(t)}-\bar{\boldsymbol{x}}^{(t)}\right) -r_3\big((\boldsymbol{u}-\boldsymbol{l})r_4+\boldsymbol{l}\big) \tag{12} $$

其中 \(\bar{\boldsymbol{x}}^{(t)}\) 为当前鹰群均值。

3.3 开发阶段的四种围捕

设跳跃强度为

$$ J^{(t)}=2(1-r_t) \tag{13} $$

若 \(r\ge 0.5\) 且 \(|E^{(t)}|\ge 0.5\),则执行软包围:

$$ \boldsymbol{x}_i^{(t+1)} = (\boldsymbol{x}_r^{(t)}-\boldsymbol{x}_i^{(t)}) -E^{(t)}\left|J^{(t)}\boldsymbol{x}_r^{(t)}-\boldsymbol{x}_i^{(t)}\right| \tag{14} $$

若 \(r\ge 0.5\) 且 \(|E^{(t)}|<0.5\),则执行硬包围:

$$ \boldsymbol{x}_i^{(t+1)} = \boldsymbol{x}_r^{(t)}-E^{(t)}\left|\boldsymbol{x}_r^{(t)}-\boldsymbol{x}_i^{(t)}\right| \tag{15} $$

若 \(r<0.5\) 且 \(|E^{(t)}|\ge 0.5\),则先生成软包围候选

$$ \boldsymbol{X}_1= \boldsymbol{x}_r^{(t)}-E^{(t)}\left|J^{(t)}\boldsymbol{x}_r^{(t)}-\boldsymbol{x}_i^{(t)}\right| \tag{16} $$

若 \(\tilde f(\boldsymbol{X}_1)\) 没有优于当前个体,则引入快速俯冲候选

$$ \boldsymbol{X}_2= \boldsymbol{x}_r^{(t)}-E^{(t)}\left|J^{(t)}\boldsymbol{x}_r^{(t)}-\boldsymbol{x}_i^{(t)}\right| +\boldsymbol{\xi}^{(t)}\odot \boldsymbol{L}^{(t)} \tag{17} $$

其中 \(\boldsymbol{\xi}^{(t)}\sim \mathcal N(\boldsymbol{0},\boldsymbol{I})\)。

若 \(r<0.5\) 且 \(|E^{(t)}|<0.5\),则先生成硬包围候选

$$ \boldsymbol{X}_1= \boldsymbol{x}_r^{(t)}-E^{(t)}\left|J^{(t)}\boldsymbol{x}_r^{(t)}-\bar{\boldsymbol{x}}^{(t)}\right| \tag{18} $$

若其不优,则再生成

$$ \boldsymbol{X}_2= \boldsymbol{x}_r^{(t)}-E^{(t)}\left|J^{(t)}\boldsymbol{x}_r^{(t)}-\bar{\boldsymbol{x}}^{(t)}\right| +\boldsymbol{\xi}^{(t)}\odot \boldsymbol{L}^{(t)} \tag{19} $$

其中 Lévy 步长由 _levy() 给出,满足

$$ \boldsymbol{L}^{(t)}=\frac{0.01\,\sigma\,\boldsymbol{u}}{|\boldsymbol{v}|^{1/\beta}}, \qquad \beta=1.5,\ \boldsymbol{u},\boldsymbol{v}\sim\mathcal N(\boldsymbol{0},\boldsymbol{I}) \tag{20} $$

3.4 边界与收敛记录

每轮适应度计算前,项目统一进行边界裁剪:

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

收敛曲线记录当前猎物能量

$$ g^{(t)}=\tilde f(\boldsymbol{x}_r^{(t)}) \tag{22} $$

4. 算法流程

根据 core/hho.py 与上传界面代码,本项目 HHO 的执行步骤为:

  1. 选择内置函数或上传数据代理优化模式。
  2. 若为上传模式,则训练随机森林代理模型并确定样本边界。
  3. 按式(7)初始化鹰群,并识别当前猎物位置。
  4. 计算式(8)至式(10)的逃逸能量。
  5. 若 \(|E|\ge 1\),执行式(11)或式(12)的探索更新。
  6. 若 \(|E|<1\),依据随机分支执行式(14)至式(19)的四种围捕之一。
  7. 对候选位置进行边界截断、择优接受,并记录式(22)的收敛曲线。
  8. 导出 Excel、收敛图以及 repro_hho.py 复现实验脚本。

5. 关键参数说明

  • pop_size:鹰群规模 \(N\)。
  • iters / max_iter:最大迭代次数 \(T\)。
  • dim:问题维度。
  • lbub:搜索边界。
  • objective_direction:上传模式下的优化方向。
  • random_state:训练代理模型时的随机种子。

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

本项目以单次运行结果为主,实际导出的主要工作表包括:

  • Parametersproblem_modefunctionpop_sizeitersdimlbub 等问题配置;上传模式下还会写入 source_filetarget_columnobjective_directionfeature_columnsn_samplesrandom_state
  • Summarybest_fitnessbest_solution_dimcurve_length 等摘要;上传模式下还会并入代理模型训练指标;
  • BestSolution:最优解向量,仅含 varvalue 两列,最优适应度不在该表重复写入;
  • Convergenceiterbest_fitness 收敛轨迹;
  • Charts:图表路径索引。

上传模式下还会追加 BoundsUploadedDataSurrogateMetrics

若为上传代理优化,则界面显示的是代理预测目标值,而不是内部符号翻转后的 \(\tilde f\)。

因此,论文结果部分更适合采用“Summary 报告最优值、Convergence 展示收敛轨迹、BestSolution 列出最优解向量”的组织方式,其中 BestSolution 只保存决策变量,不重复写入最优目标值。若为上传代理模式,还应把 SurrogateMetrics 与最终最优预测结果同时给出。

7. 论文写作模板

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

“本文采用 Harris Hawks Optimization 算法求解连续变量单目标优化问题。算法通过猎物逃逸能量在探索与开发之间切换:当逃逸能量较大时,个体围绕随机成员或随机高树进行全局探索;当逃逸能量较小时,算法进入软包围、硬包围及带 Lévy 快速俯冲的局部开发阶段。为适应数据驱动场景,本文实现还支持先训练随机森林代理模型,再由 HHO 在样本边界内搜索最优解。”

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

  • 本实现适用于连续变量单目标问题。
  • 快速俯冲分支并不是无条件接受,而是先比较 \(\boldsymbol{X}_1\)、再比较 \(\boldsymbol{X}_2\) 是否优于当前个体。
  • Lévy 步长前额外乘了 0.01,因此实际俯冲幅度比部分文献公式更保守。
  • 当前项目未在 HHO 层面实现多次独立运行统计。

9. 单篇终审补充

9.1 图题与表题对齐建议

  • Parameters 表可写为:表X HHO 问题配置与算法参数。
  • Summary 表可写为:表X HHO 最优值摘要。
  • BestSolution 表可写为:表X HHO 求得的最优解向量。
  • Convergence 表可写为:表X HHO 单次运行收敛轨迹。
  • Charts 中收敛图建议写为:图X 鹰群优化算法收敛曲线。

9.2 终审说明

  • 当前实现没有多次独立运行统计,正文不宜写平均最优值和标准差,除非另行补做实验。
  • 上传代理模式下,界面展示的是恢复后的代理预测值,不是内部符号翻转值。

9.3 全量强化补充

本次全量强化绑定的真实结果目录为 具体的算法3/优化与多目标/HHO-鹰群优化/results/HHO_结果_20260324_204556。主结果文件为 HHO_结果_20260324_204556.xlsx,实际工作表为 ParametersSummaryBestSolutionConvergenceCharts;当前主图文件为 charts/convergence_curve.png

该目录还存在两层内部再生产物:HHO_结果_20260324_204558/HHO_结果_20260324_204647/,它们各自又包含新的工作簿、charts/convergence_curve.pngrepro_hho.py。这说明 HHO 的 repro 在主结果目录内部继续生成新的时间戳子目录,而不是输出到完全独立的外层目录。

repro_hho.py 当前采用的是真实 benchmark 口径:FUNC_NAME = 'F1',参数为 pop_size = 12iters = 24,随后直接调用 save_hho_results(result_data, out_dir)。因此这篇文档应明确区分外层 204556 主结果与内层 204558/204647 再生产物。正式写作时如果只引用主实验,应固定使用外层工作簿和外层 charts/convergence_curve.png,不要把内层再次生成目录误认为主程序原始导出。

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

本篇对应的软件源码目录是 具体的算法3/优化与多目标/HHO-鹰群优化。当前软件实现支持优化模式和上传数据代理优化模式;上传模式读取 csv/xlsx/xls 数值表后训练代理模型,再由 HHO 执行逃逸能量、软/硬围攻和快速俯冲等搜索过程。文档中的哈里斯鹰理论公式可以保留,但软件结果应按 HHO_ParamsProblem.problem_modeConvergence 表解释。

当前较新的代表性目录为 results/HHO-鹰群优化分析结果_20260517_133810-优化模式results/HHO-鹰群优化分析结果_20260517_133824-上传数据代理优化。主工作簿 HHO_results_*.xlsx 在优化模式下包含 结果摘要结果说明字段说明SummaryProblemHHO_ParamsBoundsRun_SummaryHistory_MeanHistory_AllBest_SolutionChartsConvergence;上传模式额外包含 UploadedProblemUploadedDataSurrogateMetrics。这说明当前较新版本已经具备多次运行历史表,不应再沿用旧文“没有多次独立运行统计”的绝对表述。

当前图表通常直接位于结果目录或复现输出目录下,例如 HHO_convergence_时间戳.png。复现代码位于 复现代码/优化模式/复现代码/上传数据代理优化/,上传模式输入副本为 repro_inputs/hho_sample.xlsx,复现输出进入 repro_outputs/。旧文中嵌套时间戳目录的历史结果可以保留,但当前交付说明应优先绑定 20260517 新目录和统一工作表结构。