哈Ha! 我向您介绍Ryan LaRose撰写的文章“门级量子软件平台的概述和比较” 。
量子计算机可用于云基础架构中,但与此同时,对于决定使用什么软件的人来说,最近量子软件平台的兴旺势不可挡。 本文通过比较四个软件平台(Forest(pyQuil),QISKit,ProjectQ和Quantum Development Kit),提供了量子计算快速发展的当前情况,这四个平台允许研究人员使用真实的和模拟的量子设备。 该分析涵盖了要求和安装,程序示例中语言的语法,库级别的支持以及每个平台的量子模拟器的可能性。 对于支持量子计算机的平台,我们比较了硬件,量子汇编语言和量子编译器。 总之,我们将考虑它们各自的功能,并简要提及用于量子计算的其他软件包。
目录内容
一,引言
二。 软件平台
pyQuil
B.QISKit
C.ProjectQ
D. Quatum开发套件
三, 比较方式
A.图书馆支持
B.量子硬件
C.量子编译器
D.模拟器性能
E.特点
IV。 讨论与结论
参考文献
附录A.其他软件平台
附录B.测试模拟器性能
附录C.示例程序:隐形传送方案
一,引言
量子编程语言至少在二十年前就被考虑了[1-3],但它们大多是理论性的,并且没有现有的设备。 量子计算机现在已成为现实,并且有量子编程语言可以使任何能够访问Internet的人使用它们。 工业界和学术界的大量研究人员已经创建了可在量子计算电路模型上工作的小型量子设备。 这些计算机体积小,噪音大,不如现代经典计算机强大。 但是它们正在出现,稳步增长,并为化学[4,5],机器学习[6,7],优化[8],金融部门[9]等[10]的任务提供了不可思议的巨大计算能力。 这些设备是用于培训下一代量子软件工程师以解决当前存在的经典计算机技术复杂任务的测试平台。 实际上,云量子计算已经被用来计算氘核结合能[11]和机器学习算法中的测试程序[12、13]。
近来,在多种经典计算机语言上的量子计算软件迅速增长。 [14]中提供了包含五十多个开源项目的列表,[15]中提供了量子计算机仿真的列表。 数量众多的程序可以积极反映该领域的发展,这使得学生和研究人员很难决定使用哪个软件包,以免迷失在文档中或被必要的入门知识所震惊。
预期本文将对门级通用量子计算的主要软件平台进行简要概述和比较。 从一长串的列表中选择了四个:三个使用户能够连接到真实的量子设备-Rigetti [16]的pyQuil,IBM [17]的QISKit和苏黎世联邦理工学院的[18,19]的ProjectQ,以及具有类似功能的一个,但是目前无法连接到量子计算机的功能-Microsoft的Quantum Development Kit [20]。 有利于选择这些平台的能力已经成为连接到真实量子设备的能力。 因此,为了简洁起见,特意省略了许多受人尊敬的程序。 其中一些在附录A中提到。
目前,主要目标是展示由这四个平台引起的量子计算的概况。 在第二部分中,我们将依次介绍每个平台,讨论需求和安装,文档和教程,语言语法以及量子设备。 第三部分提供了平台的详细比较。 它包括:支持III A中的量子算法库级别,支持III B中的量子硬件,支持III C中的量子电路的编译器和支持III D的量子计算机。 第四部分讨论了有关每个平台的一些主观评论。 附录A包含有关其他量子软件的信息,附录B包含有关测试量子电路仿真器的详细信息,附录C显示了四种语言中每种语言的量子隐形传态方案的代码,用于并排比较。
图1显示了用于连接设备的各种量子计算机和软件。 当前,有四个软件平台可让您连接到四个不同的量子计算机-一个来自8位量子计算机Rigetti,您可以使用pyQuil [41]进行连接。 来自IBM的三个,具有最高可用16个量子位,可以使用QISKit或ProjectQ进行连接。 另外,IBM提供了第四台20量子比特的量子计算机,但是该设备仅对IBM Q Network的成员可用[42]:一群对量子计算感兴趣并进行投资的公司,大学和国家实验室。 图1还显示了诸如Google,IBM和Intel之类的公司的量子计算机,这些公司已经宣布但目前对普通用户不可用。

