Skip to content

噪声 -- NoiseModel, QuantumError, NoiseOpType ​

pyqpanda3 中噪声建模的 API 参考。噪声框架通过在量子操作上应用错误信道来模拟真实的量子硬件。

NoiseModel ​

管理模拟期间应用的量子错误和读出错误的集合。

签名 ​

python
class NoiseModel:
    def __init__() -> None

方法 ​

NoiseModel.is_enabled ​

python
is_enabled() -> bool

检查噪声模型是否包含任何错误。

NoiseModel.copy / copy / deepcopy ​

python
copy() -> NoiseModel

0.5.0 新增:copy() 返回独立的浅拷贝,且模型实现了 copy 与 deepcopy 协议,copy.copy(model) 与 copy.deepcopy(model) 均按预期工作。

python
import copy
from pyqpanda3.core import NoiseModel

model = NoiseModel()
model.add_read_out_error([[0.9, 0.1], [0.2, 0.8]], 0)

duplicate = copy.deepcopy(model)
snapshot = model.copy()
print(duplicate is not model, snapshot is not model)

运行结果:

text
True True

约定(0.5.0):Kraus 算符矩阵为行主序、读出矩阵按 M[true][measured] 索引、量子误差作用于其所附着指令之后、按量子比特的局部误差覆盖默认误差而非与之复合。

NoiseModel.add_read_out_error ​

python
add_read_out_error(probs: list[list[float]], qubit: int) -> None
参数类型说明
probslist[list[float]]混淆矩阵 M 按 M[true][measured] 索引(0.5.0 起):元素 [i][j] 为真实状态为 i 时记录到结果 j 的概率,即行索引为真实态、列索引为测量结果。
qubitint应用读出错误的量子比特索引

NoiseModel.add_all_qubit_read_out_error ​

python
add_all_qubit_read_out_error(probs: list[list[float]]) -> None
参数类型说明
probslist[list[float]]混淆矩阵 M 按 M[true][measured] 索引(0.5.0 起):元素 [i][j] 为真实状态为 i 时记录到结果 j 的概率,即行索引为真实态、列索引为测量结果。

NoiseModel.add_quantum_error(指定量子比特) ​

python
add_quantum_error(error: QuantumError, gate_type: GateType, qubits: list[int]) -> None
add_quantum_error(error: QuantumError, gate_types: list[GateType], qubits: list[int]) -> None
参数类型说明
errorQuantumError要添加的量子错误
gate_type(s)GateType 或 list[GateType]应用错误的门类型
qubitslist[int]应用错误的量子比特索引

NoiseModel.add_all_qubit_quantum_error ​

python
add_all_qubit_quantum_error(error: QuantumError, gate_type: GateType) -> None
add_all_qubit_quantum_error(error: QuantumError, gate_types: list[GateType]) -> None
参数类型说明
errorQuantumError要添加的量子错误
gate_type(s)GateType 或 list[GateType]应用错误的门类型

示例 ​

python
from pyqpanda3.core import (
    NoiseModel, GateType,
    pauli_x_error, depolarizing_error,
    CPUQVM, QProg, H, CNOT, measure
)

# 创建噪声模型
model = NoiseModel()

# 向所有 H 门添加单量子比特去极化噪声
model.add_all_qubit_quantum_error(depolarizing_error(0.01), GateType.H)

# 向所有 CNOT 门添加双量子比特泡利-X 噪声
model.add_all_qubit_quantum_error(pauli_x_error(0.02), GateType.CNOT)

# 含噪声运行
qvm = CPUQVM()
prog = QProg()
prog << H(0) << CNOT(0, 1) << measure(0, 0) << measure(1, 1)
qvm.run(prog, 1000, model)
print(qvm.result().get_counts())

运行结果(示例输出,每次运行结果不同):

{'01': 18, '00': 481, '10': 18, '11': 483}

QuantumError ​

表示量子错误信道,可以通过 Kraus 矩阵或泡利错误概率指定。

签名 ​

python
class QuantumError:
    def __init__() -> None
    def __init__(karus_matrices: list[list[complex]]) -> None
    def __init__(probabilities: dict[str, float]) -> None
参数类型说明
karus_matriceslist[list[complex]]Kraus 矩阵。每个内部列表是一个展平的(按行主序)矩阵,例如 2x2 Kraus 算符变为 [a, b, c, d]
probabilitiesdict[str, float]泡利错误标签和概率(例如 {"X": 0.01})

方法 ​

QuantumError.tensor ​

python
tensor(quantum_error: QuantumError) -> QuantumError
参数类型说明
quantum_errorQuantumError要进行张量积操作的量子错误

与另一个量子错误进行张量积操作。

QuantumError.expand ​

python
expand(quantum_error: QuantumError) -> QuantumError
参数类型说明
quantum_errorQuantumError要扩展的量子错误

将错误扩展到更大的量子比特系统。

QuantumError.compose ​

python
compose(quantum_error: QuantumError) -> QuantumError
参数类型说明
quantum_errorQuantumError要组合的量子错误

将错误与另一个量子错误组合。

QuantumError.qubit_num ​

python
qubit_num() -> int

错误影响的量子比特数。

QuantumError.error_type ​

python
error_type() -> NoiseOpType

错误表示的类型(Kraus 矩阵或噪声线路)。

QuantumError.error_circuit ​

