WOA-鲸鱼优化
本项目实现的是 WOA(Whale Optimization Algorithm,鲸鱼优化)单目标连续优化版本,核心代码位于 WOA-鲸鱼优化/core/woacalculator.py,界面调用链为 ui/uploadwidget.py -> ui/resultswidget…
WOA-鲸鱼优化
1. 方法概述
本项目实现的是 WOA(Whale Optimization Algorithm,鲸鱼优化)单目标连续优化版本,核心代码位于 WOA-鲸鱼优化/core/woa_calculator.py,界面调用链为 ui/upload_widget.py -> ui/results_widget.py。项目支持:
benchmark:内置基准函数;upload_surrogate:上传数据后的代理优化;runs>1的多次独立运行;clip/midpoint/random三种边界处理方式。
项目求解的一般问题可写为
$$ \operatorname*{opt}_{\boldsymbol{x}\in\Omega} f(\boldsymbol{x}), \qquad \operatorname*{opt}\in\{\min,\max\} \tag{1} $$
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})= \begin{cases} \hat f(\boldsymbol{x}), & \text{min}\\ -\hat f(\boldsymbol{x}), & \text{max} \end{cases} \tag{3} $$
导出时再把最优值与收敛曲线恢复为真实方向。上传模式的边界由样本逐维极值决定:
$$ l_j=\min_n x_j^{(n)}, \qquad u_j=\max_n x_j^{(n)} \tag{4} $$
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{5} $$
全局领航者为当前最优个体:
$$ \boldsymbol{x}_{leader}^{(0)}=\operatorname*{arg\,min}_{1\le i\le N}\tilde f(\boldsymbol{x}_i^{(0)}) \tag{6} $$
3.2 系数更新
代码中第 \(t\) 轮(从 0 开始计数)的核心系数为
$$ a=2-\frac{2t}{T}, \qquad a_2=-1-\frac{t}{T} \tag{7} $$
并进一步构造
$$ \boldsymbol{A}=2a\boldsymbol{r}_1-a, \qquad \boldsymbol{C}=2\boldsymbol{r}_2 \tag{8} $$
其中 \(\boldsymbol{r}_1,\boldsymbol{r}_2\sim U(0,1)^d\)。
3.3 包围猎物与随机搜索
若 \(p<0.5\) 且 \(|\boldsymbol{A}|\ge 1\),则鲸鱼围绕随机个体搜索:
$$ \boldsymbol{x}_i^{new} = \boldsymbol{x}_{rand} -\boldsymbol{A}\odot\left|\boldsymbol{C}\odot\boldsymbol{x}_{rand}-\boldsymbol{x}_i\right| \tag{9} $$
若 \(p<0.5\) 且 \(|\boldsymbol{A}|<1\),则围绕当前领航者收缩包围:
$$ \boldsymbol{x}_i^{new} = \boldsymbol{x}_{leader} -\boldsymbol{A}\odot\left|\boldsymbol{C}\odot\boldsymbol{x}_{leader}-\boldsymbol{x}_i\right| \tag{10} $$
3.4 螺旋气泡网更新
若 \(p\ge 0.5\),则采用螺旋更新。代码中
$$ l=(a_2-1)r+1, \qquad r\sim U(0,1) \tag{11} $$
螺旋搜索位置为
$$ \boldsymbol{x}_i^{new} = \left|\boldsymbol{x}_{leader}-\boldsymbol{x}_i\right| \exp(bl)\cos(2\pi l) +\boldsymbol{x}_{leader} \tag{12} $$
其中 \(b\) 为螺旋参数,默认 b=1.0。
3.5 边界处理与多次运行
项目支持三种边界方式:直接截断
$$ \boldsymbol{x}\leftarrow \operatorname{clip}(\boldsymbol{x},\boldsymbol{l},\boldsymbol{u}) \tag{13} $$
或中点回拉
$$ x_j\leftarrow \frac{x_j+b_j}{2}, \qquad b_j\in\{l_j,u_j\} \tag{14} $$
或越界随机重置
$$ x_j\leftarrow l_j+r_j(u_j-l_j) \tag{15} $$
若运行 \(R\) 次,则第 \(r\) 次 seed 为
$$ \mathrm{seed}_r= \begin{cases} \mathrm{seed}_0+r-1, & \text{固定种子}\\ \text{由内部 RNG 自动生成}, & \text{seed 为空} \end{cases} \tag{16} $$
最佳运行按最终最优值选择:
$$ 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{max} \end{cases} \tag{17} $$
随后代码会使用同一 run_seed 复跑一次最佳运行,以导出初始群体与最终群体。
4. 算法流程
结合 core/woa_calculator.py、utils/problem_definition.py、ui/upload_widget.py 与 ui/results_widget.py,本项目 WOA 的流程为:
- 选择基准函数或上传代理目标。
- 若为上传模式,则训练随机森林,并按式(3)处理最大化。
- 初始化鲸鱼群体并确定领航者。
- 每轮按式(7)和式(8)更新参数。
- 根据 \(p\) 与 \(|A|\) 在式(9)、式(10)和式(12)之间切换。
- 通过式(13)至式(15)处理越界个体。
- 记录所有运行的
best_fitness和收敛历史。 - 按式(17)选出最佳运行并复跑导出
InitialPopulation、FinalPopulation与BestSolution。
5. 关键参数说明
pop_size:种群规模。max_iter:最大迭代次数。runs:独立运行次数。seed:基础随机种子。b:螺旋搜索参数。bound_method:clip、midpoint或random。minmax:最小化或最大化。
6. 评价指标与输出结果解释
save_to_excel() 最终导出的主要工作表包括:
Metrics:最佳运行编号、best_fitness、均值、标准差、总耗时等;Parameters:问题与算法参数;InitialPopulation、FinalPopulation:最佳运行复跑得到的初始/最终种群;Runs:各次运行的run_seed、最优值和耗时;Convergence:最佳运行曲线及多次运行均值/标准差;BestSolution:最佳解向量;Charts:收敛曲线图与最优值箱线图路径。
若为上传代理模式,Excel 还会额外包含 Bounds、UploadedData、SurrogateMetrics 三张工作表,用于记录样本边界、上传数据预览和代理模型训练指标。论文结果部分可先以 Metrics 汇报多次运行统计,再结合 Convergence 说明代表性最佳运行与均值收敛行为,最后用 BestSolution 给出最优解向量。由于 InitialPopulation 与 FinalPopulation 来自最佳运行复跑结果,正文中若引用这两张表,应说明其用途是复现与解释,而不是全部运行的原始缓存快照。
7. 论文写作模板
可在论文方法部分表述为:
“本文采用鲸鱼优化算法(WOA)进行单目标连续优化。算法通过线性衰减参数 \(a\) 在全局搜索与局部开发之间实现平衡:当随机阈值满足包围搜索条件时,个体围绕随机鲸鱼或当前领航者更新;当满足气泡网搜索条件时,则沿对数螺旋轨迹围绕领航者移动。对于数据驱动问题,本文进一步基于上传样本训练随机森林代理模型,并在样本逐维边界内执行 WOA 搜索。”
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. 实现说明与注意事项
- 本实现是单目标连续 WOA,适合标准实数编码优化。
- 最大化能力通过内部目标符号翻转实现,最终再恢复真实曲线和最优值。
runs>1时,初始/最终群体来自最佳运行的同 seed 复跑,而不是直接缓存第一次执行过程。bound_method会影响最终搜索轨迹与收敛稳定性,论文复现实验时建议明确给出。
9. 单篇终审补充
9.1 图题与表题对齐建议
Metrics表可写为:表X WOA 最终最优值与统计摘要。Parameters表可写为:表X WOA 参数设置与问题配置。Runs表可写为:表X WOA 各次独立运行结果汇总。Convergence表可写为:表X WOA 最佳运行与均值收敛历史。BestSolution表可写为:表X WOA 代表性最佳运行的最优解向量。InitialPopulation表可写为:表X WOA 代表性最佳运行初始种群快照。FinalPopulation表可写为:表X WOA 代表性最佳运行最终种群快照。Charts中的convergence_curve建议写为:图X 鲸鱼优化算法收敛曲线。Charts中的best_fitness_boxplot建议写为:图X WOA 多次运行最优值箱线图。
9.2 终审说明
- 该实现支持多次独立运行,因此论文中可以同时报告
Runs统计和Convergence中的均值收敛,但前提是实际runs>1。 InitialPopulation与FinalPopulation不是第一次执行时直接缓存下来的群体,而是代表性最佳运行按同 seed 复跑后生成的解释性快照,正文引用时应写明这一点。- 最大化问题在内部通过目标符号翻转处理,最终导出的
best_fitness与收敛曲线已经恢复为真实方向,因此正文应直接引用导出值,不要再自行乘以-1。 bound_method会影响搜索轨迹;若论文需要严格复现实验,建议把runs、seed和bound_method一并写入实验设置表。
9.3 全量强化补充
本次全量强化绑定的真实结果目录为 具体的算法3/优化与多目标/WOA-鲸鱼优化/results/pytest_exportcheck_woa_20260316_001306。该目录下主结果工作簿可绑定为 woa_repro.xlsx,实际工作表为 Metrics、Parameters、InitialPopulation、FinalPopulation、Runs、Convergence、BestSolution、Charts。
当前目录内同时存在 woa_exportcheck.xlsx、woa_repro.xlsx、repro_woa.py 以及两组图目录 woa_exportcheck_plots/、woa_repro_plots/。这说明该目录不是单一工作簿快照,而是“导出检查主结果 + repro 再生产物”并存结构。本次文档应把 woa_repro.xlsx 与 woa_repro_plots/ 视为复现后结果,把 woa_exportcheck.xlsx 与 woa_exportcheck_plots/ 视为导出检查主结果。
repro_woa.py 的真实口径是 benchmark:function_code = 'F2'、runs = 3、seed = 42、bound_method = 'clip',没有 repro_inputs。因此这篇文档当前绑定的是 benchmark 多次运行链路,而不是上传代理链路。论文中若引用 Metrics 与 Runs,应明确其统计来自 F2 基准函数三次运行。
10. 软件实现核查补充(2026-07)
本篇对应的软件源码目录是 具体的算法3/优化与多目标/WOA-鲸鱼优化。软件实现支持优化模式和上传数据代理优化模式;上传模式读取数值表后训练代理模型,再由鲸鱼优化搜索。文档中的包围、螺旋、猎物搜索和收缩因子公式可以保留,但软件结果应以 WOA_Params、Run_Summary、History_Mean、History_All、Best_Solution 和 Charts 解释。
当前较新的代表性目录为 results/WOA-鲸鱼优化分析结果_20260517_144852-优化模式 与 results/WOA-鲸鱼优化分析结果_20260517_144903-上传数据代理优化。主工作簿通常包含 Summary、Problem、WOA_Params、Bounds、Run_Summary、History_Mean、History_All、Best_Solution、Charts;上传模式额外包含 UploadedProblem、UploadedData、SurrogateMetrics。如果正文讨论最优轨迹,建议把 Best_Solution 与收敛曲线配套引用。
当前图表稳定输出为 WOA_convergence_时间戳.png 和 WOA_best_solution_时间戳.png。复现代码位于 复现代码/优化模式/ 或 复现代码/上传数据代理优化/,上传模式输入副本为 repro_inputs/woa_sample.xlsx,复现结果进入 repro_outputs/。旧 benchmark 目录可保留为历史证据,但当前交付说明应优先按 20260517 的新结果目录和图表解释。