{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 含噪声量子线路\n",
"\n",
"[![下载Notebook](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/r2.0.0-alpha/resource/_static/logo_notebook.png)](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/r2.0.0-alpha/mindquantum/zh_cn/mindspore_noise.ipynb) \n",
"[![下载样例代码](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/r2.0.0-alpha/resource/_static/logo_download_code.png)](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/notebook/r2.0.0-alpha/mindquantum/zh_cn/mindspore_noise.py) \n",
"[![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/r2.0.0-alpha/resource/_static/logo_source.png)](https://gitee.com/mindspore/docs/blob/r2.0.0-alpha/docs/mindquantum/docs/source_zh_cn/noise.ipynb) \n",
"[![在ModelArts平台运行](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/r2.0.0-alpha/resource/_static/logo_modelarts.png)](https://authoring-modelarts-cnnorth4.huaweicloud.com/console/lab?share-url-b64=aHR0cHM6Ly9taW5kc3BvcmUtd2Vic2l0ZS5vYnMuY24tbm9ydGgtNC5teWh1YXdlaWNsb3VkLmNvbS9ub3RlYm9vay9yMi4wLjAtYWxwaGEvbWluZHF1YW50dW0vemhfY24vbWluZHNwb3JlX25vaXNlLmlweW5i&imageid=b711ac95-db2b-45b7-ab9b-98de275dd57e)\n",
"\n",
"## 概述\n",
"\n",
"在真实量子设备中,由于现阶段技术的不成熟,量子系统会由于量子操作、环境影响等各种因素而产生噪声。现阶段噪声对量子设备的影响不可忽略,因此在量子线路中加入对噪声的模拟,可以帮助我们寻找对噪声具有鲁棒性的量子算法,或设计减少噪声影响的纠错方案。\n",
"\n",
"噪声分为两种类型:相干噪声和非相干噪声。相干噪声一般来源于门操作中参数的噪声化,因此是幺正演化并且易于模拟;非相干噪声则来源于系统与环境的相互作用,因此通常是非幺正演化,会使量子系统从纯态变为混态,这个过程也被称为量子信道(Quantum channel)。混态的量子系统通常用密度矩阵的形式表示,但也可以通过“采样-统计”的蒙特卡洛法得到统计模拟结果。在MindQuantum中,我们用蒙特卡洛法来模拟量子信道,其中噪声门会以一定概率影响量子比特,通过对线路的多次采样,可以得到含噪声量子线路的模拟运行结果。\n",
"\n",
"量子信道的数学表示如下:\n",
"\n",
"$$\n",
"\\varepsilon(\\rho) =\\sum_{k=0}^{m-1} E_{k} \\rho E_{k}^{\\dagger}\n",
"$$\n",
"\n",
"其中$\\{E_k\\}$是Kraus算符,需要满足完备性条件$\\sum_k E_k^\\dagger E_k= I$;$\\rho$是量子态的密度矩阵,$\\varepsilon(\\rho)$是演化后的量子态。\n",
"\n",
"## 泡利信道(Pauli Channel)\n",
"\n",
"有一类噪声对量子线路的影响体现为,当进行了某种量子操作后,线路有概率额外受到一个泡利门的影响,被称为泡利信道。例如,经过某个操作后比特以一定概率被额外作用一个`X`门,即该比特以一定概率发生了翻转,这就是比特翻转信道(Bit Flip Channel),数学表示为:\n",
"\n",
"$$\n",
"\\varepsilon_{BF}( \\rho ) =(1-p)I \\rho I +pX \\rho X\n",
"$$\n",
"\n",
"其中$I$是单位矩阵,$X$是泡利`X`门。该信道对应的Kraus算符为:\n",
"\n",
"$$\n",
"E_0=\\sqrt{1-p}\\begin{bmatrix}\n",
"1 & 0\\\\\n",
"0 & 1\n",
"\\end{bmatrix}, E_{1} =\\sqrt{p}\\begin{bmatrix}\n",
"0 & 1\\\\\n",
"1 & 0\n",
"\\end{bmatrix}\n",
"$$\n",
"\n",
"其中$p$可以视为发生比特翻转的概率。由这个例子可以看到,一个纯态量子态经过比特翻转信道后会变为混态,该混态由原本的态和比特翻转后的态构成。\n",
"\n",
"同理,若比特以一定概率额外作用一个`Z`门称为相位翻转信道,`Y`门是比特相位翻转信道。若是`X`、`Y`、`Z`三个门平分概率,则称为去极化信道,该信道常常被用来描述真实量子硬件中门操作产生的噪声。此外,也可以使用通用的泡利信道自定义三个泡利门的概率。\n",
"\n",
"下面是这些信道的数学表示。\n",
"\n",
"泡利信道(Pauli Channel):\n",
"\n",
"$$\n",
"\\varepsilon _{Pauli}( \\rho ) =(1-p_x-p_y-p_z)\\rho + p_x X \\rho X+ p_y Y \\rho Y+p_z Z \\rho Z\n",
"$$\n",
"\n",
"相位翻转信道(Phase Flip Channel):\n",
"\n",
"$$\n",
"\\varepsilon _{PF}( \\rho ) =(1-p)\\rho +pZ \\rho Z\n",
"$$\n",
"\n",
"比特相位翻转信道(Bit-Phase Flip Channel):\n",
"\n",
"$$\n",
"\\varepsilon _{BPF}( \\rho ) =(1-p)\\rho +pY \\rho Y\n",
"$$\n",
"\n",
"去极化信道(Depolarizing Channel):\n",
"\n",
"$$\n",
"\\varepsilon _{DF}( \\rho ) =(1-p)\\rho + \\frac{p}{3}(X \\rho X+ Y \\rho Y+Z \\rho Z)\n",
"$$\n",
"\n",
"下面我们以去极化信道为例,看看如何将噪声信道加入线路中。"
]
},
{
"cell_type": "code",
"execution_count": 615,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": "",
"text/plain": [
""
]
},
"execution_count": 615,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from mindquantum.core.gates import DepolarizingChannel, X\n",
"from mindquantum.core.circuit import Circuit\n",
"\n",
"circ = Circuit()\n",
"circ += X.on(0)\n",
"circ += DepolarizingChannel(0.1).on(0)\n",
"circ.measure(0)\n",
"circ.svg()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"此时我们成功搭建了一个单比特的量子线路,该比特在作用`X`门后,会受到去极化噪声的影响,具体表现为有10%概率额外作用一个泡利门,其中`X`、`Y`、`Z`门平分概率。\n",
"\n",
"现在我们对该线路进行1000次模拟并输出采样结果:"
]
},
{
"cell_type": "code",
"execution_count": 616,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": "",
"text/plain": [
""
]
},
"execution_count": 616,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from mindquantum.simulator import Simulator\n",
"\n",
"sim = Simulator('mqvector', 1)\n",
"result = sim.sampling(circ, shots=1000)\n",
"result.svg()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"倘若没有噪声影响,量子态应该处于$|1\\rangle$态,测量结果全为1,但在以上结果中,约有7%的模拟结果测得为0,这就是去极化信道产生的影响。采样结果与预期中3.3%概率额外作用`X`门、`Y`门和`Z`门的预测结果相符。\n",
"\n",
"至此我们就完成了一次对含去极化噪声量子线路的模拟。\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 阻尼信道(Damping Channel)\n",
"\n",
"振幅阻尼信道(Amplitude Damping Channel)和相位阻尼信道(Phase Damping Channel)也是比较常见的信道,其中振幅阻尼信道描述了量子系统能量的耗散,相位阻尼信道则描述了系统量子信息的损失。具体来说,振幅阻尼信道会使量子比特从激发态回到基态,相位阻尼信道则会使量子比特从叠加态退回到坍缩态。\n",
"\n",
"振幅阻尼信道的表达形式为:\n",
"\n",
"$$\n",
"\\varepsilon_{AD}( \\rho ) =E_{0} \\rho E_{0}^{\\dagger } +E_{1} \\rho E_{1}^{\\dagger }\n",
"$$\n",
"\n",
"其中$E_{0}, E_{1}$是Kraus算符,\n",
"\n",
"$$\n",
"E_{0} =\\begin{bmatrix}\n",
"1 & 0\\\\\n",
"0 & \\sqrt{1-\\gamma }\n",
"\\end{bmatrix}, E_{1} =\\begin{bmatrix}\n",
"0 & \\sqrt{\\gamma }\\\\\n",
"0 & 0\n",
"\\end{bmatrix}\n",
"$$\n",
"\n",
"$\\gamma$为耗散系数。\n",
"\n",
"相位阻尼信道的表达形式为:\n",
"\n",
"$$\n",
"\\varepsilon_{PD}( \\rho ) =E_{0} \\rho E_{0}^{\\dagger } +E_{1} \\rho E_{1}^{\\dagger }\n",
"$$\n",
"\n",
"其中\n",
"\n",
"$$\n",
"E_{0} =\\begin{bmatrix}\n",
"1 & 0\\\\\n",
"0 & \\sqrt{1-\\gamma }\n",
"\\end{bmatrix}, E_{1} =\\begin{bmatrix}\n",
"0 & 0\\\\\n",
"0 & \\sqrt{\\gamma }\n",
"\\end{bmatrix}\n",
"$$\n",
"\n",
"$\\gamma$为损失系数。\n",
"\n",
"由以上两式可以发现,阻尼信道的Kraus算符不具有幺正性,因此阻尼信道不能表示为以一定概率作用量子门的形式。\n",
"接下来我们来看看两个阻尼信道的效果,首先是振幅阻尼信道。"
]
},
{
"cell_type": "code",
"execution_count": 617,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": "",
"text/plain": [
""
]
},
"execution_count": 617,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from mindquantum.core.gates import AmplitudeDampingChannel, H\n",
"\n",
"circ2 = Circuit()\n",
"circ2 += H.on(0)\n",
"circ2 += AmplitudeDampingChannel(0.8).on(0)\n",
"circ2.svg()"
]
},
{
"cell_type": "code",
"execution_count": 618,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1¦0⟩\n",
"\n",
"0.912870929175277¦0⟩\n",
"0.408248290463863¦1⟩\n",
"\n",
"0.912870929175277¦0⟩\n",
"0.408248290463863¦1⟩\n",
"\n",
"1¦0⟩\n",
"\n",
"1¦0⟩\n",
"\n"
]
}
],
"source": [
"# 将线路演化5次并打印量子态\n",
"for i in range(5):\n",
" sim.reset() # 初始化模拟器\n",
" sim.apply_circuit(circ2) # 演化线路\n",
" print(sim.get_qs(ket=True)) # 获取量子态\n",
" print()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"从以上采样结果可以看出,振幅阻尼信道作用在叠加态 $|\\psi\\rangle=|0\\rangle+|1\\rangle$态后会使其变为混态,混态的其中一部分是$|0\\rangle$态,另一部分仍是叠加态,但$|1\\rangle$态的振幅发生了衰减。该混态的比例由初始量子态和耗散系数$\\gamma$共同决定,初始量子态中的$|1\\rangle$态振幅越大,混态中$|0\\rangle$态的比例就越大。\n",
"\n",
"具体来说,对于初始量子态 $|\\psi\\rangle=a|0\\rangle+b|1\\rangle$,振幅阻尼信道作用后变成$|0\\rangle$态的概率为 $p=\\gamma b^2$,或以$(1-p)$的概率变为叠加态 $|\\psi'\\rangle=\\frac{1}{\\sqrt{1-\\gamma b^{2}}}(a|0\\rangle+b\\sqrt{1-\\gamma}|1\\rangle)$。\n",
"\n",
"由此可见,量子比特经过振幅阻尼信道后能量发生耗散,叠加态中激发态$|1\\rangle$态的部分减少,或者直接变为基态$|0\\rangle$态。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"接下来是相位阻尼信道。"
]
},
{
"cell_type": "code",
"execution_count": 619,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": "",
"text/plain": [
""
]
},
"execution_count": 619,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from mindquantum.core.gates import PhaseDampingChannel\n",
"\n",
"circ3 = Circuit()\n",
"circ3 += H.on(0)\n",
"circ3 += PhaseDampingChannel(0.7).on(0)\n",
"circ3.svg()"
]
},
{
"cell_type": "code",
"execution_count": 620,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1¦1⟩\n",
"\n",
"0.8770580193070293¦0⟩\n",
"0.4803844614152615¦1⟩\n",
"\n",
"0.8770580193070293¦0⟩\n",
"0.4803844614152615¦1⟩\n",
"\n",
"0.8770580193070293¦0⟩\n",
"0.4803844614152615¦1⟩\n",
"\n",
"1¦1⟩\n",
"\n"
]
}
],
"source": [
"# 将线路演化5次并打印量子态\n",
"for i in range(5):\n",
" sim.reset() # 初始化模拟器\n",
" sim.apply_circuit(circ3) # 演化线路\n",
" print(sim.get_qs(ket=True)) # 获取量子态\n",
" print()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"与振幅阻尼信道类似,相位阻尼信道作用在叠加态 $|\\psi\\rangle=|0\\rangle+|1\\rangle$态后同样会使其变为混态,混态的其中一部分是$|1\\rangle$态,另一部分仍是叠加态,但$|1\\rangle$态的振幅发生了衰减。该混态的比例由初始量子态和耗散系数$\\gamma$共同决定,初始量子态中的$|1\\rangle$态振幅越大,混态中$|1\\rangle$态的比例就越大。\n",
"\n",
"具体来说,对于初始量子态 $|\\psi\\rangle=a|0\\rangle+b|1\\rangle$,相位阻尼信道作用后变成$|1\\rangle$态的概率为 $p=\\gamma b^2$,或以$(1-p)$的概率变为叠加态 $|\\psi'\\rangle=\\frac{1}{\\sqrt{1-\\gamma b^{2}}}(a|0\\rangle+b\\sqrt{1-\\gamma}|1\\rangle)$。\n",
"\n",
"由此可见,量子比特经过相位阻尼信道后并没有损失能量,但量子信息(这里体现为量子态叠加)发生了损失。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 实例演示——含噪声QAOA\n",
"\n",
"量子近似优化算法(Quantum Approximate Optimization Algorithm)是利用量子计算机来近似解决组合优化问题的量子算法,详尽的介绍可以参考教案[quantum_approximate_optimization_algorithm.ipynb](https://mindspore.cn/mindquantum/docs/zh-CN/r0.8/quantum_approximate_optimization_algorithm.html),在此我们以该算法为案例,看看引入噪声会对量子算法产生怎样的影响。在这里我们与QAOA教案保持一致,解决同一个图的Max-Cut问题。\n",
"\n",
"由于目前模拟器采用蒙特卡洛法模拟噪声,每次演化线路的结果具有随机性,与真实量子计算机类似,但也因此需要多次采样并分析统计结果,即每次计算哈密顿量期望值之前都需要先重新演化线路。与此同时,我们也无法直接得到含噪声量子线路的梯度,因此需要采用非梯度的优化方法。Nelder-Mead法可以得到多元标量函数的最小值,这里我们采用它来优化含参线路,得到目标哈密顿量期望值的最小值。"
]
},
{
"cell_type": "code",
"execution_count": 626,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"max cut: 4.626187448255814\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"