正在加载中...

展开本页目录
算法教程白鲨优化

白鲨优化

No.213 · 在线教程

本项目实现的是 WSO(White Shark Optimizer,白鲨优化)单目标连续优化版本,核心代码位于 WSO-白鲨优化/core/wso.py,界面调用链为 ui/uploadwidget.py -> ui/resultswidget.py。项目支持:

WSO-白鲨优化

1. 方法概述

本项目实现的是 WSO(White Shark Optimizer,白鲨优化)单目标连续优化版本,核心代码位于 WSO-白鲨优化/core/wso.py,界面调用链为 ui/upload_widget.py -> ui/results_widget.py。项目支持:

  • benchmark:内置测试函数;
  • upload_surrogate:上传数据后训练随机森林代理;
  • 白鲨速度更新、局部感知、波浪运动与鱼群协同行为。

项目内部统一按最小化问题求解:

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

当前实现为单次运行,不带 runs 统计。

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

上传模式下,项目训练 RandomForestRegressor(n_estimators=300)

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

若选择最大化,则 utils/problem_definition.py 会把内部目标写成

$$ \tilde f(\boldsymbol{x})=\sigma \hat f(\boldsymbol{x}), \qquad \sigma= \begin{cases} 1, & \text{min}\\ -1, & \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)}\sim U(\boldsymbol{l},\boldsymbol{u}), \qquad \boldsymbol{v}_i^{(0)}=\boldsymbol{0} \tag{5} $$

并记录个体历史最好位置 wbest 与全局最好位置 gbest。代码中的一组关键实现常数为:

$$ f_{max}=0.75,\quad f_{min}=0.07,\quad \tau=4.11,\quad \mu=\frac{2}{\left|2-\tau-\sqrt{\tau^2-4\tau}\right|} \tag{6} $$

另外还固定

$$ p_{min}=0.5,\quad p_{max}=1.5,\quad a_0=6.25,\ a_1=100,\ a_2=0.0005 \tag{7} $$

以及

$$ f=f_{min}+\frac{f_{max}-f_{min}}{f_{max}+f_{min}} \tag{8} $$

3.2 迭代控制量

第 \(t\) 轮迭代时,代码计算

$$ mv=\frac{1}{a_0+\exp\!\left(\frac{T/2-t}{a_1}\right)} \tag{9} $$

$$ s_s=\left|1-\exp\!\left(-a_2\frac{t}{T}\right)\right| \tag{10} $$

$$ p_1=p_{max}+(p_{max}-p_{min})\exp\!\left(-\left(\frac{4t}{T}\right)^2\right) \tag{11} $$

$$ p_2=p_{min}+(p_{max}-p_{min})\exp\!\left(-\left(\frac{4t}{T}\right)^2\right) \tag{12} $$

同时还有

$$ c_1=1.2\left(1-\frac{t}{T}\right)+0.2, \qquad c_2=2.2\frac{t}{T}+0.8 \tag{13} $$

3.3 速度更新

代码先随机抽取历史参考索引 \(\nu_i\) 与尺度因子 \(rr_i\sim U(1,3)\),并构造

$$ \boldsymbol{wr}_i= \left| \frac{2\boldsymbol{r}_1-(\boldsymbol{r}_2+\boldsymbol{r}_3)}{rr_i} \right| \tag{14} $$

随后速度按下式更新:

$$ \boldsymbol{v}_i = \mu \boldsymbol{v}_i +\boldsymbol{wr}_i\odot(\boldsymbol{wbest}_{\nu_i}-\boldsymbol{X}_i) +c_1\boldsymbol{r}_4\odot(\boldsymbol{wbest}_i-\boldsymbol{X}_i) +c_2\boldsymbol{r}_5\odot(\boldsymbol{gbest}-\boldsymbol{X}_i) +p_1\boldsymbol{r}_6\odot(\boldsymbol{gbest}-\boldsymbol{X}_i) +p_2\boldsymbol{r}_7\odot(\boldsymbol{wbest}_{\nu_i}-\boldsymbol{X}_i) \tag{15} $$

速度再被限制在

$$ \boldsymbol{v}_i\in\left[-0.2(\boldsymbol{u}-\boldsymbol{l}),\ 0.2(\boldsymbol{u}-\boldsymbol{l})\right] \tag{16} $$

3.4 局部感知与波浪运动

随后每个白鲨根据 \(mv\) 在两种运动之间切换。若随机数小于 \(mv\),则执行局部感知扰动:

