量子编程探秘:从“你好世界”到“你好量子世界”

原文作者:Rahul Kumar
发表时间:2018 年 7 月 8 号

量子编程探秘:从“你好世界”到“你好量子世界”



介绍

我们已经到了一个时代,我们现在可以在类似于经典计算的量子电路上实现基本的 AND,OR 和 XOR 逻辑,我们将这个时代称为量子时代。

本文是应用量子计算(AQC)的简单介绍,我们将在真实量子芯片上编写Hello World程序????️。

“等等…… 我没有量子计算机,那我该怎么办!??”

莫慌,这里有一个非常简单的解决办法。像 IBM 和 Google 这样的公司,他们真的制造出量子设备,我们不需要任何的前期准备,就可以利用它们在真正的设备上组建和测试我们的程序。

这是我们的 “技术堆栈”:

  • Google Colab
    我们用来运行代码和做实验的云平台

  • QISKit
    一个用来量子编程的 Python 库

  • IBM Q
    来自 IBM 网络的 QuBits芯片组

那就让我们开始吧!!????️

背景

什么是量子计算机

量子计算机基于量子的比特,也称为量子比特。它们有两个可能的值(状态)为 0 和 1,类似于我们在经典计算机中的值。但量子力学定律也允许其他可能性,我们称之为叠加态。下图是一台由 IBM 创造结合了量子寄存器的量子计算机。

量子编程探秘:从“你好世界”到“你好量子世界”

为什么需要量子计算

量子计算可以通过在量子比特(量子比特)的操纵中利用叠加和纠缠来实现某些类问题的指数加速。一个这样的例子是在人工智能空间中使用量子计算,我们可以实现一种优化算法,该算法可以使用叠加的属性并且有助于加速优化问题,这最终可以导致更好和更快的学习算法。

量子退火优化器:一次计算多个局部和全局最小值。

量子编程探秘:从“你好世界”到“你好量子世界”

量子计算机为何使我如此兴奋

在经典 Boltzmann 机器中使用量子退火,重量发现过程可以做成量子力学,这可以帮助我们找到使用经典退火过程(SGD)找不到的模式。

这可能是人工智能(AGI)的关键。


量子计算现在发展得怎么样了

最近在质量控制领域取得了很多进展,市场上所有主要参与者都试图通过革命性的突破。其中一些列表如下:

量子编程探秘:从“你好世界”到“你好量子世界”

实现 “你好量子世界”

让我们使用量子寄存器实现我们的第一个 Hello World 程序。

从量子编程开始,我们将使用开源量子信息科学工具包(QISKit)。它是一个快速发展的开源社区,致力于为更多的受众轻松访问量子计算。点我了解更多????️

pip install qiskit

量子编程探秘:从“你好世界”到“你好量子世界”
现在我们已经有了封装设置,让我们熟悉量子世界中的编程范例。量子编程有 4 个主要组件。

量子编程探秘:从“你好世界”到“你好量子世界”
1. 量子程序:运行模拟实验的环境
2. 量子电路:创建环境的虚拟电路
3. 量子寄存器:由量子位构成的寄存器
4. 经典寄存器:由比特位构成的寄存器

我们将初始化量子程序,创建一个具有 2 个量子位的量子寄存器和一个带有 2 位的经典寄存器,并使用以下脚本将它们设置到电路中:

from qiskit import QuantumProgram

# Create a QuantumProgram object instance.
qp = QuantumProgram()

# Create a Quantum Register called "qr" with 2 qubits.
qr = qp.create_quantum_register('qr',2)

# Create a Classical Register called "cr" with 2 bits.
cr = qp.create_classical_register('cr',2)

# Create a Quantum Circuit called "qc" involving qr and cr.
qc = qp.create_circuit('HelloWorldCircuit', [qr],[cr])

一旦我们的量子电路准备就绪,就让它在真正的量子计算机上运作。这很好玩。

我们将连接到一个真正的量子芯片组并在我们的 HelloWorldCircuit 上执行量子操作。在这里,我使用的是 IBM-Q 部署的芯片组,它具有以下各种选项:

它们仍处于开发阶段,当您阅读本文时,它们可能会被弃用。所以要获得更新列表,请看这里

量子编程探秘:从“你好世界”到“你好量子世界”
将后端设置为 ibmqx5,提供令牌并设置连接。如果令牌有效且后端已配置,那么您将全部设置为访问量子功率。

backend = 'ibmqx5'

token = 'a7dbfb3cfc1252c4a7555020c32808cff17102a467c595801371f7b7f1\
f7c3a3355d565469aa4a37564df269f3710f33d7d13ba3c900ca947c1513598b64c5e7'

qp.set_api(token,url='https://quantumexperience.ng.bluemix.net/api')

现在是时候组成我们的电路并执行实验了。

构建 Hello World 电路的步骤:

1. 我们将添加具有 1 个量子位的 Hadamard 门(H)以添加叠加属性。 H 门具有映射 X→Z 和 Z→X 的属性。
2. 我们添加了 Controlled-NOT 门(CX),这是一个双量子比特门,如果控制器处于状态 1,它将翻转目标量子比特。这个门需要产生纠缠。
3. 用于检查状态的测量门。

这就是我们的 Hello world 电路。

量子编程探秘:从“你好世界”到“你好量子世界”

# Add the H gate in the Qubit 1, putting this qubit in superposition.
qc.h(qr[1])

# Add the CX gate on control qubit 1 and target qubit 0,
# putting the qubits in a Bell state i.e entanglement
qc.cx(qr[1], qr[0])

# Add a Measure gate to see the state.
qc.measure(qr[0],cr[0])
qc.measure(qr[1],cr[1])

# Compile and execute the Quantum Program in the ibmqx5
results = qp.execute(['HelloWorldCircuit'] ,backend ,timeout=2400)
print(results.get_counts('HelloWorldCircuit'))

现在,当我们检查结果时,您将看到4个量子态 0000,0001,0010,0011,每个量子态具有与之相关的一些概率。

因此,这表明所有四个状态在给定时间共存。

{‘00’: 488, ‘01’: 90, ‘10’: 58, ‘11’: 388}

量子编程探秘:从“你好世界”到“你好量子世界”
恭喜!!! ???? ???? 您刚刚体验了一把量子世界的两个基本属性,即叠加和纠缠。