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。
状态机的价值在于:当 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、扫描范围与拟合结果,便于事后判断是偶发噪声还是系统性问题。
五、一个可复用的转化检查清单
把任意手动标定实验转为自动化流程时,可按以下清单逐项确认:
- 每个操作是否都有明确的输入参数与输出量?
- 每个等待是否都有超时判定,而不是无限阻塞?
- 每个判断是否都有可量化的阈值(R²、SNR、误差范围)?
- 流程是否建模为状态机,当前状态是否可查询?
- 多步任务之间的依赖与数据传递是否显式声明?
- 异常是否按来源分类,并配有对应的重试、降级或回退动作?
- 每次成功更新后是否保存参数快照,支持回退?
完成这七项检查后,手动实验才真正转化为可重复执行、可观测、可恢复的自动化标定流程。状态机负责“当前在哪”,任务编排负责“下一步做什么”,异常处理负责“出错怎么办”,三者共同构成自动化标定流程设计的骨架。