$$ \boldsymbol{X}_i\leftarrow \boldsymbol{X}_i+\boldsymbol{z}\odot 0.01(\boldsymbol{u}-\boldsymbol{l}), \qquad \boldsymbol{z}\sim\mathcal{N}(0,1)^d \tag{17} $$

否则执行波浪运动:

$$ \boldsymbol{X}_i\leftarrow \boldsymbol{X}_i+\frac{\boldsymbol{v}_i}{f} \tag{18} $$

3.5 鱼群协同行为与历史最优更新

代码还会生成基于 gbest 的候选位置:

$$ \boldsymbol{candidate} = \boldsymbol{gbest} +\boldsymbol{r}\odot\left|\boldsymbol{r}'\odot(\boldsymbol{gbest}-\boldsymbol{X}_i)\right|\odot \operatorname{sign}(\boldsymbol{r}''-0.5) \tag{19} $$

若 \(i>1\),则再与前一条白鲨做平均;之后当随机数小于 \(s_s\) 时,执行

$$ \boldsymbol{X}_i\leftarrow (1-s_s)\boldsymbol{X}_i+s_s\boldsymbol{candidate} \tag{20} $$

评估后,若当前适应度优于个体历史最好,则更新 wbest;否则回拉到当前值与历史最好值的均值:

$$ \boldsymbol{X}_i\leftarrow \frac{\boldsymbol{X}_i+\boldsymbol{wbest}_i}{2} \tag{21} $$

若新适应度优于全局最优,则同步更新 gbest

4. 算法流程

结合 core/wso.pyui/upload_widget.pyui/results_widget.pyutils/problem_definition.py,本项目 WSO 的流程为:

  1. 选择内置问题或上传代理优化。
  2. 若为上传模式,则训练随机森林代理,并按式(3)处理最大化。
  3. 初始化白鲨位置、速度、个体历史最优与全局最优。
  4. 每轮先按式(9)至式(16)更新运动控制量与速度。
  5. 根据 \(mv\) 在局部感知扰动和波浪运动之间切换。
  6. 进一步执行式(19)和式(20)的鱼群协同行为。
  7. 通过式(21)更新个体历史最优与全局最优。
  8. 记录 convergence_curve 并导出 Excel 与复现脚本。

5. 关键参数说明

  • population_size:白鲨数量。
  • max_iter:最大迭代次数。
  • random_state:随机种子。
  • problem_modebenchmarkupload_surrogate
  • target_column:上传模式的目标列。
  • objective_direction:上传模式优化方向。

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

ui/results_widget.py 导出的主要工作表包括:

  • Convergence:每轮历史最优值;
  • Best Solution:最优解向量;
  • Parameters:问题、边界、种群规模、随机种子等;
  • Charts:收敛图路径。

上传模式下还会额外导出:

  • Bounds:逐维样本边界;
  • UploadedData:上传数据预览;
  • SurrogateMetrics:随机森林训练指标。

这里的 best_fitness 在上传模式下已经通过 predict_actual 恢复成真实方向的预测值,而 best_internal_fitness 才是内部最小化目标。因此,论文结果部分建议以恢复方向后的 best_fitness 作为主结果指标,再结合 Convergence 描述收敛速度,并把 Best Solution 作为附录中的最优决策变量表。若为上传代理模式,应同时报告 SurrogateMetrics,避免只给最优预测值而不说明代理误差。

7. 论文写作模板

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

“本文采用白鲨优化算法(WSO)进行单目标连续优化。算法首先基于个体历史最优与全局最优更新白鲨速度,并通过局部感知扰动与波浪运动在局部搜索和全局搜索之间切换;随后引入基于全局最优的鱼群协同行为,以增强群体对优势区域的聚集能力。当新位置优于个体历史最优时更新历史记忆,否则回拉至当前搜索位置与历史最好位置的均值,从而提高搜索稳定性。对于数据驱动问题,本文进一步通过随机森林代理模型在样本边界内执行 WSO 搜索。”

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

  • 本实现是单目标连续 WSO,不包含多次独立运行统计。
  • 上传模式支持 min/max 两种方向,方向切换通过代理目标符号翻转实现。
  • 代码中的参数 \(f_{max}, f_{min}, \tau, p_{min}, p_{max}, a_0, a_1, a_2\) 是当前实现固定常数,不由界面暴露。
  • WSO 的速度更新式在当前代码中同时叠加了 wbestgbest 以及随机历史个体项,论文中若需复现,建议直接注明采用的是当前实现版本而非泛化公式描述。

