正在加载中...

展开本页目录
算法教程SS-海鞘群优化

SS-海鞘群优化

No.207 · 在线教程

虽然目录名是 SS-海鞘群优化,但该项目实际实现的是 Salp Swarm Algorithm(SSA,海鞘群优化),这一点在 README.md 中已有明确说明,核心代码位于 SS-海鞘群优化/core/ssa.py。界面调用链为 ui/uploadwidget.py -> …

SS-海鞘群优化

1. 方法概述

虽然目录名是 SS-海鞘群优化,但该项目实际实现的是 Salp Swarm Algorithm(SSA,海鞘群优化),这一点在 README.md 中已有明确说明,核心代码位于 SS-海鞘群优化/core/ssa.py。界面调用链为 ui/upload_widget.py -> ui/results_widget.py,结果导出由 utils/ss_exporter.pyui/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} $$

若界面选择最大化,则内部优化目标改写为

$$ \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)}=\boldsymbol{l}+\boldsymbol{r}_i\odot(\boldsymbol{u}-\boldsymbol{l}), \qquad \boldsymbol{r}_i\sim U(0,1)^d \tag{5} $$

初始食物位置 \( \boldsymbol{F} \) 由当前最优个体给出:

$$ \boldsymbol{F}^{(0)}=\operatorname*{arg\,min}_{1\le i\le N} f(\boldsymbol{X}_i^{(0)}) \tag{6} $$

3.2 自适应系数

代码中第 \(t\) 轮的核心衰减参数为

$$ c_1=2\exp\!\left(-\left(\frac{4t}{T}\right)^2\right) \tag{7} $$

这一形式直接来自 core/ssa.py 的实现,而不是线性衰减。

3.3 领导者更新

领导者(第 1 个海鞘)会生成两组随机向量 \(\boldsymbol{c}_2,\boldsymbol{c}_3\sim U(0,1)^d\),并构造步长

$$ \boldsymbol{s} = c_1\big((\boldsymbol{u}-\boldsymbol{l})\odot \boldsymbol{c}_2+\boldsymbol{l}\big) \tag{8} $$

随后按 \(\boldsymbol{c}_3\) 的掩码决定加减方向:

$$ \boldsymbol{X}_{1}^{new} = \boldsymbol{F}\pm \boldsymbol{s} \tag{9} $$

这里的加号与减号是逐维选择的,而不是整向量统一加减。

3.4 跟随者更新

对其余海鞘,项目采用链式平均更新:

$$ \boldsymbol{X}_{i}^{new} = \frac{1}{2}\big(\boldsymbol{X}_{i-1}^{new}+\boldsymbol{X}_{i}\big), \qquad i=2,\ldots,N \tag{10} $$

这正是 Salp Swarm 的典型 follower 结构,也是本目录与麻雀搜索实现相区分的关键证据。

3.5 边界处理与最优更新

所有新位置更新后都执行截断:

$$ \boldsymbol{X}_{i}^{new}\leftarrow \operatorname{clip}(\boldsymbol{X}_{i}^{new},\boldsymbol{l},\boldsymbol{u}) \tag{11} $$

然后重新评估适应度,并更新食物位置:

$$ \boldsymbol{F}^{(t+1)} = \operatorname*{arg\,min}_{1\le i\le N} f(\boldsymbol{X}_i^{(t+1)}) \tag{12} $$

项目记录的 convergence_curve 即每一轮的当前最优值。

4. 算法流程

结合 core/ssa.pyui/upload_widget.pyui/results_widget.pyutils/problem_definition.pyutils/ss_exporter.py,本项目海鞘群优化的流程为:

  1. 选择内置基准问题或上传代理优化。
  2. 若为上传模式,则训练随机森林代理,并以样本逐维边界作为搜索域。
  3. 按式(5)初始化种群,并根据式(6)设置食物位置。
  4. 每轮计算式(7)的 \(c_1\)。
  5. 领导者按式(8)和式(9)更新,跟随者按式(10)更新。
  6. 执行式(11)的边界截断,并按式(12)更新全局最优。
  7. 保存收敛曲线、最优解向量,并自动导出 Excel 与复现脚本。

