给实验加入物理噪声¶
使用 NoiseChannel 声明通道,将它们放进 NoiseModel,通过 LocalBackend.run(noise=...) 交给执行器。先运行理想对照,再一次加入一种通道;同时记录程序、参数、种子、演化设置和采样次数,才能解释差异来自哪里。
| 通道 | 对应位置与含义 |
|---|---|
| preparation | 初始状态的独立比特翻转 |
| dephasing | Analog 演化中的相位翻转过程,参数是速率 |
| gate | 每个 Digital 门后的独立比特翻转 |
| idle | 明确时长的 Digital 空闲区间退相干 |
| crosstalk | 指定控制时段与目标上的相干 XX 项 |
| boundary | Hybrid 块边界的振幅阻尼 |
| atom_loss | Analog 结束处的占据擦除 |
| readout | 末端测量记录的非对称混淆,不改变量子态 |
通道必须符合程序内容。只有 Digital 门的程序没有 Analog 退相干时长;原子丢失需要轨迹方法;边界通道需要 Hybrid 程序。模型对象能创建,不意味着任意组合都能执行。概率、速率和时长的单位不能互换。
从一个可解析的通道开始¶
下面在 H–Analog–H 实验中加入退相干,同时计算理想对照和解析预测。代码中的非零 Analog 时长是噪声作用区间。
"""在连续 Hybrid 状态演化中施加 dephasing。
``NoiseModel`` 会选择含噪状态引擎,让 noise channel 直接作用于 density matrix,
而不是在得到 counts 后修改统计值。结果记录所用 method、channel 顺序和状态来源。
"""
from __future__ import annotations
import json
from cascaqit import (
AHSProgram,
AtomRegister,
Circuit,
HybridProgram,
LocalBackend,
Waveform,
)
from cascaqit.simulators import NoiseChannel, NoiseModel, SimulationOptions
def main() -> None:
"""使用 exact density-matrix dephasing 运行单 site D-A-D 程序。"""
analog = AHSProgram(
AtomRegister.line(count=1, spacing=5.0),
program_id="lesson.hybrid.noise.analog",
).drive(
rabi=Waveform.constant(0.4, duration=0.1),
detuning=Waveform.constant(0.0, duration=0.1),
phase=0.0,
)
program = (
HybridProgram("lesson.hybrid.noise")
.digital("prepare", Circuit(1).h(0))
.analog("evolve", analog)
.digital("readout_rotation", Circuit(1).h(0))
.measure_all()
)
noise = NoiseModel("lesson.hybrid.dephasing", (NoiseChannel.dephasing(0.3),))
result = (
LocalBackend(seed=104, analog_time_steps=4)
.run(
program,
noise=noise,
shots=32,
options=SimulationOptions(
method="density_matrix",
integrator="fixed_step_krylov",
max_steps=4,
),
)
.result()
)
report = result.metadata["noise_report"]
ideal = LocalBackend(seed=104, analog_time_steps=4).run(program, shots=32).result()
payload = {
"track": "hybrid_researcher",
"level": "advanced",
"lesson": "physical_noise",
"facts": {
"method": result.metadata["simulation_execution_config"]["method"],
"truthfulness": result.metadata["simulation_truthfulness"],
"channel_types": report["applied_channel_types"],
"noise_report_hash_present": len(result.metadata["noise_report_hash"])
== 64,
"probabilities": result.probabilities,
"ideal_probabilities": ideal.probabilities,
"physical_application_count": report["physical_application_count"],
"measurement_application_count": report["measurement_application_count"],
"counts_total": sum(result.counts.values()),
},
"boundaries": {
"hardware_execution": False,
"cloud_execution": False,
"network_accessed": False,
"credentials_loaded": False,
},
}
print(json.dumps(payload, sort_keys=True))
if __name__ == "__main__":
main()
python examples/user/tracks/hybrid_researcher/04_advanced_physical_noise_zh.py
{
"boundaries": {
"cloud_execution": false,
"credentials_loaded": false,
"hardware_execution": false,
"network_accessed": false
},
"facts": {
"channel_types": [
"dephasing"
],
"counts_total": 32,
"ideal_probabilities": {
"0": 1.0,
"1": 0.0
},
"measurement_application_count": 0,
"method": "density_matrix",
"noise_report_hash_present": true,
"physical_application_count": 1,
"probabilities": {
"0": 0.9852227667742534,
"1": 0.014777233225746552
},
"truthfulness": "physical_state_evolution"
},
"lesson": "physical_noise",
"level": "advanced",
"track": "hybrid_researcher"
}
先比较理想与含噪状态概率,再看有限采样计数。读出误差只改测量记录,不应把它造成的频率变化解释成状态演化。增加 shots 可减少测量频率波动,不能消除物理噪声;增加 trajectories 针对的是轨迹估计误差。
当 method="auto" 时,执行器会结合噪声和资源选择方法。需要精确密度矩阵对照时显式指定相应方法,并接受不支持组合的拒绝。算法接口可能比通用后端限制更严,例如含噪精确 VQE 目标要求密度矩阵路径。
通道参数见 NoiseChannel,组合规则见 NoiseModel。继续比较多种误差时使用含噪 Hybrid 项目。旧 NoiseModelIR 和确定性 counts 后处理不等于这里的物理噪声演化。