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

古典计算是基于比特的。零和一。这并不是因为二进制逻辑系统比具有更多状态的逻辑系统有一些固有的优势,或者甚至比模拟计算机有优势。但开关很容易制造,而且利用现代半导体技术,我们可以把它们做得非常小,非常便宜。

但它们并非没有限制。有些问题是经典计算机无法有效解决的。这些问题往往是在时间或内存方面的成本随着问题的规模(n)呈指数级增长。我们说这种问题是 O(2n) 用大O符号表示

现代密码学的大部分内容甚至依赖于这一特性。将两个甚至是大的素数相乘,在计算上相当便宜(O(n2)).但是反转操作需要指数级的时间。使用足够大的数字,依赖这种因式分解攻击的解密是不可行的。

进入量子

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

量子计算机用显示量子特性的可控计算单位–量子比特取代了比特。量子比特通常由工程化的超导部件或自然发生的量子物体(如电子)制成。Qubits可以被置于 “叠加 “状态,是0和1状态的复杂组合。你有时会听到说量子比特_既_是0又是1,但这并不真正准确。真实的情况是,当进行测量时,量子比特状态将坍缩为0或1。在数学上,量子比特的(未测量的)量子状态是一个叫做布洛赫球体的几何表示上的一个点。

虽然对于任何习惯于经典计算的人来说,叠加是一个新奇的属性,但一个量子比特本身并不是很有趣。下一个独特的量子计算属性是 “干扰”。真正的量子计算机本质上是统计性质的。量子算法编码了一个干扰模式,增加了测量编码解决方案的状态的概率。

虽然很新颖,但叠加和干扰在物理世界中确实有一些类似物。而量子力学属性 “纠缠 “却没有,它是实现指数级量子加速的真正关键。通过纠缠,对一个粒子的测量可以影响对任何纠缠粒子的后续测量结果–即使是没有物理联系的粒子。

量子能做什么?

今天的量子计算机就其包含的量子比特的数量而言是相当小的,几十到几百。因此,虽然算法正在积极开发,但运行这些算法所需的硬件比它们的经典等价物更快,并不存在。

但在许多领域,人们对量子计算有相当大的兴趣。例如,量子计算机可能提供一种模拟自然量子系统的好方法,如分子,其复杂性迅速超过了经典计算机准确建模的能力。量子计算在数学上也与线性代数联系在一起,后者是机器学习和许多其他现代优化问题的基础。因此,我们有理由认为,量子计算在这方面也是很合适的。

现有的量子算法有可能胜过经典算法,其中一个经常被引用的例子是肖尔算法,它可以做前面提到的因式分解。由麻省理工学院数学家彼得-肖尔于1994年发明,量子计算机还不能在大于琐碎大小的问题上运行该算法。但它已被证明可以在多项式时间内运行 O(n3)而不是经典算法所需的指数时间。

开始使用Qiskit

在这一点上,你可能在想。”但我没有量子计算机,而且我真的喜欢动手。有什么希望吗?”

进入一个叫做Qiskit的开源(Apache 2.0许可)项目。它是一个软件开发工具包(SDK),用于访问IBM量子体验馆的量子计算模拟器和实际的量子硬件(免费)。你只需要注册一个API密钥。

当然,深入研究Qiskit,更不用说相关的线性代数了,这远远超出了我在这里可以讨论的范围。如果你想深入了解,网上有很多免费资源,包括一本完整的教科书。然而,在水中浸泡一下是很简单的,只需要一些Python和Jupyter笔记本的表面知识。

为了让你体验一下,让我们完全在Qiskit教科书中做一个 “你好,世界!”的程序

首先,安装一些教科书特有的工具和小工具。

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门类似于经典计算中的Not门,尽管底层数学实际上涉及矩阵乘法。事实上,它通常被称为NOT门)。

现在,运行它并做一个测量。结果正如你所期望的那样,因为该量子比特被初始化为|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)
复制代码

结论

在某些方面,你可以把量子计算看作是经典计算机的一种奇特的协处理器,就像图形处理单元(GPU)和现场可编程门阵列(FPGA)一样。一个区别是,在可预见的未来,量子计算机将几乎完全作为网络资源被访问。另一个区别是,它们的工作方式根本不同,这使得它们与你可能熟悉的大多数其他加速器不同。这就是为什么人们对算法开发有如此大的兴趣,并投入大量资源来确定量子在什么地方和什么时候最合适。看看这些大惊小怪的东西也无妨。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享