9. 单篇终审补充

9.1 图题与表题对齐建议

  • Parameters 表可写为:表X WSO 参数设置与实验配置。
  • Convergence 表可写为:表X WSO 最优值收敛历史。
  • Best Solution 表可写为:表X WSO 最优决策变量组合。
  • Charts 表可写为:表X WSO 图表索引与文件路径。
  • ChartsChart=Convergence 对应图片建议写为:图X 白鲨优化算法收敛曲线。
  • 若为上传代理模式,Bounds 表可写为:表X WSO 上传样本逐维边界。
  • 若为上传代理模式,SurrogateMetrics 表可写为:表X WSO 代理模型误差指标。

9.2 终审说明

  • 当前实现不做多次独立运行统计,因此正文不要写“平均最优值”“标准差”“箱线图”或“多次运行显著优于对照组”等表述,除非另行加跑。
  • 上传模式下对外展示的 best_fitness 已恢复为真实优化方向;best_internal_fitness 只是内部最小化目标,不应在论文结果表中作为主结果字段。
  • Best Solution 只对应最优解向量,最优目标值应从 Convergence 末代值或结果摘要字段获取,正文里不要把两者混写。
  • 当前实现中的若干控制参数是固定常数且未在界面暴露,因此论文若需复现实验,应写明采用“项目实现默认参数”,而不要虚构一套可调参实验设计。

9.3 全量强化补充

本次全量强化绑定的真实结果目录为 具体的算法3/优化与多目标/WSO-白鲨优化/results/WSO-白鲨优化分析结果_20260329_171918_056108。该目录内主工作簿为 WSO-白鲨优化分析结果_20260329_171918_056108.xlsx,实际工作表为 ConvergenceBest SolutionParametersCharts。其中 Parameters 页当前真实写入 Problem = sphereProblem Mode = benchmarkMax Iterations = 20Population Size = 20Dimension = 5Random Seed = 42 以及上下界信息,因此这一轮结果明确属于 benchmark 问题模式,而不是上传代理模式。

同一目录下真实图件只有一张:WSO-白鲨优化_convergence.png。这与工作簿中的 Charts 页对应,说明当前 benchmark 模式下主要导出的是收敛曲线而非多图集合。目录内还存在 repro_wso.py,脚本当前真实参数写法为 problem_mode = 'benchmark'problem = 'sphere'population_size = 20max_iter = 20dim = 5random_state = 42

需要如实说明的是,这一轮目录下没有 repro_inputs/ 输入副本。原因不是缺文件,而是当前脚本走 benchmark 分支:若 problem_mode == 'benchmark',脚本直接调用基准函数并生成 wso_repro.xlsx;只有进入 upload_surrogate 分支时,才会写入 BoundsSurrogateMetrics 等上传代理相关结果。因此本篇文档应把当前证据明确写成“benchmark 单轮结果 + 无上传副本口径”,不能误写成已具备上传模式自包含复现包。

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

本篇对应的软件源码目录是 具体的算法3/优化与多目标/WSO-白鲨优化。软件实现支持优化模式和上传数据代理优化模式;上传模式把数值表训练成代理目标后执行白鲨优化。文档中的搜索、围捕、跟随与吸引公式可以保留,但软件结果应以 WSO_ParamsRun_SummaryHistory_MeanHistory_AllBest_SolutionCharts 解读。

当前较新的代表性目录为 results/WSO-白鲨优化分析结果_20260517_144930-优化模式results/WSO-白鲨优化分析结果_20260517_144941-上传数据代理优化。主工作簿通常包含 SummaryProblemWSO_ParamsBoundsRun_SummaryHistory_MeanHistory_AllBest_SolutionCharts;上传模式额外包含 UploadedProblemUploadedDataSurrogateMetrics。这说明当前结果结构已经比较完整,用户说明应优先按当前真实导出解释。

当前图表稳定输出为 WSO_convergence_时间戳.pngWSO_best_solution_时间戳.png。复现代码位于 复现代码/优化模式/复现代码/上传数据代理优化/,上传模式输入副本为 repro_inputs/wso_sample.xlsx,复现结果进入 repro_outputs/。如果正文引用上传代理模式,务必把 SurrogateMetrics 和目标值一起写。