量子计算专栏|从亲身实践看量子计算
admin
2023-08-15 20:21:23
0

作者:Martin Heller, InfoWorld, Mar 18 2020

编译:Florence Wong, AICUG

与其等待量子云服务,不如让我们探索微软量子开发套件(Microsoft Quantum Development Kit)和IBM Q 和 Qiskit SDKs。



虽然量子比位数量少,衰减率高且有大量噪声,但是早在1980年代就提出的量子计算也才刚刚开始可用。正如我们将要讨论的那样,IBM和微软开始在其云中提供量子计算机和量子模拟器访问。

其他地方,谷歌在其实验室中展示了量子计算功能(并声称具有量子至上性),但尚未宣布允许公开访问。英特尔也正在开发量子芯片和系统,但尚未宣布商用。

量子计算定义

量子位是量子比特。经典位具有两个可能的值0和1。量子位可以具有无限多个值,所有这些值都是两个经典状态的组合或叠加。范数为1的任何实数或复数的二维列向量都表示一个量子位所持有的可能的量子状态。

您可以在3D中将其表示为位于单位球体表面(称为Bloch球体)任何位置上的向量的矢量(请参见下图)。当您测量处于叠加状态的量子位时,量子状态将随机解析为两个经典状态之一。您还可以明确的将量子位设置为经典值(0或1)。测量具有经典值的量子位不会影响其状态。



三种量子力学性质-叠加,纠缠和干涉-用于操纵量子位。叠加是经典状态的组合,本质上允许它们同时存在直到被测量。纠缠是爱因斯坦著名的“远距离怪异“行为。测量时,两个纠缠的量子位始终具有相同的状态。干扰可以是相长的或相消的。在量子计算机中,相长量子干扰用于放大导致正确答案的信号,相消量子干扰用于消除导致错误答案的信号。

