QPanda3
Supported by OriginQ
载入中...
搜索中...
未找到
噪声

上一章: 量子模拟器
下一章: 量子线路编译


简介

量子虚拟机中的噪声模拟

在实际的量子计算机中,由于量子比特的物理特性,计算错误是不可避免的。为了在量子虚拟机中更好地模拟这些错误,QPanda3 引入多种噪声模型和噪声错误,从而让模拟过程更加接近真实的量子计算机,噪声模型和噪声错误可以对量子比特,量子逻辑门和误差参数进行精细化调节,满足多样化的复杂噪声场景。

噪声模型介绍

  • 振幅阻尼噪声(Amplitude Damping Error)

    amplitude_damping_error 表示量子比特的弛豫噪声模型,其 Kraus 算子定义如下:

    \[ K_1 = \begin{bmatrix} 1 & 0 \\ 0 & \sqrt{1 - p} \end{bmatrix}, \quad K_2 = \begin{bmatrix} 0 & \sqrt{p} \\ 0 & 0 \end{bmatrix} \]

    此模型需要一个噪声参数。

  • 相位翻转噪声(Pauli-Z Error)

    pauli_z_error 表示量子比特的相位翻转噪声,其 Kraus 算子定义如下:

    \[ K_1 = \begin{bmatrix} \sqrt{1 - p} & 0 \\ 0 & \sqrt{1 - p} \end{bmatrix}, \quad K_2 = \begin{bmatrix} \sqrt{p} & 0 \\ 0 & -\sqrt{p} \end{bmatrix} \]

    此模型需要一个噪声参数。

  • 退相干噪声(Decoherence Error)

    decoherence_error 结合了弛豫噪声(Relaxation Noise)去相干噪声(Dephasing Noise)。它们的关系如下:

    \[ P_{\text{damping}} = 1 - e^{-\frac{t_{\text{gate}}}{T_1}}, \quad P_{\text{dephasing}} = 0.5 \times \big(1 - e^{-(\frac{t_{\text{gate}}}{T_2} - \frac{t_{\text{gate}}}{2T_1})}\big) \]

    其组合后的 Kraus 算子为:

    \[ K_1 = K_{1_{\text{damping}}} K_{1_{\text{dephasing}}}, \quad K_2 = K_{1_{\text{damping}}} K_{2_{\text{dephasing}}}, \quad K_3 = K_{2_{\text{damping}}} K_{1_{\text{dephasing}}}, \quad K_4 = K_{2_{\text{damping}}} K_{2_{\text{dephasing}}} \]

    此模型需要三个噪声参数。

  • 去极化噪声(Depolarizing Error)

    depolarizing_error 表示去极化噪声,即单个量子比特可能以一定概率坍缩为完全混合态(I/2)。其 Kraus 算子如下:

    \[ K_1 = \sqrt{1 - 3p/4} \cdot I, \quad K_2 = \sqrt{p}/2 \cdot X, \quad K_3 = \sqrt{p}/2 \cdot Y, \quad K_4 = \sqrt{p}/2 \cdot Z \]

    其中, \(I\)、 \(X\)、 \(Y\)、 \(Z\) 代表量子逻辑门矩阵。

    此模型需要一个噪声参数。

  • 比特翻转噪声(Pauli X Error)

    pauli_x_error 表示比特翻转噪声。其 Kraus 算子定义如下:

    \[ K_1 = \begin{bmatrix} \sqrt{1 - p} & 0 \\ 0 & \sqrt{1 - p} \end{bmatrix}, \quad K_2 = \begin{bmatrix} 0 & \sqrt{p} \\ \sqrt{p} & 0 \end{bmatrix} \]

    此模型需要一个噪声参数。

  • 比特相位翻转噪声(Pauli Y Error)

    pauli_y_error 表示比特-相位翻转噪声(Bit-Phase Flip Noise)。其 Kraus 算子为:

    \[ K_1 = \begin{bmatrix} \sqrt{1 - p} & 0 \\ 0 & \sqrt{1 - p} \end{bmatrix}, \quad K_2 = \begin{bmatrix} 0 & -i \times \sqrt{p} \\ i \times \sqrt{p} & 0 \end{bmatrix} \]

    此模型需要一个噪声参数。

  • 相位阻尼噪声(phase_damping_error)

    phase_damping_error 表示相位阻尼噪声。其 Kraus 算子为:

    \[ K_1 = \begin{bmatrix} 1 & 0 \\ 0 & \sqrt{1 - p} \end{bmatrix}, \quad K_2 = \begin{bmatrix} 0 & 0 \\ 0 & \sqrt{p} \end{bmatrix} \]

    此模型需要一个噪声参数。

噪声误差

pyqpanda3 中,噪声误差和噪声模型是分开的。首先需要构造噪声误差,然后通过噪声模型进行设置。模型可以设定支持哪些量子比特以及具体的量子逻辑门。

NoiseModel 可用于设置噪声误差,包括应用到具体的量子比特和量子逻辑门。

执行结果如下所示:

{'001': 468, '010': 479, '011': 24, '000': 29}

双门噪声设置和应用

对于双量子逻辑门噪声,使用方式类似,可以选择应用全部的量子比特,也可以选择指定多个比特之间应用双门噪声

from pyqpanda3.core import QCircuit,H,RX,CNOT,CZ,QProg,CPUQVM,measure
from pyqpanda3.core import NoiseModel,pauli_x_error,GateType
circuit = QCircuit(3)
circuit << H(0)
circuit << RX(0, 3.6)
circuit << CNOT(0, 1)
circuit << CZ(0, 1)
circuit << CNOT(1, 2)
prog = QProg()
prog << circuit
prog << measure([0,1,2],[0,1,2])
model = NoiseModel()
# 设置所有量子比特上的噪声
model.add_all_qubit_quantum_error(pauli_x_error(0.9),GateType.CZ)
# 设置指定量子比特上的噪声
model.add_quantum_error(pauli_x_error(0.9),GateType.CNOT,[0, 1])
machine = CPUQVM()
machine.run(prog, 1000, model)
print(machine.result().get_counts())

量子噪声错误和噪声模型的接口加载使用方式同样适用于 GPUQCM,staablizer和DensityMatrix