跳转至

Observable 批量计算

English version

需要从同一个末态或同一批 trajectory 计算多个 Pauli Observable 时,使用 ObservableSet:

from cascaqit import LocalBackend, ObservableSet, PauliZ, PauliZZ

observables = ObservableSet([PauliZ("q0"), PauliZZ("q0", "q1")])
result = LocalBackend().run(program, observables=observables).result()
batch = result.observable_batch

集合会保留声明顺序,名称不能重复。常用单项可直接使用 PauliI、PauliX、PauliY、PauliZ 和 PauliZZ;XX、XYZ 等有序乘积使用 PauliProduct。Target 名称遵循程序的逻辑顺序,通常是 q0、q1 等。

Backend 不会为每个 Observable 重跑程序。同一 batch 的所有 item 都来自一个末态,因此共享 source_kind 和 source_hash;参数 sweep 中的每个成功 child result 则拥有自己的 batch。

读取结果

每个 item 包含:

  • expectation:Pauli Observable 的期望值。
  • variance:量子测量方差,不是估计器不确定性。
  • standard_error:trajectory 或 shot 均值的标准误;精确 state/density 计算为零。
  • sample_count:统计估计使用的 trajectory 或 shot 数;精确计算不设置。
  • source_kind、source_hash 和 estimator_kind:状态来源和计算方式。
状态来源 Estimator 含义
State vector 或 subspace exact_state 精确计算期望值和方差,没有 sampling error。
Density matrix exact_density 精确 trace 计算,没有 sampling error。
Trajectory batch trajectory_mean 对含噪运行使用的 trajectories 计算均值和标准误。
Z-basis samples sample_mean 只支持 I/Z 乘积,至少需要两个 shots。

噪声与 Sweep

observables 可以与 noise、options 或 sweep 一起传入。例如,trajectory method 会复用本次含噪运行的 trajectories 计算 Observable:

result = LocalBackend().run(
    hybrid_program,
    noise=noise_model,
    observables=observables,
    options=SimulationOptions(method="trajectory", trajectories=256),
).result()

对于 sweep,从每个成功的 item.result.observable_batch 读取结果。Aggregate scan 不会虚构一个合并后的末态 batch。

当前限制

  • ObservableSet 中的每一项仍是系数为一的 Pauli product,并从同一个直接 state、density、trajectory batch 或 sample 来源求值。带权 Hamiltonian 测量规划属于独立的 VQE 路径:VQE.evaluate_sampled() 用于 standalone 固定参数点,standalone 与 Unified Problem 的采样优化则复用同一套显式局部基变换和稳定 QWC 分组。两条路径都不支持一般对易组对角化。
  • 只计算最终状态,不支持中途 Observable capture。
  • Z-basis counts 无法在没有 basis rotation 的情况下确定 X/Y,因此 sample estimator 会拒绝这类请求。
  • 被 atom-loss noise 移除的 site 不能继续作为 Observable target,校验会在执行前报错。
  • Observable batch 从 ResultIR 派生,不会替代程序、state、counts 或 trajectory 记录。

运行 python3 examples/user/observable_batch_workflow.py 可查看 Digital、Analog、Hybrid、带噪 trajectory 和三点 sweep 的完整示例。

SDK 1.0.8a · `8b227bff`