Observable 批量计算¶
需要从同一个末态或同一批 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 的完整示例。