图1.示意图,显示了如何在门级将个人计算机连接到二手量子计算机。 从个人计算机(底部中心)开始,绿色节点显示可以在用户的个人计算机上安装的软件。 灰色节点表示模拟器在本地(即在用户的计算机上)运行。 虚线显示了与公司资源的API /云连接,显示为黄色“云”。 这些云资源提供的量子模拟器和二手量子计算机分别以蓝色和金色显示。 红框显示所选方法的要求。 例如,要连接到Rigetti Forest并使用Agave 8量子比特量子计算机,您需要下载并安装pyQuil(在MacOS,Windows和Linux上可用),在Rigetti网站上注册以获得API密钥,然后请求通过在线方式访问设备形式。 注意:(i)Rigetti量子虚拟机要求提升权限超过30个量子位,(ii)本地模拟器取决于用户的计算机,因此给出的数字是近似值,以及(iii)公布的量子计算机,但是目前对普通用户不可用。量子设备技术日新月异。 新计算机很有可能在今年年底出现,并且在两到三年内,该列表可能已经完全过时了。 但是,剩下的就是用于连接到该技术的软件。 使用新的量子计算机非常简单,只需更改几行代码,而无需实际更改用于生成或运行量子电路的语法。 例如,在QISKit中,您只需要在执行方案时更改后端设备的名称即可:
execute(quantum_circuit, backend="name", ...)
清单1.字符串“ name”表示使用QISKit运行量子程序的后端设备。 当未来的量子计算机发布时,在新硬件上运行就像更改名称一样简单。
尽管该软件也随着新版本的发布而发生变化[43],但在大多数情况下,这些语法变化相对较小,不会显着改变软件的功能。
在本节中,我们将研究四个平台中的每个平台,讨论需求和安装,文档和手册,语言语法,量子语言,量子设备和模拟器功能。 这篇综述并非旨在全面教授该语言,而是使读者在进入一个(或多个)所选平台之前了解每个平台。 当前的分析包括足够的信息以在量子计算机上运行算法。 但是,当读者选择了特定平台时,会将其发送至特殊文档以获取完整信息。 添加了指向每个软件包的文档和教程源的链接。 还假设有量子计算的基础知识,现在有很多好的参考文献[21,22]。
本文档中包含的所有代码片段和程序均已通过测试,并在运行Linux Ubuntu 16.04 LTS的Dell XPS 13 Developer Edition便携式计算机上运行,其完整规格在[23]中列出。 尽管所有软件包都可以在所有三个主要操作系统上运行,但对于作者而言,在开发该软件的平台上安装和使用该软件要容易得多。 在Linux Ubuntu上,安装这些软件包时没有困难或异常错误消息。
| pyQuil | QISKit | Projectq | QDK |
---|
机构名称 | 里杰蒂 | 伊本 | 苏黎世 | 微软公司 |
初版 | 2017年1月15日v0.0.2 | 2017年3月7日为0.1 | 2017年1月3日v0.1.0 | 2018年1月4日0.1.1712.901(预发布) |
当前版本 | 2018年6月6日v1.9.0 | 2018年6月11日0.5.4 | v0.3.6 on Feb 6,2018 | 2018年2月26日0.2.1802.2202(预发布) |
开源的 | ✅ | ✅ | ✅ | ✅ |
执照 | 阿帕奇2.0 | 阿帕奇2.0 | 阿帕奇2.0 | 麻省理工学院 |
网页首页 | 首页 | 首页 | 首页 | 首页 |
Github | 吉特 | 吉特 | 吉特 | 吉特 |
文献资料 | Docs ,教程( Grove ) | 文档 , 教程笔记本 , 硬件 | 文档 , 示例程序 , 论文 | 文件 |
操作系统 | Mac,Windows,Linux | Mac,Windows,Linux | Mac,Windows,Linux | Mac,Windows,Linux |
要求条件 | Python 3,Anaconda(推荐) | Python 3.5 +,Jupyter Notebooks(用于教程),Anaconda 3(推荐) | Python 2或3 | Visual Studio代码 (强烈建议) |
古典语言 | 巨蟒 | 巨蟒 | 巨蟒 | 问# |
量子语言 | 测验 | Openqasm | 无/混合 | 问# |
量子硬件 | 8个量子位 | IBMQX2(5量子位),IBMQX4(5量子位),IBMQX5(16量子位),QS1_1(20量子位) | 没有专用的硬件,可以连接到IBM后端 | 无 |
仿真器 | 本地20个qubit,26个qubit,带有大多数QVM的API密钥,30+ w /专用访问权限 | 本地约25量子比特,云约30量子比特 | 本地约28量子比特 | 本地30量子位,通过Azure云40量子位 |
特色功能 | 生成Quil代码,Grove中的示例算法,特定于拓扑的编译器,模拟器中的噪声功能,社区Slack频道 | 生成QASM代码,特定于拓扑的编译器,社区Slack通道,电路抽屉,ACQUA库 | 绘制电路,连接到IBM后端,多个库插件 | 内置算法,示例算法 |
pyQuilpyQuil
pyQuil是由Rigetti开发的开源Python库,用于创建,分析和执行量子程序。 它是基于Quil语言建立的,Quil语言是一种量子指令的开放语言(或简称为量子语言 ),是为最有前途的量子计算机专门设计的,并基于常见的经典/量子存储模型[24](这意味着qubit和经典位)。 pyQuil是在Forest中开发的核心库之一,Forest是所有Rigetti软件的关键平台。 Forest还包括Grove和Reference QVM,将在后面进行描述。
一个 要求和安装
尽管强烈建议使用Python 3,但安装和使用pyQuil需要使用Python 2或3版本,因为将来的开发功能将仅支持Python3。此外,对于各种Python模块依赖项,建议使用Python Anaconda发行版,尽管这不是必需的。
安装pyQuil的最简单方法是使用Python软件包管理器命令。 在Linux Ubuntu命令提示符下,输入
pip install pyquil
成功安装软件。 或者,如果已安装Anaconda,则可以通过键入pyQuil进行安装
conda install −c rigetti pyquil
在命令行上。 另一种选择是从git存储库下载源代码并安装软件。 为此,请输入以下命令:
git clone https://github.com/rigetticomputing/pyquil cd pyquil pip install −e
建议所有可以为pyQuil做出贡献的用户使用最后一种方法。 有关更多信息,请参见GitHub存放指南。
b。 文档和教程
pyQuil在Internet上发布了出色的文档 ,其中介绍了量子计算,安装说明,基本程序和门操作,称为量子虚拟机(QVM)的模拟器,真实的量子计算机以及带有编译器的Quil语言。 通过从GitHub下载pyQuil源代码,您还将获得一个文件夹,其中包含Jupyter笔记本中的示例,常规Python示例和一个程序 $ inline $ \ textsf {run_quil.py} $ inline $ ,可以使用量子虚拟机运行用Quil编写的文本文档。 最后,提到Grove ,这是一组使用pyQuil和Rigetti Forest环境构建的量子算法。
c。 句法
pyQuil语法非常简单实用。 记录量子电路的主要元素是程序,可以从中导入 textsfpyquil.quil 。 闸门操作可以在 textsfpyquil.gates 。 模组 textsfapi 允许您在虚拟机中运行量子电路。 pyQuil的一个不错的功能是不需要事先定义qubit寄存器和经典寄存器,它们可以在内存中动态分配。 量子位寄存器中的量子位由索引(0、1、2,...)引用,类似地,对于经典寄存器中的位也是如此。 因此,随机发生器电路可以写成如下:
清单2.随机数生成器的PyQuil代码
前三行输入声明量子方案/程序(行2),对量子位执行门操作(行3)[44]和执行方案(行4)所需的最小值。 在第6行中,创建了一个量子程序,在第7-8行中,向其传输了指令列表:首先,在Hadamard门上操作 H 在索引0的量子位上方,然后将相同的量子位测量为索引0下的经典位。第10行与QVM建立连接,并在11处启动并显示电路结果。 该程序将pyQuil的标准输出打印为整数列表:在我们的情况下- textsf[[[0]] 或 textsf[[[1]] 。 通常,外部列表中的项目数是执行的测试数。 内部列表中的整数是经典寄存器中的最终尺寸。 由于我们仅进行了一项测试(在 textsfapi.QVMConnection.run ,默认情况下设为1),我们只会得到一个内部列表。 由于在经典寄存器中我们只有一位,所以我们只能得到一个整数。
d。 量子语言
Quil是量子指令的语言,或者仅仅是将命令传输到量子计算机的量子语言。 这类似于经典计算机上的汇编程序。 Quil语法的核心是 textsf门索引 在哪里 textsfGATE 是适用于索引的量子位的量子门 textsf索引 (0、1、2,...)。 pyQuil具有从给定程序生成Quil代码的功能。 例如,在上述量子随机数生成器中,我们可以添加以下行:
print(qprog)
最后获得Quil图代码,如下所示:
H 0 MEASURE 0 [0]
清单3.随机数生成器的验证码。
也许如果有人开始理解Quil,请在Quil中的文本编辑器中编写量子电路,然后使用该程序在QVM上执行该电路 $ inline $ \ textsf {run_quil.py} $ inline $ 。 您也可以修改 $ inline $ \ textsf {run_quil.py} $ inline $ 在QPU上运行电路。 请注意,pyQuil编译器(在文档中也称为Quil编译器)将给定的电路转换为真正的量子计算机可以理解的Quil代码。 我们将在第III C节中对此进行更详细的讨论。
f。 量子硬件
Rigetti具有一个量子处理器,可供请求访问权限的人员使用。 要请求访问权限,您必须访问Rigetti 网站并提供全名,电子邮件地址,组织名称以及访问QPU的原因的说明。 完成此操作后,公司代表将通过电子邮件与您联系,以安排时间让用户访问QPU。 与稍后将要讨论的QISKit排队系统相比,此调度过程的优势在于,可以在具有确定执行时间的分布式时间间隔内执行许多任务,这对于变分算法和混合算法而言至关重要。 这些类型的算法在经典计算机和量子计算机之间来回发送数据-需要排队等待使此过程变得更长。 缺点(可能)是,当QPU可用时,无法在任何时间执行任务,必须指示并同意特定的时间。
根据作者的经验,员工随时准备提供帮助,并且该过程通常是成功的。 实际设备的拓扑结构如图2所示,由8个qubit组成,它们具有最近的邻居连通性。 我们将在第III B节中更详细地介绍这台计算机。
g。 仿真器
量子虚拟机(QVM)是用于执行量子电路的主要工具。 该程序编写为在经典处理器上运行,可接收Quil代码并在真实的量子计算机上模拟流程的开发。 要连接到QVM,您需要使用名称和电子邮件地址在https://www.rigetti.com/forest免费注册一个API密钥。 然后,您将收到一封电子邮件,其中包含必须在启动时配置的API密钥和用户ID:
pyquil−config−setup
在命令行上(当然,在安装pyQuil之后)。 然后,将要求您输入电子邮件中的密钥。
根据文档,大多数API密钥可提供对多达30个量子位的QVM的访问,并且您可以请求访问更多量子位。 作者的API密钥可访问26个量子位(不请求更新)。
此外,Forest库包含一个用Python和开放源代码编写的本地模拟器,称为Reference QVM 。 它的效率不如QVM,但用户可以在量子比特数受限于本地计算机内存的情况下运行电路。 通常,少于20 qubit的电路可以在多种设备上运行。 参考QVM必须单独安装,可以通过以下方式完成 textsf点 :
pip install referenceqvm
要使用参考QVM而不是QVM,只需导入 textsfapi 来自 textsfreferenceqvm 而不是pyQuil:
import referenceapi.api as api

图2.示意图,显示了一个8比特的Agave QPU Rigetti的拓扑结构(连接性)。 量子位用整数0、1,...,7标记,连接量子位的线表示可以在这些量子位之间执行两个量子位操作。 例如,我们可以执行Controlled- ž 在0和1的量子位上,但不在0和2之间。要完成后者,Quil编译器会将Controlled- ž QPU可以执行的操作中的(0,2)。 该图取自pyQuil文档。QISKitB.QISKit
量子信息软件工具包(QISKit)是一个开放源代码软件开发工具包(SDK),用于与IBM Q平台中的量子OpenQASM语言和量子处理器一起使用,适用于Python,JavaScript和Swift语言,但是这里我们仅讨论Python版本。
一个 要求和安装
QISKit在MacOS,Windows和Linux上可用。 安装QISKit需要Python 3.5以上版本。 其他有用但不是必需的组件是用于教程的Jupyter Notebook和Python Anaconda 3发行版,其中包含所有必需的依赖项。
安装QISKit的最简单方法是将pip软件包管理器用于Python。 在命令提示符下,要安装软件,请输入:
pip install qiskit
请注意 textsf点 自动处理所有依赖项,并将始终安装最新版本。 可能对QISKit有所贡献的用户可以通过在命令提示符下输入以下命令来安装源代码,假定已安装git:
git clone https://github.com/QISKit/qiskit−core cd qiskit−core python −m pip install −e
有关存款的信息,请参阅GitHub上存款指南的在线文档。
b。 文件和培训材料
QISKit文档可在Internet上找到,网址为https://qiskit.org/documentation/ 。 它包含安装和配置说明,示例程序以及与真实量子设备的连接,项目组织,QISKit审查和开发人员文档。 还可以为该领域的新手找到有关量子计算的基本信息。 一个非常好的资源是指向SDK的链接,用户可以在其中找到源代码文档中的信息。
QISKit在单独的GitHub存储库中也包含大量教程(类似于pyQuil和Grove)。 这些包括纠缠态; 标准算法,例如Deutsch Jozh,Grover算法,相位估计和量子傅立叶变换; 还有更复杂的算法,例如解决量子变分特征值问题并应用于费米子哈密顿量。 甚至一些有趣的游戏,例如量子“海战”。 此外,ACQUA(用于量子应用程序的算法和电路)库包含用于化学和人工智能的多学科算法,并附带大量示例。
对于四个量子后端的每一个,也都有非常详细的文档,其中包含有关连接性,相干时间和门使用时间的信息。 最后,提及IBM Q Experience 网站和用户指南。 该网站包含用于量子电路的图形界面,用户可以在其中将门拖动到电路上,这对于探索量子电路非常有用。 用户指南包含有关量子计算和QISKit语言的更多说明。
c。 句法
可以在以下示例程序中查看QISKit语法。 在这里,与pyQuil不同,您需要显式区分量子寄存器和经典寄存器。 以下是QISKit随机数方案的程序:
清单4.用于随机数生成器的QISKit代码。
第2行导入了用于创建量子和经典寄存器,量子电路以及执行该电路的功能的工具。 然后,我们创建一个具有一个量子位的量子寄存器(第4行),创建一个具有一个比特的经典寄存器(第5行),并创建具有这两个寄存器的量子电路(第6行)。 现在已经创建了电路,我们开始给出指令:在第8行中,将Hadamard门应用于量子寄存器中的零量子位(这是量子寄存器中唯一的量子位); 在第9行中,我们将这个qubit度量为一个经典比特,该比特在我们的经典寄存器(这是经典寄存器中唯一的一个)中被索引为零[45]。 现在已经建立了量子电路,请在第11行执行它,并在第12行打印结果。 $ inline $ \ textsf {result.get_counts()} $ inline $ 我们得到电路的“计算”,即输出数据的字典以及每个结果被接收了多少次。 对于我们的情况,唯一可能的输出是0或1,上面程序的输出示例是 textsf′0′:532,′1′:492 ,这表示我们得到了0个实例的532个实例和1个实例的492个实例。(默认情况下,启动称为的电路的循环数 textsf快照 在QISKit中为1024。)
d。 量子语言
OpenQASM(开放式量子汇编语言[25],我们可以简称为QASM)是一种量子语言,为类似于传统计算机上的汇编器的真实量子设备提供指令。 QASM语法的基础是 textsfgatequbit 在哪里 textsf门 设置量子门的操作,并且 textsfqubit -量子比特 QISKit具有从架构生成QASM代码的功能。 在上述随机数方案中,我们可以添加一行。
print(qcircuit.qasm())
最后获得以下电路的QASM代码:
OPENQASM 2.0; include ”qelib1.inc”; qreg q0[1]; creg c0[1]; h q0[0]; measure q0[0] −> c0[0];
清单5.随机数生成器的OpenQASM代码。
前两行包含在每个QASM文件中。 第3(4)行创建一个量子(经典)寄存器,第5和第6行给出该电路的指令。 在OpenQASM中,您可以编写类似这样的小型电路,但是对于大型电路,最好使用QISKit中的工具对量子计算机进行免费高效的编程。
e。 量子硬件
QISKit支持大量有关量子后端的文档。 这些设备包括IBMQX2(5个量子比特),IBMQX4(5个量子比特),IBMQX5(16个量子比特)和QS1_1(20个量子比特,仅IBM Q Network成员可用)。 GitHub上提供了适用于所有人的文档。 我们将在第III B部分中进一步研究IBMQX5,其拓扑如图3所示。
f。 仿真器
IBM , . , 12 , , 25 . , III D.

图3. IBMQX5的示意拓扑,取自[30]。方向箭头指示纠缠机会。例如,我们可以执行一个操作(在QASM中) cx Q1,Q2 ,但不是运算 cx Q2,Q1 。 为此,编译器将指令转换为在拓扑和一组门中运行的等效门。ProjectqC. ProjectQ
ProjectQ — IBM, . ProjectQ Thomas Häner Damien S. Steiger Matthias Troyer ETH Zurich, .
一个
ProjectQ Python (2.7 3.4+). . pip :
python −m pip install −−user projectq
( ). :
git clone https://github.com/ProjectQ−Framework/ProjectQ cd projectq python −m pip install −−user
, , . ProjectQ GitHub.
b。
ProjectQ . , . - ( , ). — / , . [18, 19] , , - .
c。
ProjectQ , . ProjectQ ( ProjectQ), — / . , :
6. ProjectQ .
2 , 3 . 5 (engine) MainEngine , 6 . 8 9 : 0, . « » . — operation | qubit , H|0> , . , /. pyQuil QISKit, ProjectQ . , qbits[0] 9, , int , 12.
d。
, ProjectQ . ProjectQ IBM, OpenQASM: IBM.
e.
ProjectQ . , IBM ProjectQ.
f.
ProjectQ , C++, , , Python. , ProjectQ ClassicalSimulator (stabilizer circuits), . . , , , CNOT [26]. , , , , . , C++ Simulator 。
C++ Simulator ProjectQ . [23]() (, ), 26 5 , 28 20 — . [III D]() 6.
ProjectQ , , . , pyQuil ProjectQ [27], Microsoft QDK Thomas Häner Damian Steiger ETH Zurich [28], . ( , , QDK ProjectQ C++, .)
量子开发套件D. Quantum Development Kit
Rigetti IBM, Microsoft . [29] , , , . , Microsoft , Quantum Development Kit (QDK), , . , QDK «-» Q#, Visual Studio Visual Studio Code 30 . 2018 , -, MacOS, Windows Linux.
一个
, Visual Studio Code , . ( VS Code, Visual Studio . - - , , VS Code.) , QDK , Bash:
dotnet new −i "Microsoft.Quantum.ProjectTemplates::0.2 −*"
QDK GitHub ( , QDK), :
git clone https://github.com/Microsoft/Quantum.git cd Quantum code
b。
— Q#, - , , , Q# . ; , .
c。
Q# . C#: , Python, , C#. , :
// random number generator circuit in QDK operation random (count: Int, initial: Result) : (Int, Int) { body { mutable numOnes = 0; using ( qubits = Qubit[1]) { for (test in 1..count) { Set(initial, qubits[0]); H(qubits[0]); let res = M(qubits[0]); // count the number of ones if (res == One) { set numOnes = numOnes + 1; } } Set(Zero, qubits[0]); } // return statistics return (count − numOnes, numOnes); } }
7. Q# .
, , /, , . . , , , . — .qs Q#, Driver.cs .qs , .csproj , . , 65 . -, , «Quickstart» .
, QDK , . , — (a+b) , . QDK , , ( C , , , , .
d。 /
, QDK . Q# / .
e.
QDK , 30 . , QDK ProjectQ, , ProjectQ. ( III D.) Azure , 40 . QDK , .
, QDK (trace simulator), , , , . , . , . , , - , . . . - QDK.
三, 比较方式
在本节的后面,当考虑到每个平台的基础知识时,我们将比较每个其他特性,包括在库,量子设备和量子编译器级别的支持。我们还将列出每个平台的一些值得注意和有用的功能。
A.图书馆支持
« » ( ) (, language.DoQuantumFourierTransform (...) ). . , , 4.
, , , . , , , .
, pyQuil, QISKit QDK . ProjectQ FermiLib, FermiLib, OpenFermion, . , , , ProjectQ. Microsoft QDK , , . , QDK , , QDK, . QISKit .
B.
pyQuil QISKit, . , — — « ». ( ), , / . , , --. IBMQX5 Agave, . - .
一个 IBMQX5
IBMQX5 — 16- ( 3). (T2) 31±5 0- , — 89±17 15- . 80 10 . CNOT - , 170- cx q[6], q[7] 348 cx q[3], q[14] 。 99,5% ( = 1 — ). - 94,9% . 12,4% 6%. [30].
, , IBM , , . Agave Rigetti, -, , . , .
b。 Agave
Agave 8 (transmon) , 2. (T2) 9,2 1- , 15,52 2- . Controlled- Z 118 195 . 96,2% ( , = 1 — ) 93,2%. - 87% - . . - pyQuil.
Algorithm | pyQuil | QISKit | ProjectQ | QDK |
---|
Random Number Generator | (T) | (T) | (T) | (T) |
Teleportation | (T) | (T) | (T) | (T) |
Swap Test | (T) | | | |
Deutsch-Jozsa | (T) | (T) | | (T) |
Grover's Algorithm | (T) | (T) | (T) | (B) |
Quantum Fourier Transform | (T) | (T) | (B) | (B) |
Shor's Algorithm | | | (T) | (D) |
Bernstein Vazirani | (T) | (T) | | (T) |
Phase Estimation | (T) | (T) | | (B) |
Optimization/QAOA | (T) | (T) | | |
Simon's Algorithm | (T) | (T) | | |
Variational Quantum Eigensolver | (T) | (T) | (P) | |
Amplitude Amplification | (T) | | | (B) |
Quantum Walk | | (T) | | |
Ising Solver | (T) | | | (T) |
Quantum Gradient Descent | (T) | | | |
Five Qubit Code | | | | (B) |
Repetition Code | | (T) | | |
Steane Code | | | | (B) |
Draper Adder | | | (T) | (D) |
Beauregard Adder | | | (T) | (D) |
Arithmetic | | | (B) | (D) |
Fermion Transforms | (T) | (T) | (P) | |
Trotter Simulation | | | | (D) |
Electronic Structure (FCI, MP2, HF, etc.) | | | (P) | |
Process Tomography | (T) | (T) | | (D) |
Meyer-Penny Game | (D) | | | |
Vaidman Detection Test | | (T) | | |
Battleships Game | | (T) | | |
Emoji Game | | (T) | | |
Counterfeit Coin Game | | (T) | | |
4. , . « » (T), (D), (B) (P).C.
, , , . / . — , , . QISKit Rigetti, .
IBMQX5 u1 , u2 , u3 和 CNOT 在哪里

, u1 Rz(θ) , u2 和 u3 — Rx(π/2)

, .

在哪里 X 和 Z — . IBM Rz(θ) « », , . , z , z () , .
IBMQX5 3. , CNOT , CNOT

, CNOT QISKit, , , QISKit CNOT, . QISKit , , .
8- Agave Rigetti Rx(kπ/2) k∈Z , Rz(θ) Controlled- Z 。 , , Controlled- Z ( CZ )

Agave 2. QISKit, pyQuil ( ).
, , 5. , pyQuil, Agave, QISKit — IBMQX5. , QISKit (. . ), pyQuil. , - . , IBMQX5 , , pyQuil, . , ( ) - - (, , [32]), . [46], .

5. ( ), pyQuil 8- Agave Rigetti ( ) , QISKit IBM IBMQX5 16- . , Agave, 0, 1 2 ( 2), , IBMQX5, 0, 1 2. , H , Rx Rz 。 CNOT IBMQX5, Agave — pyQuil CNOT Controlled- Z . ProjectQ.D.
, . , , (. . ) . , , , , , . . QISKit , C++, ProjectQ , B . QVM pyQuil.
一个 pyQuil
Rigetti, Quantum Virtual Machine (QVM), , . , API. API 30- , . 16- 10 2,61 . 23 10 56,33 , , QVM API. - - , QVM , QVM , ProjectQ QISKit.
QVM . , . , , . Noise and Quantum Computation pyQuil.
b。 QISKit
QISKit , : , , , 和 。 . () . , / . [33], [34-36] . ClassicalSimulator ProjectQ, (stabilizer circuits), .
, 10 10 23,55 . — 239,97 , 12 1000 ( 17 ). , n 2n×2n 。
C . 25 . 20 . 6 7.
s ProjectQ
ProjectQ C++, . , , 28 , (569,71 ) 20-. [18]. 6 7.

6. QISKit () ProjectQ C++ (), ( ) ( ). , ( ). **B**.
7. , ProjectQ C++ QISKit, . , √X , CNOT, . , . ProjectQ.E.
pyQuil Grove, GitHub, pyQuil. Rigetti , Slack Rigetti Forest. Quil ( ). , pyQuil OpenFermion [37], Python , .
QISKit JavaScript Swift. Python - . Grove, QISKit . , ACQUA QISKit . . IBM , . 3 , QISKit, 80000 , 60 , IBM [31]. QISKit Slack , , . , QISKit .
, ProjectQ . , TikZ TEX 。 ProjectQ. ProjectQ , . ProjectQ , IBM. , ProjectQ , OpenFermion, .
QDK Windows , 2018 macOS Linux. QDK, . , Q# , , . QDK , , , , , . .
IV。
, , , (-) (-) . — , . / .
, , :
- , , QISKit ( ProjectQ) pyQuil — .
- , , QISKit, pyQuil QDK — .
- , , Python — .
- , C/C#, QDK — .
- , , , ProjectQ — .
- , - , pyQuil — .
- , , Strawberry Fields .
, , . . , , .
参考文献- Bernhard Ömer, A procedural formalism for quantum computing , Master's thesis, Department of Theoretical Physics, Technical University of Vienna, 1998.
- S. Bettelli, L. Serafini, T. Calarco, Toward an architecture for quantum programming , Eur. Phys. J. D, Vol. 25, No. 2, pp. 181-200 (2003).
- Peter Selinger (2004), A brief survey of quantum programming languages , in: Kameyama Y., Stuckey PJ (eds) Functional and Logic Programming. FLOPS 2004. Lecture Notes in Computer Science, vol 2998. Springer, Berlin, Heidelberg.
- Benjamin P. Lanyon, James D. Whitfield, Geoff G. Gillet, Michael E. Goggin, Marcelo P. Almeida, Ivan Kassal, Jacob D. Biamonte, Masoud Mohseni, Ben J. Powell, Marco Barbieri, Alaґn Aspuru-Guzik, Andrew G. White, Towards quantum chemistry on a quantum computer , Nature Chemistry 2 , pages 106-111 (2010), doi:10.1038/nchem.483.
- Jonathan Olson, Yudong Cao, Jonathan Romero, Peter Johnson, Pierre-Luc Dallaire-Demers, Nicolas Sawaya, Prineha Narang, Ian Kivlichan, Michael Wasielewski, Alaґn Aspuru-Guzik, Quantum information and computation for chemistry , NSF Workshop Report, 2017.
- Jacob Biamonte, Peter Wittek, Nicola Pancotti, Patrick Rebentrost, Nathan Wiebe, Seth Lloyd, Quantum machine learning , Nature volume 549 , pages 195-202 (14 September 2017).
- Seth Lloyd, Masoud Mohseni, Patrick Rebentrost, Quantum principal component analysis , Nature Physics volume 10 , pages 631-633 (2014).
- Vadim N. Smelyanskiy, Davide Venturelli, Alejandro Perdomo-Ortiz, Sergey Knysh, and Mark I. Dykman, Quantum annealing via environment-mediated quantum diffusion , Phys. Rev. Lett. 118 , 066802, 2017.
- Patrick Rebentrost, Brajesh Gupt, Thomas R. Bromley, Quantum computational finance: Monte Carlo pricing of financial derivatives , arXiv preprint (arXiv:1805.00109v1), 2018.
- IM Georgescu, S. Ashhab, Franco Nori, Quantum simulation , Rev. Mod. Phys. 86, 154 (2014), DOI: 10.1103/RevModPhys.86.153.
- EF Dumitrescu, AJ McCaskey, G. Hagen, GR Jansen, TD Morris, T. Papenbrock, RC Pooser, DJ Dean, P. Lougovski, Cloud quantum computing of an atomic nucleus , Phys. Rev. Lett. 120 , 210501 (2018), DOI: 10.1103/PhysRevLett.120.210501.
- Lukasz Cincio, Yigit Subasi, Andrew T. Sornborger, and Patrick J. Coles, Learning the quantum algorithm for state overlap , arXiv preprint (arXiv:1803.04114v1), 2018
- Patrick J. Coles, Stephan Eidenbenz, Scott Pakin, et al., Quantum algorithm implementations for beginners , arXiv preprint (arXiv:1804.03719v1), 2018.
- Mark Fingerhuth, Open-Source Quantum Software Projects , accessed May 12, 2018.
- Quantiki: List of QC Simulators , accessed May 12, 2018
- R. Smith, MJ Curtis and WJ Zeng, A practical quantum instruction set architecture , 2016.
- QISKit, originally authored by Luciano Bello, Jim Challenger, Andrew Cross, Ismael Faro, Jay Gambetta, Juan Gomez, Ali Javadi-Abhari, Paco Martin, Diego Moreda, Jesus Perez, Erick Winston, and Chris Wood, https://github.com/QISKit/qiskit-sdk-py .
- Damian S. Steiger, Thomas Häner, and Matthias Troyer ProjectQ: An open source software framework for quantum computing , 2016.
- Thomas Häner, Damian S. Steiger, Krysta M. Svore, and Matthias Troyer A software methodology for compiling quantum programs , 2016.
- The Quantum Development Kit by Microsoft, homepage: https://www.microsoft.com/en — us/quantum/development-kit, github: https://github.com/Microsoft/Quantum .
- Michael A. Nielsen and Isaac L. Chuang, Quantum Computation and Quantum Information 10th Anniversary Edition, Cambridge University Press, 2011.
- Doug Finke, Education , Quantum Computing Report, https://quantumcomputingreport.com/resources/education/ , accessed May 26, 2018.
- All code in this paper was run and tested on a Dell XPS 13 Developer Edition laptop running 64 bit Ubuntu 16.04 LTS with 8 GB RAM and an Intel Core i7-8550U CPU at 1.80 GHz. Programs were run primarily from the command line but the Python developer environment Spyder was also used for Python programs and Visual Studio Code was used for C# (Q#) programs.
- Forest: An API for quantum computing in the cloud, https://www.rigetti.com/index.php/forest , accessed May 14, 2018.
- Andrew W. Cross, Lev S. Bishop, John A. Smolin, Jay M. Gambetta, Open quantum assembly language , 2017.
- Scott Aaronson, Daniel Gottesman, Improved Simulation of Stabilizer Circuits , Phys. Rev. A 70 , 052328, 2004.
- pyQuil Lisence, github.com/rigetticomputing/pyquil/blob/master/LICENSE#L204 , accessed June 7, 2018.
- Microsoft Quantum Development Kit License, marketplace.visualstudio.com/items/quantum.DevKit/license , accessed June 7, 2018.
- Hao Zhang, Chun-Xiao Liu, Sasa Gazibegovic, et al. Quantized Majorana conductance , Nature 556 , 74-79 (05 April 2018).
- 16-qubit backend: IBM QX team, “ibmqx5 backend specification V1.1.0,” (2018). Retrieved from https://ibm.biz/qiskit-ibmqx5 and https://quantumexperience.ng.bluemix.net/qx/devices on May 23, 2018.
- Talia Gershon, Celebrating the IBM Q Experience Community and Their Research , March 8, 2018.
- M. Reck, A. Zeilinger, HJ Bernstein, and P. Bertani, Experimental realization of any discrete unitary operator , Physical Review Letters, 73, p. 58, 1994.
- Ryan LaRose, Distributed memory techniques for classical simulation of quantum circuits , arXiv preprint (arXiv:1801.01037v1), 2018.
- Thomas Haner, Damian S. Steiger, 0.5 petabyte simulation of a 45-qubit quantum circuit , arXiv preprint (arXiv:1704.01127v2), September 18, 2017.
- Jianxin Chen, Fang Zhang, Cupjin Huang, Michael Newman, Yaoyun Shi, Classical simulation of intermediate-size quantum circuits , arXiv preprint (arXiv:1805.01450v2), 2018.
- Alwin Zulehner, Robert Wille, Advanced simulation of quantum computations , arXiv preprint ( arXiv:1707.00865v2 ), November 7, 2017.
- Jarrod R. McClean, Ian D. Kivlichan, Kevin J. Sung, et al., OpenFermion: The electronic structure package for quantum computers , arXiv:1710.07629, 2017.
- Nathan Killoran, Josh Izaac, Nicols Quesada, Ville Bergholm, Matthew Amy, Christian Weedbrook, Strawberry Fields: A Software Platform for Photonic Quantum Computing , arXiv preprint (arXiv:1804.03159v1), 2018.
- IonQ website, https://ionq.co/ , accessed June 15, 2018.
- D-Wave: The quantum computing company, https://www.dwavesys.com/home , accessed June 20, 2018.
- 4 2018 Rigetti 20- , . , 8- «- ». , 20- (, , ).
- IBMQ Network , 2017 — JP Morgan Chase , Daimler , Samsung , Honda , Oak Ridge National Lab , — , 2018 — Zapata Computing , Strangeworks , QxBranch , Quantum Benchmark , QC Ware , Q-CTRL , Cambridge Quantum Computing (CQC) , 1QBit . North Carolina State University , IBM Q Hub, University of Oxford University of Melbourne . https://www.research.ibm.com/ibmq/network/ .
- , - - . QISKit, ACQUA , pyQuil.
- pyQuil : , from pyquil.gates import H, MEASURE 。 pyquil.gates , , , .
- , () . , () , , .
- IBM, 31 2018 , « » Python Cython, .
A, . Players Quantum Computing Report [22]. , , . / — .
一个 Strawberry Fields
Xanadu , , Strawberry Fields Python , [38]. Xanadu «qumodes» ( ), , , . Strawberry Fields Numpy TensorFlow, Blackbird. GitHub, , , , . , Xanadu https://www.xanadu.ai/ , .
b。 IonQ
IonQ — -, College Park , . IonQ , . 171 Yb , IonQ T2 () 15- , T2 1 . , T1 ( ) 20 000 , 10−4 . , -- - , «» . , .
IonQ , IonQ . . , - [39].
c。 D-Wave Systems
D-Wave [40], , . D-Wave, 1999 , , , ,
D-Wave , — 2048 , Matlab, C/C++ Python . /, D-Wave . D-Wave .
BB.
ProjectQ C++. Dell XPS 13 Developer Edition 64- Ubuntu 16.04 LTS 8 Intel Core i7-8550U 1,80 .
, , 7. , QISKit — .
CC. :
. , QDK , , . — , — — . . , , , — , .
, , . , QISKit.

8. , circuit_drawer , QISKit v0.5.4.pyQuil
QISKit
ProjectQ
Quantum Developer Kit
// ============================================================================= // teleport.qs // // Teleportation circuit in QDK. // ============================================================================= operation Teleport(msg : Qubit, there : Qubit) : () { body { using (register = Qubit[1]) { // get auxiliary qubit to prepare for teleportation let here = register[0]; // main circuit H(here); CNOT(here, there); CNOT(msg, here); H(msg); // conditional operations if (M(msg) == One) { Z(there); } if (M(here) == One) { X(there); } // reset the "here" qubit Reset(here); } } } operation TeleportClassicalMessage(message : Bool) : Bool { body { mutable measurement = false; using (register = Qubit[2]) { // two qubits let msg = register[0]; let there = register[1]; // encode message to send if (message) { X(msg); } // do the teleportation Teleport(msg, there); // check what message was sent if (M(there) == One) { set measurement = true; } // reset all qubits ResetAll(register); } return measurement; } }