量子门或单量子位运算符的主题很快就变得技术化。如果您进行了复杂的分析,线性代数和量子力学,那么您应该可以明白微软的这个文档(https://docs.microsoft.com/en-us/quantum/concepts/the-qubit?view=qsharp-preview#single-qubit-operations)。如果没有,请假定存在单量子位运算符,包括基本的Hadamard门和T门集合,它们可以组合成一个更大的集合,称为Clifford门。多个量子位可以纠缠;这对于包括量子隐形传态和量子纠错在内的许多量子协议都是必不可少的。

量子算法

如果我们拥有具有足够量子位,足够长的相干时间和足够低的错误率的量子计算机,那么已经提出的几种量子算法应该比经典算法更快。例如,罗夫·格罗弗(Lov Grover)在1996年设计的格罗弗(Grover)算法以O(√N)个步长求函数的逆。它也可以用于搜索无序列表。它比传统方法(需要O(N)个步骤)提供了二次加速。

Peter Shor在1994年设计的Shor算法可以找到整数的素因子。它以log(N)的多项式时间运行,使其比经典的通用数字字段筛网速度提升在指数级。当存在量子计算机“量子位”足够多(确切数量取决于要分解的整数的大小)而没有量子噪声和其他量子退相干现象时,这种指数级加速有望最终打破诸如RSA之类的公钥加密方案。

量子至上

量子至上形容一种情况当量子计算机可以快速执行有意义的操作,而传统计算机将花费很长时间。谷歌于2019年10月宣称进行量子至上计算,以计算随机性; IBM指出,经典的超级计算机可以在几天内完成相同的计算,而不是谷歌估计的10,000年。无论如何,谷歌所展示的,无论多么令人印象深刻,但不是通用的量子计算,因此使用RSA加密的人们至少现在不必担心。

微软 Q#,Quantum Development kit和Azure Quantum

Microsoft Quantum Development Kit(QDK)包含Q#编程语言,Q#语言一系列抽象复杂功能的库,Python和.NET语言API(C#,F#和http://VB.NET)-用于运行Q#语言编写的量子程序,以及有助于您开发的工具。您可以在Windows,Linux和macOS上为C#安装Q#,为Python安装Q#和/或为Jupyter Notebook安装Q#。

在自己的计算机上运行Q#时,必须使用量子模拟器。如果您在Azure上运行它,则最终将能够连接到由低温冷却的纳米线构建的实际量子计算机(请参见下图)。微软表示,量子访问预览版将在2020年的某个时候推出。



Q#的“ Hello,World”程序生成随机整数。 从本质上讲,它的工作原理是将通过Hadamard门的量子位设置为一个量子叠加,该量子叠加在被测量时(返回贝尔状态)有等同的可能性返回0或1,然后将这些“ H”和“ M”操作重复多次直至生成所需范围内的整数。 在Q#中,用于生成随机位的量子操作代码如下所示:

namespace Qrng {
open Microsoft.Quantum.Intrinsic;
operation SampleQuantumRandomNumberGenerator() : Result {
using (q = Qubit()) { // Allocate a qubit.
H(q); // Put the qubit to superposition. It now has a 50% chance of being 0 or 1.
let r = M(q); // Measure the qubit value.
Reset(q);
return r;
}
}
}

您可以调用此Q#代码在Python或.NET语言(如C#)上的量子计算机(或最终可以运行)或量子模拟器(现在)上运行。

IBM Q和IBM Qiskit SDK

IBM Q Experience(请参见下面的屏幕截图)提供了两种创建量子电路的方法:电路设计者(Circuit Composer)(一种图形化拖放环境)和Qiskit Notebooks(使用Python和Jupyter Notebooks在代码中创建电路)。这两种方法的效果相同,如果您在Windows,Ubuntu或macOS上安装Qiskit SDK,也可以在自己的计算机上运行Qiskit Notebooks。



IBM的“ Hello,World”电路使用Hadamard门(H)将量子位0设置为重叠的贝尔状态,并使用CNOT门(CX)纠缠qubits 0和1。然后对这两个量子位进行多次测量。预期的答案应该大约是一半[0,0]和一半[1,1],几乎没有[0,1]和[1,0]。

如果您使用带有模拟器后端的Qiskit路线,则该实验看起来像下面的屏幕截图:



您可以从在线IBM Quantum Experience中的电路图开始,然后将四个门拖动到该图中以完成相同的操作。



但是,您可以在此处以图形方式选择后端以及运行电路更改代码的次数。



在模拟器上运行,我们仅测量[0,0]和[1,1]状态。 这是完美的,但不代表现实生活中的量子电路噪声。让我们尝试在IBM Q Armonk上运行相同的电路。



让我们尝试在IBM Q Armonk上运行相同的电路。



它没有转。为什么?糟糕:该量子计算机只有一个量子位,而我们需要两个量子位。难怪没有队列可以使用它。




我们来试试IBM Q Burlington,它有5个量子位。



现在,我们看到了现实生活中的行为:量子误差使我们获得了约20%的非纠缠结果。请注意,对于这种小电路,我们没有使用真正的量子计算机节省任何时间:我们不仅必须在队列中等待近两分钟,而且还使用了10秒的运行时间,在模拟器上我们等待了队列等待一秒钟,并使用了4毫秒的运行时间。

这种总结概括了我们现在使用量子计算的情况:现在可公开访问的量子计算机具有少量的量子位和显着的错误率。人们正在努力实现量子误差校正和延长量子位状态衰减时间,但是两者都很难。

微软的Azure Quantum开放试用后,我将有兴趣进行试验。 根据微软的说法,其超导纳米线拓扑量子位在线的末端产生Majorana粒子,其固有的错误率应低于IBM的Josephson结量子位。

Microsoft Quantum Development Kit: https://docs.microsoft.com/en-us/quantum/install-guide/?view=qsharp-preview

Microsoft Q#

for C#:https://docs.microsoft.com/en-us/quantum/install-guide/csinstall?view=qsharp-preview

for Python: https://docs.microsoft.com/en-us/quantum/install-guide/pyinstall?view=qsharp-preview

for Jupyter Notebooks: https://docs.microsoft.com/en-us/quantum/install-guide/qjupyter?view=qsharp-preview



相关内容