TSA-海鞘搜索
本项目实现的是 TSA(Tunicate Swarm Algorithm,海鞘群/海鞘搜索)单目标连续优化版本,核心代码位于 TSA-海鞘搜索/core/tsacalculator.py,界面调用链为 ui/uploadwidget.py -> ui/resultswidget…
TSA-海鞘搜索
1. 方法概述
本项目实现的是 TSA(Tunicate Swarm Algorithm,海鞘群/海鞘搜索)单目标连续优化版本,核心代码位于 TSA-海鞘搜索/core/tsa_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} $$
若选择最大化,则 core/tsa_calculator.py 不直接改变比较规则,而是把内部目标写成
$$ \tilde f(\boldsymbol{x})= \begin{cases} \hat f(\boldsymbol{x}), & \text{min}\\ -\hat f(\boldsymbol{x}), & \text{max} \end{cases} \tag{3} $$
最终导出时再把 best_fitness 与收敛曲线恢复成真实方向。上传模式的逐维边界直接取样本极值:
$$ 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}^{(0)}=\operatorname*{arg\,min}_{1\le i\le N}\tilde f(\boldsymbol{x}_i^{(0)}) \tag{6} $$
3.2 海鞘搜索更新
对第 \(i\) 个个体,代码逐维生成随机向量 \(\boldsymbol{c}_1,\boldsymbol{c}_2,\boldsymbol{c}_3\sim U(0,1)^d\),并按参考实现使用
$$ M=\operatorname{fix}\!\big(p_{min}+r(p_{max}-p_{min})\big) \tag{7} $$
其中 \(r\sim U(0,1)\),默认 pmin=1, pmax=4。随后计算
$$ \boldsymbol{a}=\frac{\boldsymbol{c}_2+\boldsymbol{c}_3-2\boldsymbol{c}_1}{M} \tag{8} $$
两条候选轨迹为
$$ \boldsymbol{T}_1=\boldsymbol{x}_{best}+\boldsymbol{a}\odot\left|\boldsymbol{x}_{best}-\boldsymbol{c}_2\odot \boldsymbol{x}_i\right| \tag{9} $$
$$ \boldsymbol{T}_2=\boldsymbol{x}_{best}-\boldsymbol{a}\odot\left|\boldsymbol{x}_{best}-\boldsymbol{c}_2\odot \boldsymbol{x}_i\right| \tag{10} $$
代码按 \(\boldsymbol{c}_3\) 的掩码逐维选择更新值:
$$ \boldsymbol{x}_{i,new} = \begin{cases} \boldsymbol{T}_1, & c_{3,j}\ge 0.5\\ \boldsymbol{T}_2, & c_{3,j}<0.5 \end{cases} \tag{11} $$
3.3 链式跟随机制
若个体不是第 1 个,则代码额外加入与前一海鞘位置的链式平均:
$$ \boldsymbol{x}_{i,new} \leftarrow \frac{\boldsymbol{x}_{i,new}+\boldsymbol{x}_{i-1}}{2}, \qquad i=2,\ldots,N \tag{12} $$
这一项是当前 TSA 实现中非常关键的“群体串联”结构。
3.4 边界处理
项目支持三种边界策略:
$$ \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), \qquad r_j\sim U(0,1) \tag{15} $$
3.5 多次运行与最佳运行复跑
若运行 \(R\) 次,第 \(r\) 次使用随机种子
$$ \mathrm{seed}_r= \begin{cases} \mathrm{seed}_0+r-1, & \text{固定种子}\\ \text{由 seed\_seq\_rng 随机生成}, & \text{seed 为空} \end{cases} \tag{16} $$
最佳运行按最终 best_fitness 选择:
$$ 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 再复跑一次最佳运行,以便导出 InitialPopulation 与 FinalPopulation。
4. 算法流程
结合 core/tsa_calculator.py、utils/problem_definition.py、ui/upload_widget.py 与 ui/results_widget.py,本项目 TSA 的流程为:
- 选择
benchmark或upload_surrogate。 - 若为上传模式,则训练随机森林代理,并按式(3)处理最大化。
- 初始化种群并确定全局最优。
- 每轮按式(7)至式(11)生成新的海鞘位置。
- 对非首个体再按式(12)加入链式平均。
- 按式(13)至式(15)执行边界处理。
- 记录所有运行的最优值、耗时与收敛曲线。
- 按式(17)选出最佳运行,并复跑同一 seed 导出初始群体、最终群体与最佳解。
5. 关键参数说明
pop_size:种群规模。max_iter:最大迭代次数。runs:独立运行次数。seed:基础随机种子。pmin/pmax:式(7)中的离散参数区间。bound_method:clip、midpoint或random。minmax:最小化或最大化。
6. 评价指标与输出结果解释
save_to_excel() 最终导出的主要工作表包括:
Metrics:best_run、best_fitness、mean_best_fitness、std_best_fitness、总耗时等;Parameters:问题配置与算法参数;InitialPopulation、FinalPopulation:最佳运行复跑得到的初始/最终群体;Runs:每次运行的run_seed、best_fitness、runtime_s;Convergence:最佳运行曲线以及多次运行的均值/标准差;BestSolution:最佳解向量;Charts:收敛图与箱线图路径。
上传模式下还会额外导出 Bounds、UploadedData、SurrogateMetrics。当 runs>1 时,图表中还会包含最优值箱线图。因此,论文结果部分可按“多次运行统计、代表性最佳运行收敛曲线、最佳解向量”三层组织;若为上传代理模式,SurrogateMetrics 应与最优预测结果同时报告,以说明代理可靠性。
7. 论文写作模板
可在论文方法部分表述为:
“本文采用 Tunicate Swarm Algorithm(TSA)进行单目标连续优化。算法在每次迭代中首先通过随机向量构造海鞘对当前全局最优位置的两条候选搜索轨迹,并按概率逐维选择更新方向;随后对除首个体外的其他个体引入链式平均机制,以增强群体协同搜索能力。对于数据驱动场景,本文进一步基于上传样本训练随机森林代理模型,并在样本逐维边界内实施 TSA 搜索。”
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. 实现说明与注意事项
- 本实现是连续变量单目标 TSA,不涉及离散编码。
- 最大化能力通过内部目标符号翻转实现,而不是修改比较规则。
runs>1时,最终导出的初始/最终群体来自最佳运行的同 seed 复跑结果,不是第一次运行中直接缓存的群体。bound_method会真实影响算法行为,论文中若需复现实验,应明确记录所用边界处理方式。
9. 单篇终审补充
9.1 图题与表题对齐建议
Metrics表可写为:表X TSA 最终最优值与总体指标摘要。Parameters表可写为:表X TSA 参数设置与边界处理方式。Runs表可写为:表X TSA 各次独立运行结果汇总。Convergence表可写为:表X TSA 最佳运行与均值收敛历史。BestSolution表可写为:表X TSA 代表性最佳运行的最优解向量。InitialPopulation表可写为:表X TSA 代表性最佳运行初始种群快照。FinalPopulation表可写为:表X TSA 代表性最佳运行最终种群快照。Charts中的convergence_curve建议写为:图X 海鞘搜索算法收敛曲线。Charts中的best_fitness_boxplot建议写为:图X TSA 多次运行最优值箱线图。
9.2 终审说明
- 该实现支持多次独立运行,因此正文可以同时报告
Runs、Convergence中的均值与标准差;若runs=1,则不应再写箱线图或稳定性统计结论。 InitialPopulation与FinalPopulation来自代表性最佳运行的同 seed 复跑结果,它们适合用来解释算法行为,不应表述为“所有运行的原始种群缓存”。Convergence同时包含best_fitness_best_run、best_fitness_mean和best_fitness_std,论文中应区分“代表性运行收敛”与“多次运行平均收敛”两种口径。bound_method在当前实现中真实参与搜索过程,正文若强调可复现实验,建议把该参数和runs一并写入方法或实验设置部分。
9.3 全量强化补充
本次全量强化不采用过于简化的 tsa_tmp_smoke/tmp.xlsx 作为主证据,而是优先绑定更完整的真实目录 具体的算法3/优化与多目标/TSA-海鞘搜索/results/manual_upload_verify_20260324。该目录下实际可直接核验的主工作簿为 tsa_manual_upload.xlsx,同目录还保留了 tsa_repro.xlsx 与 repro_tsa.py,说明这里同时包含主导出结果与复现再生产物。
从目录命名可以看出,这份证据属于手工上传验证链路,而不是 benchmark smoke。与 tsa_tmp_smoke 相比,这个目录至少具备“主工作簿 + repro 工作簿 + repro 脚本”三件套,更适合写进终审补充。当前虽然本轮没有直接把 tsa_manual_upload.xlsx 的全部工作表重新列出,但结合目录定位可以明确其证据等级高于 tmp.xlsx。
因此这篇文档应如实写成“当前优先绑定 manual upload verify 目录”。若后续要把 TSA 补到和 AOA、GSA 一样的强度,下一步建议再单独读取 tsa_manual_upload.xlsx 与 repro_tsa.py 的输入口径,把具体工作表和相对路径输入副本继续细化写入。
10. 软件实现核查补充(2026-07)
本篇对应的软件源码目录是 具体的算法3/优化与多目标/TSA-海鞘搜索。软件实现支持优化模式和上传数据代理优化模式;上传模式会将数值表训练为代理目标后执行海鞘搜索。文档中的海鞘联通、领导者跟随、探索/开发更新公式可以保留,但软件结果应以 TSA_Params、Run_Summary、History_Mean、History_All、Best_Solution 和 Charts 解释。
当前较新的代表性目录为 results/TSA-海鞘搜索分析结果_20260517_144702-优化模式 与 results/TSA-海鞘搜索分析结果_20260517_144714-上传数据代理优化。主工作簿通常包含 Summary、Problem、TSA_Params、Bounds、Run_Summary、History_Mean、History_All、Best_Solution、Charts;上传模式额外包含 UploadedProblem、UploadedData、SurrogateMetrics。旧文若写成单次最优值,也可以,但当前新证据更适合用多次运行汇总描述。
当前图表稳定输出为 TSA_convergence_时间戳.png 和 TSA_best_solution_时间戳.png。复现代码位于 复现代码/优化模式/ 或 复现代码/上传数据代理优化/,上传模式输入副本为 repro_inputs/tsa_sample.xlsx,复现结果进入 repro_outputs/。若正文涉及上传代理模式,建议把 SurrogateMetrics 放在结果解释段里一起说明。