📜  在Python中使用 IBM Qiskit 构建简单的量子电路

📅  最后修改于: 2022-05-13 01:54:22.329000             🧑  作者: Mango

在Python中使用 IBM Qiskit 构建简单的量子电路

Qiskit是一个用于量子计算的开源框架。它提供了用于创建和操作量子程序并在 IBM Q Experience 上的原型量子设备或本地计算机上的模拟器上运行它们的工具。让我们看看我们如何创建简单的 Quantum 电路并在真实的 Quantum 计算机上对其进行测试或在我们的计算机中进行本地模拟。 Python是理解 Quantum 程序的必备先决条件,因为Qiskit本身是使用Python开发的。

在进入主题之前,首先也是最重要的部分是安装QiskitAnaconda。有关 anaconda 安装的分步指南,请参阅以下文章。

  • 如何在 Windows 上安装 Anaconda?
  • 如何在 Linux 上安装 Anaconda?

安装

要安装 qiskit,请按照以下步骤操作:

  • 打开 Anaconda 提示并输入
pip install qiskit
  • 就是这样,这将安装所有必要的软件包。
  • 接下来,打开 Jupyter Notebook。
  • 使用以下命令导入 qiskit。
import qiskit

要访问 IBM Quantum Systems:

  1. 创建一个免费的 IBM Quantum Experience 帐户。
  2. 导航到我的帐户。
  3. 单击Copy Token 将令牌复制到剪贴板(Token 代表访问 IBM Quantum 设备的 API)。
  4. 运行以下命令(Jupyter Notebook)将您的 API 令牌存储在本地,以供以后在名为qiskitrc的配置文件中使用。将MY_API_TOKEN替换为 API 令牌。
from qiskit import IBMQ
IBMQ.save_account('MY_API_TOKEN')

入门

首先,我们将导入必要的包。导入行导入程序所需的基本元素(包和函数)。

代码示例中使用的导入是:

  • QuantumCircuit:保存你所有的量子操作;量子系统的指令
  • 执行:运行你的电路
  • Aer :处理模拟器后端
  • qiskit.visualization:启用数据可视化,例如plot_histogram

初始化变量

在下一行代码中,在称为电路的量子电路中初始化两个处于零状态的量子位,以及处于零状态的两个经典位。

添加门

接下来的三行代码,以circuit . 开头,添加了控制电路中量子位的门。

详细说明

  • QuantumCircuit.h(0 ):量子位0上的 Hadamard 门,使其进入叠加状态
  • QuantumCircuit.cx(0, 1 ):对控制 qubit 0和目标 qubit 1的受控非操作 ( C x ),使 qubits 处于纠缠状态
  • QuantumCircuit.measure([0,1], [0,1] ):第一个参数索引量子比特,第二个参数索引经典比特。第n个量子比特的测量结果将存储在第n个经典比特中。

这个特殊的三个门一个接一个地添加到电路中形成了贝尔状态,|

|?? = (|00? + |11?) / ?2

在这种状态下,有 50% 的机会发现两个量子位的值都为零,并且有 50% 的机会发现两个量子位的值都为 1。

模拟实验

下一行代码调用特定的模拟器框架——在本例中,它调用 Qiskit Aer,这是一个高性能模拟器,提供多个后端来实现不同的模拟目标。在这个程序中,我们将使用qasm_simulator 。该电路的每次运行都会产生位字符串'00''11' 。程序在execute方法的shots参数中指定了运行电路的次数( job = execute(电路,模拟器,shots=1000) )。模拟的镜头数量设置为1000 (默认为1024 )。获得结果对象后,您可以通过get_counts(circuit)方法访问计数。这为您提供了实验的总体结果。输出位字符串大约有 50% 的时间是“00” 。该模拟器不模拟噪声。任何与 50% 的偏差都是由于样本量小。

可视化电路

QuantumCircuit.draw() (由代码中的circuit.draw()调用)以教科书和研究文章中使用的各种样式之一显示您的电路。在可视化命令后得到的电路中,量子比特的排列顺序是上位量子位零,下位量子位一位。电路从左到右读取,代表时间的流逝。

可视化结果

Qiskit 提供了许多可视化,包括函数plot_histogram ,以查看您的结果。

plot_histogram(counts)

观察到 |00? 的概率(相对频率)?和 |11?状态是通过计算相应的计数并除以射击总数来计算的。

下面是实现。

Python3
# python program to create a simple Quantum circuit
  
  
%matplotlib inline
from qiskit import QuantumCircuit, execute, Aer, IBMQ
from qiskit.compiler import transpile, assemble
from qiskit.tools.jupyter import *
from qiskit.visualization import *
  
# Loading your IBM Q account(s)
provider = IBMQ.load_account()
   
# Create a Quantum Circuit acting
# on the q register
circuit = QuantumCircuit(2, 2)
   
# Add a H gate on qubit 0
circuit.h(0)
   
# Add a CX (CNOT) gate on control 
# qubit 0 and target qubit 1
circuit.cx(0, 1)
   
# Map the quantum measurement to the
# classical bits
circuit.measure([0,1], [0,1])
   
# Use Aer's qasm_simulator
simulator = Aer.get_backend('qasm_simulator')
   
# Execute the circuit on the qasm
# simulator
job = execute(circuit, simulator, shots=1000)
   
# Grab results from the job
result = job.result()
   
# Return counts
counts = result.get_counts(circuit)
print("\nTotal count for 00 and 11 are:",counts)
  
# Draw the circuit
circuit.draw()


Python3
# Plot a histogram
plot_histogram(counts)


输出:

绘制直方图

Python3

# Plot a histogram
plot_histogram(counts)

输出: