正在加载中...

展开本页目录
算法教程POA-鹈鹕优化

POA-鹈鹕优化

No.200 · 在线教程

本项目实现的是 POA(Pelican Optimization Algorithm,鹈鹕优化算法)单目标连续优化版本,核心代码位于 POA-鹈鹕优化/core/calculator.py,界面实际调用链为 ui/poaparamswidget.py -> ui/poaresu…

POA-鹈鹕优化

1. 方法概述

本项目实现的是 POA(Pelican Optimization Algorithm,鹈鹕优化算法)单目标连续优化版本,核心代码位于 POA-鹈鹕优化/core/calculator.py,界面实际调用链为 ui/poa_params_widget.py -> ui/poa_results_widget.py。代码支持两类问题来源:

  • benchmark:内置 Sphere/Rastrigin/Ackley/Rosenbrock/Griewank
  • upload_surrogate:上传数据后训练随机森林代理,再在样本边界内搜索最优解。

项目内部求解的是最小化问题:

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

并支持 run_times 次独立运行,最终选择代表性最佳运行导出。

2. 问题定义与上传代理优化

在上传模式下,项目先对数值特征训练 RandomForestRegressor(n_estimators=300)

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

若界面选择最大化,则代码把内部目标写成

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

导出阶段再通过 predict_actualdisplay_curve 恢复为真实方向的预测值。上传模式的搜索边界直接取训练样本各特征维的最小值与最大值:

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

3. 核心数学模型

3.1 初始化

设种群规模为 \(N\)、维度为 \(d\)、最大迭代次数为 \(T\),则初始种群按均匀分布生成:

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

并记录当前全局最优个体

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

3.2 探索阶段:围绕随机食物个体更新

每轮先随机抽取一个食物个体 \(\boldsymbol{x}_{food}\)。对第 \(i\) 个个体,代码生成 \(I\in\{1,2\}\) 和随机数 \(r\sim U(0,1)\)。若当前个体劣于食物个体,则按

$$ \boldsymbol{x}_{i,new} = \boldsymbol{x}_i+r\big(\boldsymbol{x}_{food}-I\boldsymbol{x}_i\big) \tag{7} $$

更新;否则按

$$ \boldsymbol{x}_{i,new} = \boldsymbol{x}_i+r\big(\boldsymbol{x}_i-\boldsymbol{x}_{food}\big) \tag{8} $$

更新。新位置会被截断到边界内:

$$ \boldsymbol{x}_{i,new}\leftarrow \operatorname{clip}(\boldsymbol{x}_{i,new},\boldsymbol{l},\boldsymbol{u}) \tag{9} $$

并采用贪婪接受:

$$ \boldsymbol{x}_i\leftarrow \begin{cases} \boldsymbol{x}_{i,new}, & f(\boldsymbol{x}_{i,new})\le f(\boldsymbol{x}_i)\\ \boldsymbol{x}_i, & \text{otherwise} \end{cases} \tag{10} $$

3.3 开发阶段:水面振翅局部搜索

同一轮中,代码还会执行一次局部开发更新。对每个个体生成 \(\boldsymbol{r}_v\sim U(-1,1)^d\),并按

$$ \boldsymbol{x}_{i,new} = \boldsymbol{x}_i+ \omega\left(1-\frac{t}{T}\right)\boldsymbol{r}_v\odot \boldsymbol{x}_i \tag{11} $$

更新,其中 \(\omega\) 对应参数 water_factor。更新后同样执行边界截断与贪婪接受。

3.4 收敛记录与多次运行

第 \(t\) 轮结束后,项目记录当前全局最优值与种群平均适应度:

$$ c_{best}^{(t)}=\min_{1\le i\le N} f(\boldsymbol{x}_i^{(t)}), \qquad c_{avg}^{(t)}=\frac{1}{N}\sum_{i=1}^{N}f(\boldsymbol{x}_i^{(t)}) \tag{12} $$

若运行 \(R\) 次,则第 \(r\) 次使用随机种子

$$ \mathrm{seed}_r=\mathrm{seed}_0+r-1 \tag{13} $$

最终代表性最佳运行按最优值选择:

$$ r^\star= \begin{cases} \operatorname*{arg\,min}_{1\le r\le R} b_r, & \text{min}\\ \operatorname*{arg\,max}_{1\le r\le R} b_r, & \text{upload max} \end{cases} \tag{14} $$

其中 \(b_r\) 为第 \(r\) 次运行的最终最优值。

4. 算法流程

结合 core/calculator.pyutils/problem_definition.pyui/poa_params_widget.pyutils/poa_exporter.py,本项目 POA 的流程为:

  1. 选择内置基准函数或上传数据代理优化。
  2. 若为上传模式,则训练随机森林代理并读取逐维边界。
  3. 按式(5)初始化种群并评估适应度。
  4. 每轮先按式(7)至式(10)执行“围绕食物个体”的探索更新。
  5. 再按式(11)执行基于 water_factor 的局部开发。
  6. 记录 curve_bestcurve_avg
  7. run_times>1,汇总所有运行并按式(14)选出最佳运行。
  8. 导出 POA_results.xlsx、收敛曲线图、平均适应度曲线图和复现实验脚本 repro_poa.py

5. 关键参数说明

  • pop_size:种群规模。
  • max_iter:最大迭代次数。
  • water_factor:开发阶段的局部扰动强度。
  • run_times:独立运行次数。
  • seed:基础随机种子。
  • problem_modebenchmarkupload_surrogate

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

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

  • ParametersProcessed_Info:参数配置和处理后的问题信息;
  • Best_Summary:目标函数、维度、边界、best_runbest_fitnessmean_best_fitnessstd_best_fitness 等;
  • Best_Solution:最佳解向量;
  • Run_Best:每次运行的最终最优值;
  • History_BestRun:代表性最佳运行的收敛曲线;
  • AvgFitness_BestRun:代表性最佳运行的平均适应度曲线;
  • History_AllRunsAvgFitness_AllRuns:全部运行历史;
  • Raw_InfoCharts:原始信息与图表路径。

上传模式下还会导出 UploadedDataBoundsSurrogateMetrics

其中 curve_avg 是代码真实记录的群体平均适应度,而不是文献里常见的额外稳定性指标。论文结果部分可先用 Best_Summary 报告 best_fitness / mean_best_fitness / std_best_fitness,再结合 History_BestRunAvgFitness_BestRun 解释代表性最佳运行的收敛过程;若需要比较重复试验稳定性,则应引用 Run_BestHistory_AllRunsAvgFitness_AllRuns。同时,Best_Solution 只保存最优解向量,不应与最优值混写在同一表述中。

7. 论文写作模板

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

“本文采用 POA(Pelican Optimization Algorithm)进行单目标优化。算法在每次迭代中首先随机选择一个食物个体,并依据当前个体与食物个体的适应度关系执行探索更新;随后通过带有线性衰减系数的水面振翅扰动执行局部开发。对于数据驱动问题,本文进一步在上传样本上训练随机森林代理模型,并在样本逐维边界内实施 POA 搜索,从而得到预测目标意义下的最优解。”

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

  • 本实现是单目标 POA,适合连续变量优化,不包含多目标扩展。
  • 上传模式下确实支持 min/max 两种方向,并在导出阶段恢复真实预测值。
  • 需要特别注意:benchmark 模式虽然界面有“优化方向”选项,但 core/calculator.py 实际只按最小化执行,方向切换真正生效的是上传代理模式。
  • run_times>1,代码会输出均值和标准差;若 run_times=1std_best_fitness 固定为 0.0

9. 单篇终审补充

9.1 图题与表题对齐建议

  • Best_Summary 表可写为:表X POA 最佳运行与重复实验统计摘要。
  • Run_Best 表可写为:表X POA 各次运行最终最优值。
  • History_BestRun 表可写为:表X POA 代表性最佳运行收敛曲线。
  • AvgFitness_BestRun 表可写为:表X POA 代表性最佳运行平均适应度曲线。
  • History_AllRunsAvgFitness_AllRuns 可写为:表X POA 全部运行历史与平均适应度历史。
  • Best_Solution 表可写为:表X POA 求得的最优解向量。

9.2 终审说明

  • 这篇文档可以写多次运行统计,但应明确 Best_SummaryRun_BestHistory_AllRuns 的分工,不要把它们合并成一张泛化“Summary”表。
  • Best_Solution 只保存向量,不应与 best_fitness 混写。

9.3 全量强化补充

本次全量强化绑定的真实上传验证目录为 具体的算法3/优化与多目标/POA-鹈鹕优化/results/manual_upload_verify_20260325/POA-鹈鹕优化分析结果_20260325_manual。主结果文件为 POA_results.xlsx,实际工作表为 ParametersProcessed_InfoBest_SummaryBest_SolutionRun_BestHistory_BestRunAvgFitness_BestRunHistory_AllRunsAvgFitness_AllRunsRaw_InfoUploadedDataBoundsSurrogateMetricsCharts

当前真实图文件位于 charts/ 子目录,包括 convergence_best.pngconvergence_mean.pngavg_fitness_best.png。目录中还带有 results/POA_results.xlsxresults/repro_poa.py 作为复现再生产物,因此正文应固定引用首层 POA_results.xlsx 作为主实验结果。

复现脚本为 repro_poa.py,输入口径为 INPUT_FILE = Path('repro_inputs/poa_sample.csv'),并以 problem_mode = 'upload_surrogate'data_file = str(CURRENT_DIR / INPUT_FILE) 运行。因此这篇文档应明确写成“上传代理 POA 复现”,并保留 AvgFitness_BestRun 这一真实工程输出,不要把它误写成文献中的标准指标。

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

本篇对应的软件源码目录是 具体的算法3/优化与多目标/POA-鹈鹕优化。软件实现支持优化模式和上传数据代理优化模式;上传模式读取数值表后训练代理模型,再由鹈鹕优化搜索。文档中的盘旋、俯冲、碰撞和边界处理公式可以保留,但软件结果应以 POA_ParamsRun_SummaryHistory_MeanHistory_AllBest_Solution 解释。

当前较新的代表性目录为 results/POA-鹈鹕优化分析结果_20260517_144030-优化模式results/POA-鹈鹕优化分析结果_20260517_144045-上传数据代理优化。主工作簿通常包含 SummaryProblemPOA_ParamsBoundsRun_SummaryHistory_MeanHistory_AllBest_SolutionCharts;上传模式额外包含 UploadedProblemUploadedDataSurrogateMetrics。这表明当前版本已经支持相对规范的工程导出,不要再只写理论公式而忽略结果结构。

当前图表稳定输出为 POA_convergence_时间戳.pngPOA_best_solution_时间戳.png。复现代码位于 复现代码/优化模式/复现代码/上传数据代理优化/,上传模式输入副本为 repro_inputs/poa_sample.xlsx,复现输出进入 repro_outputs/。如果正文讨论上传代理模式,应把目标列和代理指标一起说明,而不是只说“鹈鹕优化结果更优”。