问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

使用Qiskit验证贝尔不等式:CHSH不等式的量子计算实验

创作时间:
作者:
@小白创作中心

使用Qiskit验证贝尔不等式:CHSH不等式的量子计算实验

引用
CSDN
1.
https://blog.csdn.net/m0_54373077/article/details/143492570

贝尔不等式是量子力学中的一个重要概念,用于描述量子纠缠和量子非局域性。CHSH不等式是贝尔不等式的一种具体形式,通过测量两个分离的量子系统来验证量子力学的预测是否与经典物理理论相矛盾。本实验将使用Qiskit在量子计算机上运行,演示如何违反CHSH不等式。

选择后端

首先,我们需要选择一个可用的量子计算后端。这里我们选择队列中作业数量最少的后端:

from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService(channel="ibm_quantum")
backend = service.least_busy(operational=True, simulator=False, min_num_qubits=127)
print(backend.name)

创建参数化的CHSH电路

接下来,我们创建一个参数化的CHSH电路。使用参数θ来编写电路:

from qiskit import QuantumCircuit
from qiskit.circuit import Parameter

theta = Parameter("$\\theta$")
chsh_circuit = QuantumCircuit(2)
chsh_circuit.h(0)
chsh_circuit.cx(0, 1)
chsh_circuit.ry(theta, 0)
chsh_circuit.draw(output="mpl", idle_wires=False, style="iqp")

设置相位值

我们需要创建一个相位值列表,范围从0到2π,共21个等间距的值:

import numpy as np

number_of_phases = 21
phases = np.linspace(0, 2 * np.pi, number_of_phases)
individual_phases = [[ph] for ph in phases]

定义可观测对象

在我们的实验中,我们将使用以下可观测对象:

from qiskit.quantum_info import SparsePauliOp

observable1 = SparsePauliOp.from_list([("ZZ", 1), ("ZX", -1), ("XZ", 1), ("XX", 1)])
observable2 = SparsePauliOp.from_list([("ZZ", 1), ("ZX", 1), ("XZ", -1), ("XX", 1)])

运行实验

使用Qiskit Runtime Estimator原型机来计算期望值:

from qiskit_ibm_runtime import EstimatorV2 as Estimator

estimator = Estimator(mode=backend)
pub = (
    chsh_isa_circuit,  # ISA circuit
    [[isa_observable1], [isa_observable2]],  # ISA Observables
    individual_phases,  # Parameter values
)
job_result = estimator.run(pubs=[pub]).result()
chsh1_est = job_result[0].data.evs[0]
chsh2_est = job_result[0].data.evs[1]

可视化结果

最后,我们将实验结果可视化:

import matplotlib.pyplot as plt
import matplotlib.ticker as tck

fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(phases / np.pi, chsh1_est, "o-", label="CHSH1", zorder=3)
ax.plot(phases / np.pi, chsh2_est, "o-", label="CHSH2", zorder=3)

# 经典界限
ax.axhline(y=2, color="0.9", linestyle="--")
ax.axhline(y=-2, color="0.9", linestyle="--")

# 量子界限
ax.axhline(y=np.sqrt(2) * 2, color="0.9", linestyle="-.")
ax.axhline(y=-np.sqrt(2) * 2, color="0.9", linestyle="-.")
ax.fill_between(phases / np.pi, 2, 2 * np.sqrt(2), color="0.6", alpha=0.7)
ax.fill_between(phases / np.pi, -2, -2 * np.sqrt(2), color="0.6", alpha=0.7)

# 设置x轴标签为π的单位
ax.xaxis.set_major_formatter(tck.FormatStrFormatter("%g $\\pi$"))
ax.xaxis.set_major_locator(tck.MultipleLocator(base=0.5))

# 设置标签和图例
plt.xlabel("Theta")
plt.ylabel("CHSH witness")
plt.legend()
plt.show()

注:本文部分内容参考自IBM Quantum Learning相关资料。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号