1. 科研计算工作流现状梳理与自动化边界判定
把“一条龙”拆成可判定的步骤
面对“数据预处理 → 仿真 → 后处理 → 绘图”这类多步骤科研计算任务,第一步不是写脚本,而是把当前人工操作如实画出来,再对每个环节做自动化边界判定。判定的核心不是“能不能写代码”,而是三个问题:输入是否确定、规则是否稳定、出错后能否自动识别。三者都满足的环节适合自动化;依赖经验判断、需要看中间结果才能决定下一步的环节,必须保留人工介入点。
下面以一个典型的分子动力学/有限元类任务为例:原始构型或网格数据需要清洗与格式转换,随后提交仿真计算,再对输出做后处理统计,最后绘制图表。图中用颜色区分三类环节:绿色为可直接自动化,橙色为“自动执行 + 人工确认”的半自动环节,红色为必须人工判断的环节。
如何做边界判定:三个判据落到具体环节
把上图中的每个方框逐一对三问打分,就能得到“可自动化 / 半自动 / 人工判断”的结论。以本例为例:
| 环节 | 输入确定 | 规则稳定 | 错误可自动识别 | 判定 |
|---|---|---|---|---|
| 原始数据导入与格式统一 | 是 | 是 | 是(格式校验) | 可自动化 |
| 异常值/缺失值处理 | 部分 | 否(看物理意义) | 否 | 人工判断 |
| 清洗与格式转换 | 是 | 是 | 是 | 可自动化 |
| 参数与收敛设置 | 部分 | 否(依赖经验) | 部分 | 半自动 |
| 提交计算作业 | 是 | 是 | 是(退出码) | 可自动化 |
| 收敛性/合理性检查 | 否 | 否 | 部分(残差阈值) | 人工判断 |
| 提取输出数据 | 是 | 是 | 是 | 可自动化 |
| 统计与指标计算 | 是 | 是 | 是 | 可自动化 |
| 结果可信性判断 | 否 | 否 | 否 | 人工判断 |
| 批量绘图 | 是 | 是 | 是 | 可自动化 |
| 图注与结论标注 | 否 | 否 | 否 | 人工判断 |
| 结果归档 | 是 | 是 | 是 | 可自动化 |
判定原则:只要“规则是否稳定”为否,就不应把该环节完全自动化,最多做成“脚本执行 + 人工确认”的半自动形式。半自动环节的脚本应把关键中间量打印到日志,供人工快速核对,而不是直接吞掉。
形成基线工作流清单
把上表整理成可执行的清单,作为后续案例的基线。清单需要记录每一步的输入、输出、执行方式、人工判断点和失败信号,这样后续封装脚本或编排依赖时才有明确依据。
步骤编号 | 环节名称 | 输入文件/参数 | 输出文件 | 执行方式 | 人工判断点 | 失败信号
S1 | 原始数据导入 | raw/*.dat, 单位配置 | work/clean_in.dat | 脚本自动 | 无 | 格式校验失败
S2 | 异常值处理 | work/clean_in.dat | work/clean_out.dat | 人工+脚本 | 剔除或插补的物理依据 | 异常比例>5%
S3 | 仿真参数设置 | work/clean_out.dat, 参数模板 | work/sim.inp | 人工确认 | 步长/阈值是否合理 | 参数越界
S4 | 提交计算 | work/sim.inp | work/sim.out, log | 脚本自动 | 无 | 退出码非0
S5 | 收敛性检查 | work/sim.out, log | 检查记录 | 人工判断 | 残差曲线是否收敛 | 残差未降/能量漂移
S6 | 后处理统计 | work/sim.out | work/metrics.csv | 脚本自动 | 无 | 字段缺失
S7 | 结果可信性判断 | work/metrics.csv | 判断结论 | 人工判断 | 是否需调参重算 | 指标偏离预期
S8 | 批量绘图 | work/metrics.csv | fig/*.png | 脚本自动 | 无 | 绘图报错
S9 | 图注与结论 | fig/*.png | 报告草稿 | 人工撰写 | 结论表述 | 无
S10 | 归档 | 全部输出 | archive/版本目录 | 脚本自动 | 无 | 归档校验失败
判定结果如何验证
基线清单完成后,用一次真实(或教学示例)运行做走查:对每个“可自动化”环节,确认其输入输出文件确实存在且格式稳定;对每个“人工判断”环节,确认其判据可以写成一句话,例如“残差在最后 100 步内下降小于 1 个数量级则视为未收敛”。如果某个环节的判据写不出来,说明它还不具备进入自动化流程的条件,应继续保留为人工环节,而不是勉强脚本化。
走查通过后,这份清单就是后续工作的基线:哪些步骤可以封装成单条命令、哪些步骤之间存在文件依赖、哪些判断点需要在流程中插入人工确认,都已经在清单中明确。后续的脚本封装与依赖编排都应以此清单为输入,而不是重新凭印象梳理。