5. 关键参数说明

  • population_size:海鞘种群规模。
  • max_iter:最大迭代次数。
  • random_state:随机种子;若提供,会先执行 np.random.seed(random_state)
  • problem_modebenchmarkupload_surrogate
  • target_column:上传模式的目标列。
  • objective_direction:上传模式的优化方向。

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

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

  • Convergence:每轮最优值曲线;
  • Best Solution:最佳解向量;
  • Parameters:问题名、边界、种群规模、随机种子等;
  • Charts:收敛图路径;
  • 上传模式下额外还有 BoundsUploadedDataSurrogateMetrics

同时 utils/ss_exporter.py 会生成对应的收敛图与复现脚本 repro_ss.py。界面上显示的 best_fitness 在上传模式下是已经恢复方向后的真实预测值。因此,论文结果部分可直接采用“最佳解向量 + 收敛曲线 + 代理模型精度”的写法;其中 Best Solution 仅保存决策变量,最优目标值应在正文或结果表中单独给出。若为上传模式,可将 BoundsSurrogateMetrics 作为附录表格支撑复现。

7. 论文写作模板

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

“本文采用海鞘群优化算法(Salp Swarm Algorithm, SSA)进行单目标连续优化。算法将种群划分为领导者和跟随者两类:领导者围绕当前食物位置进行带有指数衰减系数 \(c_1\) 的搜索,跟随者则通过与前一海鞘位置取均值的方式形成链式协同运动。对于数据驱动问题,本文进一步基于样本训练随机森林代理模型,并在样本边界范围内执行海鞘群优化搜索。”

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

  • 本目录实现的是 Salp Swarm Algorithm(海鞘群优化),不是麻雀搜索;README 已明确说明这一点。
  • 当前实现只支持单目标连续优化,不包含多次独立运行统计。
  • 若设置 random_state,代码通过全局 np.random.seed 控制随机性。
  • 上传模式支持 min/max 两种方向,导出阶段会恢复真实预测值曲线。

9. 单篇终审补充

9.1 图题与表题对齐建议

  • Parameters 表可写为:表X SS 参数设置与问题配置。
  • Convergence 表可写为:表X SS 单次运行收敛轨迹。
  • Best Solution 表可写为:表X SS 求得的最优解向量。
  • Charts 中收敛图建议写为:图X 海鞘群优化算法收敛曲线。

9.2 终审说明

  • 这篇文档要特别避免和“麻雀搜索 SSA”混淆,正式落稿时算法英文名应写成 Salp Swarm Algorithm
  • 当前实现无多次运行统计,正文不宜写重复实验稳定性结论。

9.3 全量强化补充

本次全量强化对 具体的算法3/优化与多目标/SS-海鞘群优化/results 做了真实磁盘核查,但当前 results 目录为空,未定位到可直接绑定的 xlsx、图文件或 repro_ss.py 实物。因此这篇文档现阶段只能保留基于代码的结果结构说明,不能像 AOA、GTO、NGO 那样追加到“真实结果目录 + 真实工作表 + 真实图路径”的强证据级别。

这不是说算法说明无效,而是当前磁盘证据尚未落盘。正式写作时如果要把 SS 也提升到与其他文档同等级的工程证据,下一步需要先在该算法目录实际运行并生成 results 产物,再把主结果工作簿、收敛图和 repro_ss.py 一并补入。本轮终审必须如实写明“未定位到 results 实物证据”,不能虚构路径。

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

本篇对应的软件源码目录是 具体的算法3/优化与多目标/SS-海鞘群优化。软件实现支持优化模式和上传数据代理优化模式;上传模式通过数值表训练代理目标后运行海鞘群优化。文档中的海鞘群更新公式可以保留,但软件结果应以 SS 对应的 SummaryRun_SummaryHistory_MeanHistory_AllBest_SolutionCharts 为准。

当前较新的代表性目录为 results/SS-海鞘群优化分析结果_20260517_144425-优化模式results/SS-海鞘群优化分析结果_20260517_144437-上传数据代理优化。主工作簿通常包含 SummaryProblemSS_ParamsBoundsRun_SummaryHistory_MeanHistory_AllBest_SolutionCharts;上传模式额外包含 UploadedProblemUploadedDataSurrogateMetrics。旧文如果写成“最优值统计”是可以的,但更准确的应该是“收敛曲线和最优解向量”。

当前图表稳定输出为 SS_convergence_时间戳.pngSS_best_solution_时间戳.png。复现代码位于 复现代码/优化模式/复现代码/上传数据代理优化/,上传模式输入副本为 repro_inputs/ss_sample.xlsx,复现结果进入 repro_outputs/。若正文引用上传代理模式,应把 SurrogateMetrics 与结果目录一起说明。