4. 自动化标定流程设计

手动标定实验通常由工程师在示波器、频谱仪、任意波形发生器与量子测控软件之间来回切换完成:调一个偏置电压,等数据稳定,读一次相位,再改下一个参数。这个过程在单次实验中可行,但一旦参数维度增加、需要重复扫描或跨天复现,就会暴露出三个问题:操作顺序依赖人的记忆、中间状态无法被程序感知、异常发生时只能靠人眼判断。自动化标定流程设计的核心,就是把这类实验转化为可被程序驱动、可观测、可恢复的执行结构。

一、从手动实验到脚本:先抽取“可判定单元”

转化不是把操作步骤逐条翻译成代码,而是先识别实验中的可判定单元——即“设置什么参数、等待什么条件、读取什么量、依据什么判断进入下一步”。以超导量子比特的 Ramsey 频率标定为例,手动流程大致是:设置 π/2 脉冲、插入延时 τ、再施加 π/2 脉冲、读取 |1⟩ 态布居随 τ 的振荡、拟合频率并更新驱动频率。转化为脚本时,应抽取为如下结构:

for tau in np.linspace(0, 2e-6, 41):
    set_pulse_sequence(pi2, delay=tau, pi2)
    wait_until_shot_done(timeout=2.0)
    p1 = acquire_population(shots=2000)
    record(tau, p1)
freq = fit_ramsey(tau_list, p1_list)
update_drive_frequency(freq)

这里的关键不是循环本身,而是每个动作都有明确的输入、输出与完成条件:wait_until_shot_done 把“等数据稳定”变成可超时判定的等待;acquire_population 把“读一次相位”变成带 shots 数的统计量;fit_ramsey 把“看振荡”变成可返回拟合优度的函数。只有完成这种抽取,后续的状态机与异常处理才有附着点。

二、状态机:让流程的“当前处境”可被程序感知

脚本化之后,流程往往仍是一串顺序调用,一旦某一步失败,程序不知道自己是“参数已下发但未采集”还是“采集完成但拟合失败”。状态机的作用是把流程显式建模为若干状态与迁移条件,使每一步的处境可查询、可恢复。一个典型的标定任务状态机可包含:IDLE、CONFIGURED、SWEEPING、FITTING、UPDATED、FAILED、ABORTED。迁移由事件触发,例如 config_ok、sweep_done、fit_ok、timeout、abort。

标定任务状态机与异常迁移 IDLE CONFIGURED SWEEPING FITTING UPDATED FAILED ABORTED config_ok start_sweep sweep_done fit_ok timeout / 参数越界 采集异常 拟合失败 / R² 过低 abort retry ≤ 3 次后回到 SWEEPING 异常迁移 重试路径 人工中止

状态机的价值在于:当 SWEEPING 因采集超时进入 FAILED 时,程序可以依据当前状态决定是重试、降级还是中止,而不是从头再跑一遍。重试次数、退避间隔、是否允许跳过该点,都应作为状态机的配置参数显式记录。

三、任务编排:把多个标定步骤组织成有依赖的执行图

真实标定往往不是单一扫描,而是“先粗扫找峰、再细扫定频、再标定脉冲幅度、最后更新门参数”的多步任务。任务编排要解决的是步骤之间的依赖与数据传递。常用做法是把每个标定步骤封装为独立任务,声明其输入依赖与输出产物,例如:

  • coarse_scan:输入为频率范围与步长,输出为候选峰列表;
  • fine_scan:依赖 coarse_scan 的候选峰,输出为精确频率;
  • rabi_calib:依赖精确频率,输出为 π 脉冲幅度;
  • update_gates:依赖 π 脉冲幅度,输出为更新后的门参数集。

编排器按依赖关系调度任务,只有前置任务的输出通过校验(例如峰信噪比大于阈值、拟合 R² 大于 0.9)才触发后继任务。这样,当 fine_scan 失败时,rabi_calib 不会被错误地基于一个不可信的频率继续执行。

四、异常处理策略:分类、判定与恢复

异常处理不能只写一个 try/except 包住全部代码,而应按异常来源分类,并为每类定义明确的判定条件与恢复动作。常见三类如下:

异常类型典型表现判定依据恢复策略
通信/超时仪器无响应、采集未在 timeout 内完成等待超过设定阈值重连仪器,重试当前点,最多 3 次
数据质量拟合 R² 过低、峰信噪比不足R² < 0.9 或 SNR < 5增加 shots 或缩小扫描范围后重采
参数越界更新后的频率超出允许范围超出预设上下限拒绝更新,回退到上一组有效参数并告警

其中“回退到上一组有效参数”要求流程在每次成功更新后保存一份参数快照。这样即使后续步骤失败,系统也能回到已知可用的工作点,而不是停留在半更新状态。对于数据质量类异常,重采时应记录本次与上次的 shots、扫描范围与拟合结果,便于事后判断是偶发噪声还是系统性问题。

建议在脚本中为每个任务维护一份结构化日志:任务名、开始/结束时间、输入参数、输出结果、异常类型、重试次数。这份日志既是排障依据,也是后续把标定结果回写到参数库的数据来源。

五、一个可复用的转化检查清单

把任意手动标定实验转为自动化流程时,可按以下清单逐项确认:

  1. 每个操作是否都有明确的输入参数与输出量?
  2. 每个等待是否都有超时判定,而不是无限阻塞?
  3. 每个判断是否都有可量化的阈值(R²、SNR、误差范围)?
  4. 流程是否建模为状态机,当前状态是否可查询?
  5. 多步任务之间的依赖与数据传递是否显式声明?
  6. 异常是否按来源分类,并配有对应的重试、降级或回退动作?
  7. 每次成功更新后是否保存参数快照,支持回退?

完成这七项检查后,手动实验才真正转化为可重复执行、可观测、可恢复的自动化标定流程。状态机负责“当前在哪”,任务编排负责“下一步做什么”,异常处理负责“出错怎么办”,三者共同构成自动化标定流程设计的骨架。