python
error_circuit(qubits: list[int]) -> QCircuit
参数类型说明
qubitslist[int]应用错误线路的量子比特索引

错误的线路表示。

QuantumError.error_karus ​

python
error_karus(qubits: list[int]) -> Karus
参数类型说明
qubitslist[int]获取 Kraus 矩阵的量子比特索引

错误的 Kraus 矩阵表示。返回的 Karus 对象是一个 C++ 类型,在 Python 端的互操作性有限。注意:此方法对 KARUS_MATRIICES 类型(通过 Kraus 矩阵创建)的错误能正确工作,但对 NOISE 类型(通过泡利概率或工厂函数如 depolarizing_error 创建)的错误会导致挂起。

Karus ​

Karus 封装了一组 Kraus 算符及其作用的量子比特,用于噪声信道表示。用户通常通过 QuantumError.error_karus(qubits) 获取该对象,也可以直接构造。

签名 ​

python
class Karus:
    def __init__(qubits: list[int], matrices: list[list[complex]])
    def remap(remap_qubits: list[int]) -> Karus
    def remap(remap_qubits: dict[int, int]) -> Karus
    def qubits() -> list[int]
    def karus_matrices() -> list[list[complex]]

Karus.init ​

python
Karus(qubits: list[int], matrices: list[list[complex]])

从显式的量子比特索引和 Kraus 矩阵列表构造 Kraus 信道。

参数 ​

参数类型说明
qubitslist[int]信道作用的物理量子比特索引。
matriceslist[list[complex]]展平的 Kraus 算符列表。每个内部列表是一个按行主序展平的矩阵,对于 n 量子比特信道,长度为 4^n。

Karus.remap(按列表) ​

python
Karus.remap(remap_qubits: list[int]) -> Karus

使用索引表重映射此 Kraus 信道的量子比特。当前量子比特索引 i 被替换为 remap_qubits[i]。

参数 ​

参数类型说明
remap_qubitslist[int]旧量子比特索引到新索引的映射表。

返回 ​

重映射后自身的引用。

Karus.remap(按字典) ​

python
Karus.remap(remap_qubits: dict[int, int]) -> Karus

使用字典重映射此 Kraus 信道的量子比特。字典中未出现的量子比特保持不变。

参数 ​

参数类型说明
remap_qubitsdict[int, int]旧量子比特索引到新索引的映射字典。

返回 ​

重映射后自身的引用。

Karus.qubits ​

python
Karus.qubits() -> list[int]

返回此 Kraus 信道作用的量子比特索引。

返回 ​

与 Kraus 矩阵关联的量子比特索引列表。

Karus.karus_matrices ​

python
Karus.karus_matrices() -> list[list[complex]]

返回展平的 Kraus 矩阵。

返回 ​

此信道存储的展平 Kraus 矩阵列表。

示例 ​

python
from pyqpanda3.core import Karus, QuantumError, depolarizing_error

# 直接构造
k = Karus([0], [[1+0j, 0j, 0j, 1+0j]])
print(k.qubits())            # [0]
print(len(k.karus_matrices()))  # 1

# 通过 QuantumError 获取
err = depolarizing_error(0.01)
k2 = err.error_karus([2])
print(k2.qubits())           # [2]

# 重映射量子比特
k2.remap({2: 5})
print(k2.qubits())           # [5]

NoiseOpType ​

噪声操作表示类型的枚举。

值说明
KARUS_MATRIICES通过 Kraus 矩阵表示的错误
NOISE通过噪声线路表示的错误

错误工厂函数 ​

pauli_x_error ​

python
pauli_x_error(prob: float) -> QuantumError
参数类型说明
probfloat泡利-X 错误的概率

创建单量子比特泡利-X(比特翻转)错误信道。以概率 p 应用 X 门。

E(ρ)=(1−p)ρ+pXρX

pauli_y_error ​

python
pauli_y_error(prob: float) -> QuantumError

创建泡利-Y(比特相位翻转)错误信道。

E(ρ)=(1−p)ρ+pYρY

pauli_z_error ​

python
pauli_z_error(prob: float) -> QuantumError

创建泡利-Z(相位翻转)错误信道。

E(ρ)=(1−p)ρ+pZρZ

depolarizing_error ​

python
depolarizing_error(prob: float) -> QuantumError

创建去极化错误信道。以概率 p 将状态替换为最大混合态 I/2。

E(ρ)=(1−p)ρ+pI2

amplitude_damping_error ​

python
amplitude_damping_error(prob: float) -> QuantumError

创建振幅阻尼(T1 弛豫)错误信道,模拟能量耗散。

E(ρ)=E0ρE0†+E1ρE1†

其中 E0=[1001−γ],E1=[0γ00]。

phase_damping_error ​

python
phase_damping_error(prob: float) -> QuantumError

创建相位阻尼(T2 去相位)错误信道,模拟相位相干性的损失。

E(ρ)=[ρ00(1−λ)ρ01(1−λ)ρ10ρ11]

decoherence_error ​

python
decoherence_error(T1: float, T2: float, time_param: float) -> QuantumError
参数类型说明
T1floatT1(振幅阻尼)弛豫时间
T2floatT2(相位阻尼)去相位时间
time_paramfloat门操作时间

创建组合退相干错误,同时模拟 T1(振幅阻尼)和 T2(相位阻尼)过程。

另见 ​

Released under the MIT License.