[ PROMPT_NODE_26302 ]
noise
[ SKILL_DOCUMENTATION ]
# 噪声建模与缓解
本指南涵盖了 Cirq 中的噪声模型、含噪声模拟、表征及错误缓解。
## 噪声通道
### 去极化噪声
python
import cirq
import numpy as np
# 单量子比特去极化通道
depol_channel = cirq.depolarize(p=0.01)
# 应用于量子比特
q = cirq.LineQubit(0)
noisy_op = depol_channel(q)
# 添加到电路
circuit = cirq.Circuit(
cirq.H(q),
depol_channel(q),
cirq.measure(q, key='m')
)
### 幅度阻尼
python
# 幅度阻尼 (T1 衰减)
gamma = 0.1
amp_damp = cirq.amplitude_damp(gamma)
# 在门之后应用
circuit = cirq.Circuit(
cirq.X(q),
amp_damp(q)
)
### 相位阻尼
python
# 相位阻尼 (T2 去相位)
gamma = 0.1
phase_damp = cirq.phase_damp(gamma)
circuit = cirq.Circuit(
cirq.H(q),
phase_damp(q)
)
### 位翻转噪声
python
# 位翻转通道
bit_flip_prob = 0.01
bit_flip = cirq.bit_flip(bit_flip_prob)
circuit = cirq.Circuit(
cirq.H(q),
bit_flip(q)
)
### 相位翻转噪声
python
# 相位翻转通道
phase_flip_prob = 0.01
phase_flip = cirq.phase_flip(phase_flip_prob)
circuit = cirq.Circuit(
cirq.H(q),
phase_flip(q)
)
### 广义幅度阻尼
python
# 广义幅度阻尼
p = 0.1 # 阻尼概率
gamma = 0.2 # 激发概率
gen_amp_damp = cirq.generalized_amplitude_damp(p=p, gamma=gamma)
### 重置通道
python
# 重置为 |0⟩ 或 |1⟩
reset_to_zero = cirq.reset(q)
# 重置表现为测量后跟随条件翻转
circuit = cirq.Circuit(
cirq.H(q),
reset_to_zero
)
## 噪声模型
### 常数噪声模型
python
# 对所有量子比特应用相同噪声
noise = cirq.ConstantQubitNoiseModel(
qubit_noise_gate=cirq.depolarize(0.01)
)
# 使用噪声进行模拟
simulator = cirq.DensityMatrixSimulator(noise=noise)
result = simulator.run(circuit, repetitions=1000)
### 门特定噪声
python
class CustomNoiseModel(cirq.NoiseModel):
"""对不同门类型应用不同噪声。"""
def noisy_operation(self, op):
# 单量子比特门: 去极化噪声
if len(op.qubits) == 1:
return [op, cirq.depolarize(0.001)(op.qubits[0])]
# 双量子比特门: 更高的去极化噪声
elif len(op.qubits) == 2:
return [
op,
cirq.depolarize(0.01)(op.qubits[0]),
cirq.depolarize(0.01)(op.qubits[1])
]
retu