使用这款开源软件开发工具包尝试量子计算

Qiskit 是一款开源软件开发工具包,可免费访问量子模拟器和硬件。
61 位读者喜欢这篇文章。
Tips and gears turning

opensource.com

经典计算基于比特,即 0 和 1。这并非因为二进制逻辑系统相比于具有更多状态的逻辑系统,甚至相比于模拟计算机,就有什么固有的优势。而是因为开关易于制造,而且借助现代半导体技术,我们可以将它们做得非常小巧且廉价。

但它们并非没有局限性。有些问题经典计算机就是无法高效解决。这些问题往往是那些成本(在时间或内存方面)随着问题规模 (n) 的增大而呈指数增长的问题。我们称这类问题在 大O符号 中为 O(2n)

现代密码学的很大一部分甚至依赖于这一特性。将两个(即使是很大的)质数相乘在计算上相当廉价 (O(n2))。但是,逆向运算则需要指数级时间。使用足够大的数字,依赖于此类因式分解攻击的解密就变得不可行。

进入量子领域

关于量子计算的数学和量子力学基础的详细入门介绍超出了本文的范围。不过,这里有一些基础知识。

量子计算机用 量子比特 取代了比特——量子比特是可控的计算单元,展现出量子特性。量子比特通常由工程化的超导组件或天然存在的量子物体(如电子)制成。量子比特可以被置于“叠加”态,这是 0 和 1 状态的复杂组合。您有时会听到量子比特既是 0 又是 1,但这实际上并不准确。真实情况是,当进行测量时,量子比特状态将坍缩为 0 或 1。在数学上,量子比特的(未测量的)量子态是几何表示(称为 布洛赫球)上的一个点。

虽然叠加对于任何习惯于经典计算的人来说都是一种新颖的特性,但单个量子比特本身并没有太大的意义。下一个独特的量子计算特性是“干涉”。真正的量子计算机本质上是统计性的。量子算法编码了一种干涉模式,这种模式增加了测量到编码解决方案状态的概率。

虽然叠加和干涉很新颖,但它们在物理世界中确实有一些类似物。量子力学特性“纠缠”则不然,它是量子加速呈指数级增长的真正关键。通过纠缠,对一个粒子的测量会影响后续对任何纠缠粒子的测量结果——即使是那些没有物理连接的粒子。

量子计算能做什么?

今天的量子计算机就它们包含的量子比特数量而言还相当小——几十到几百个。因此,虽然算法正在积极开发中,但运行它们的速度比经典计算机等效算法更快的硬件尚不存在。

但是,许多领域对量子计算有着浓厚的兴趣。例如,量子计算机可能为模拟自然量子系统(如分子)提供了一种很好的方法,这些分子的复杂性迅速超过了经典计算机精确建模的能力。量子计算在数学上也与线性代数相关联,而线性代数是机器学习和许多其他现代优化问题的基础。因此,有理由认为量子计算在那里也可能是一个不错的选择。

一个常被引用的、可能优于经典算法的现有量子算法的例子是 肖尔算法,它可以完成前面提到的因式分解。肖尔算法由麻省理工学院数学家彼得·肖尔于 1994 年发明,量子计算机目前还无法在大于微不足道规模的问题上运行该算法。但它已被证明可以在多项式 O(n3) 时间内工作,而不是经典算法所需的指数级时间。

开始使用 Qiskit

此时,您可能在想:“但是我没有量子计算机,而且我真的很想亲自动手。还有希望吗?”

现在介绍一个名为 Qiskit 的开源(Apache 2.0 许可)项目。它是一个软件开发工具包 (SDK),用于访问 IBM Quantum Experience 中的量子计算模拟器和实际量子硬件(免费)。您只需要注册一个 API 密钥即可。

当然,深入研究 Qiskit,更不用说相关的线性代数,远远超出了我在这里可以深入探讨的范围。如果您想深入研究,网上有很多免费资源,包括一本完整的教科书。但是,浅尝辄止是很简单的,只需要一些 Python 和 Jupyter Notebooks 的表面知识即可。

为了让您体验一下,让我们完全在 Qiskit 教科书 中编写一个 “Hello, World!” 程序。

首先安装一些特定于教科书的工具和小部件

pip install git+https://github.com/qiskit-community/qiskit-textbook.git#subdirectory=qiskit-textbook-src

接下来,进行导入

from qiskit import QuantumCircuit, assemble, Aer
from math import pi, sqrt
from qiskit.visualization import plot_bloch_multivector, plot_histogram

Aer 是本地模拟器。Qiskit 由四个组件组成:AerTerra 基础层、用于处理真实量子系统上的噪声和错误的 Ignis,以及用于算法开发的 Aqua

# Let's do an X-gate on a |0> qubit
qc = QuantumCircuit(1)
qc.x(0)
qc.draw()

量子计算中的 X 门 类似于经典计算中的 非门,尽管其底层的数学实际上涉及矩阵乘法。(事实上,它通常被称为 非门。)

现在,运行它并进行测量。结果正如您所预期的那样,因为量子比特在 |0> 状态下初始化,然后被反转并测量。(使用 |0>|1> 以区别于经典比特。)

# Let's see the result
svsim = Aer.get_backend('statevector_simulator')
qobj = assemble(qc)
state = svsim.run(qobj).result().get_statevector()
plot_bloch_multivector(state)

Bloch sphere showing the expected result

布洛赫球显示了预期结果。(戈登·哈夫 (Gordon Haff), CC-BY-SA 4.0)

结论

在某些方面,您可以将量子计算视为经典计算机的一种外来协处理器,就像图形处理器 (GPU) 和现场可编程门阵列 (FPGA) 一样。一个不同之处在于,在可预见的未来,量子计算机几乎完全将作为网络资源被访问。另一个不同之处在于,它们的工作原理从根本上不同,这使得它们与您可能熟悉的大多数其他加速器不同。这就是为什么人们对算法开发如此感兴趣,并且投入大量资源来确定量子计算最适合在何处以及何时使用。了解一下所有这些热议的内容也无妨。

接下来阅读
标签
User profile image.
戈登·哈夫 (Gordon Haff) 是红帽 (Red Hat) 技术布道师,是客户和行业活动中频繁且备受赞誉的演讲者,专注于包括红帽研究院 (Red Hat Research)、开源采用和广泛的新兴技术领域。

评论已关闭。

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.