写点什么

物理不好,如何给量子计算机编程?

  • 2020-10-21
  • 本文字数:3333 字

    阅读完需:约 11 分钟

物理不好,如何给量子计算机编程?

量子计算是如今发展最快的科技之一。许多公司和研究实验室都在尽可能快地向市场发布功能强大的量子硬件。在该领域取得的每一点进步都意义重大。


当前还没有绝对完美的量子计算机有能力运行可靠的算法,例如 Shor 算法和 Grover 算法等。然而,现在的量子机器正在迅速的进步。IBM 公司表明,在下一个十年,量子计算机将具备不可否认的优势,足以解决很多传统计算机无法解决的问题。


在 2019 年,IBM 提出了一种度量标准,叫做 Quantum Volume(QV)。该标准是从硬件的角度去衡量一个量子计算机的能力和有效性。QV 是一个基于不同因子计算所得的数值,例如计算机中量子位的数值、它们的连接性以及错误率的度量等。如果我们需要在实际的硬件上运行真实世界规模的算法,我们就需要一个很大的 QV 值。到目前为止,IBM 公司拥有 QV 值最大(32)的设备。


从软件的角度来说,一些研究人员预测,未来十年市场对于量子编程人员的需求将会呈指数级增长。例如 Google、IBM 和 Microsoft 等公司将会投入大量的财力和巨大的努力去培养下一代的量子研究人员和编程人员。


事实上,为了建立一个量子计算机,你不需要在物理和数学领域具备很高的学位。在我看来,你只需要具备很好的想象力即可。

传统编程 vs. 量子编程


图片来自作者(使用 Canva 绘制)


和传统计算机相比,量子计算机的运行基于一种完全不同的模式。用一种简单的思路来理解就是:在传统计算机中,我们使用的是 0 和 1 两个数字。而在量子计算机中,在原有 0 和 1 的基础上,还增加了一个”可能为 0 或者 1“的状态,也被称作"叠加态"(superposition)。所有的量子算法都是利用了这种“可能”的状态来表现量子计算机的强大能力。如今,量子计算机的编程有点像 1950 年代时我们对传统计算机的编程——虽然采用了类似于汇编语言的风格,但是具有更好的语法。


汇编语言并不简单,所以这似乎听上去很有挑战性。但实际情况是,当你了解了基本(https://towardsdatascience.com/take-your-first-step-into-the-quantum-realm-a13e99fab886)的定义,以及量子位和叠加态的意义(https://medium.com/digital-diplomacy/the-three-pillars-of-quantum-computing-d80ff5f50ec7)后,你就可以开始为量子计算机编程了。这也就是说,实际量子代码的编写并不需要对于物理有很深层次的掌握。



图片来自作者(使用 Canva 绘制)

为量子计算机编程的方法有哪些

无论是公司还是研究实验室都在致力于开发一种高级的量子编程语言,使程序员可以不需要非常熟悉量子物理学和量子力学就能够使用。事实上,现如今存在的量子编程语言和在传统编程语言基础上建立的量子编程库的数量可能比你想象的还要多。


因此,你的选择要么是在量子汇编的级别上编程,要么是使用一个基于传统编程语言的、用于量子计算的库,或者也可以使用一个纯粹的量子编程语言。我在下图中列举了在每一个类别中最广为人知和使用最广的选择。



图片来自作者(使用 Canva 绘制)


汇编级别的量子编程



具有量子编程库的传统编程语言


使用传统编程语言去写量子代码已经有很多的选择。我将会按照受欢迎的程度进行排序。


  • Qiskit(https://qiskit.org/):Qiskit (Quantum Information Science Kit)是一个诞生于 2017 年的 Python 库,由 IBM Research 负责开发和维护。它也是最受欢迎和使用最广泛的量子编程库。Qiskit 很受欢迎的其中一个原因是它具有非常活跃和繁荣的社区。并且你还可以在 IBM 的真实的量子计算机上运行你用 Python 写的代码。

  • Cirq(https://github.com/quantumlib/Cirq):这是一个由 Google 的开发者们开发的非官方的 Python 库,用于在 Google 的量子计算机上编写和运行测试。你可以使用 Cirq 来编写和模拟运行量子算法。不过 Google 并不允许任何人在他们的设备上运行代码。

  • Pyquil(https://github.com/rigetti/pyquil):这是一个由 Rigetti 编写的 Python 库,可以在使用量子指令语言 Quil(同样由 Rigetti 开发,https://arxiv.org/abs/1608.03355)的 Rigetti 机器上编写和实现量子算法。Quil 在语法上类似于 QASM。

  • Scaffold(https://www.cs.princeton.edu/research/techreps/TR-934-12):Scaffold 是一个从 Python 迁移到 C++的库,可以用于在传统机器上编写和运行量子算法。

  • Strange(https://github.com/redfx-quantum/strange):这是一个可以用于编写和运行量子算法的 Java API。通过使用传统的 Java 分布式渠道使得 Strange 可以是分布式的,并且通过利用 Maven 或者 Gradle 可以使得它用起来非常简单。


事实上还有一些其他的基于传统编程语言的量子编程库存在,但是他们中的大多数已经过时或者在某一时刻已经停止了开发,这里就不再赘述。

量子编程语言

为了摒弃传统编程语言并建立独立的量子编程语言,研究人员已经开发出了在语法上和著名的传统语言相类似的量子编程语言。这也简化了从传统编程到量子编程的转换过程。这些语言包括:


  • Q#(https://docs.microsoft.com/en-us/quantum/overview/what-is-qsharp-and-qdk?view=qsharp-preview):这是一个由 Microsoft 开发的用于编写和执行量子代码的量子编程语言。它是 Microsoft’s Quantum Development Kit(QDK)的一部分。QDK 包括一个分离的模拟器和电路优化器。

  • Quipper(https://www.mathstat.dal.ca/~selinger/quipper/):这是一个支持函数式量子编程的嵌入式量子编程语言,同时允许程序员采用比汇编语言更高级的方式去描述他们的算法。Quipper 也包括七个已经实现的、基于当前理论研究的量子算法。

  • Sliq(https://silq.ethz.ch/):这是最新的量子编程语言,由 ETH Zürich 的研究员们开发并于今年早些时候发布。Sliq 可以提供量子算法的更高级别表征,且其在语法上类似 Python 和 C++。

如何开始

有了这么多选择,你可能会对于应该选择从哪开始你的量子旅程感到不知所措。我的建议是:从一个基于你曾经使用过的传统编程语言编写的量子编程库着手,慢慢适应了量子逻辑和思考方法后,再转到一个纯粹的量子编程语言上。


只有在我想深入了解量子计算机的工作原理和门之间的动态关系时,我才会考虑使用一个低级别的语言(例如 QX Simulator)。


我是从 Qiskit 入手的,而且今天仍然用得很多——不仅因为它是用 Python 写的,还因为我可以在一个真实的量子计算机上运行我的代码。虽然目前为止结果依然很糟,但可以在真实的量子计算机上运行你的代码仍然是非常有趣的事。


为了方便说明,我们使用之前提到的九种方法来实现相同的量子代码。你可以分析实现一个电路的不同方法,来选择你觉得有趣的那一个入手。


在当前的很多量子编程里,你需要搭建一个使用量子门(等同于经典门)的电路来应用你的算法。让我们来尝试实现一个可以在两个量子位之间创造叠加态的量子回路。为了完成这个任务,你需要了解用于创建叠加态的“魔法门”,称为 Hadamard Gate。输入 0 或者 1,它将会返回一个 0 和 1 的对等叠加态。


  1. 使用 QX Simulator:



图片来自作者(使用 Canva 绘制)


  1. 使用基于传统编程语言的库



图片来自作者(使用 Canva 绘制)


  1. 使用纯粹的量子编程语言:



图片来自作者(使用 Canva 绘制)

结论

我是一个喜欢学习和探索新事物的人,但我同时也明白,我们需要在一个时间点把自身的能量专注学习一件事才能表现得更好。


这也是我建议你可以从基于传统编程语言的量子编程库着手的原因。这样,你只需要关注量子的思维方式,而不需要同时学习一种特定的编程语言。当你适应了量子编程的逻辑后,再去关注一个量子编程语言,就会容易得多。在这之后,如果你还想进一步拓展你的知识,就可以继续往下走去探索 QASM 了。


参考文献


  1. A. W. Cross, L. S. Bishop, S. Sheldon, P. D. Nation, and J. M.Gambetta,“Validating quantum computers using randomized model circuits.”

  2. Wexelblat, Richard L., ed. History of programming languages. Academic Press, 2014.


原文链接:


https://medium.com/better-programming/program-a-quantum-computer-today-a62de23268f0


2020-10-21 10:086785

评论

发布
暂无评论
发现更多内容

【10.28-11.04】写作社区优秀技术博文一览

InfoQ写作社区官方

优质创作周报

喜讯!麦聪DaaS平台荣获“2022行业信息化优秀产品”奖

雨果

数字化转型 DaaS数据即服务 麦聪软件

python数据分析-开篇什么是数据分析

AIWeker

Python 人工智能 数据分析 11月月更

贯彻二十大报告精神,政企如何提前布局信创国产化移动数字化平台?

BeeWorks

嘉兴市等保测评公司有几家?叫什么名字?

行云管家

等保 等级保护 等保测评 安全等级保护 行云管家堡垒机

集群并发下的数据覆盖问题

苏格拉格拉

缓存 分布式 并发 一致性

LED显示屏有色差要怎么处理?

Dylan

LED显示屏 全彩LED显示屏 led显示屏厂家

Docker PHP 入门实践(一)

Felix

php 实战案例 Docker 镜像 11月月更

BI系统打包Docker镜像及部署的技术难度和实现

葡萄城技术团队

Docker 容器 BI

「百幄」之办公平台:进一道门,办所有事

融云 RongCloud

数字化 办公

量子编程实践:Bell Pair电路及Deutsch算法

启科量子开发者官方号

#python #量子计算 #人工智能 #AI框架

从演进的视角理解微服务架构

苏格拉格拉

架构 微服务 微服务架构 架构演进

不愧是阿里内部Spring Boot笔记,从头到尾全是干货

小小怪下士

Java spring 程序员 阿里 springboot

阿里云 ODPS-Hologres刷新世界纪录,领先第二名23%

阿里云大数据AI技术

大数据 交互式 ODPS 离线计算

Spring Boot「24」DAO 模式与 Repository 模式

Samson

Java spring Spring Boot 学习笔记 11月月更

稳定性治理方法论

苏格拉格拉

方法论 稳定性

PingCAP 推出 TiDB Cloud Serverless Tier BETA 版

PingCAP

TiDB

企业内部即时通讯工具WorkPlus,支持内网私有化部署

BeeWorks

开发工具安装

青柚1943

阿里云ODPS升级为一体化大数据平台 满足用户多元化数据计算需求

阿里云大数据AI技术

大数据 阿里云

企业上云四大优势简单聊聊-行云管家

行云管家

云计算 企业上云 云服务器

Docker PHP 入门实践(二)

Felix

php Docker 实战 11月月更

SQL 碎碎念,你可能用不到但不能不知道的数据库技巧(1)

百里丶落云

数据库 后端 11月月更

QuTrunk与Paddle结合实践--VQA算法示例

启科量子开发者官方号

Python 人工智能 ai框架 量子计算 量子编程

马蜂窝毕博:分析完这9点工作原理,我们最终选择了 Apache SeaTunnel!

Apache SeaTunnel

开源 技术选型 数据集成 Seatunnel 数据集成平台

大咖说·我和我的伙伴们|云原生携手禾连健康助力医疗行业发展

大咖说

阿里云 微服务 云原生

一文带你详细了解JVM运行时内存

程序员小毕

Java 程序员 面试 后端 JVM

深圳中心化区块链交易所开发安全的重要性

W13902449729

区块链交易所搭建

手写一个webpack插件

Geek_02d948

webpack

设计模式学习-基础知识

肥晨

设计模式 11月月更 设计模式基础

FOTSL:端到端的文本检测与识别方法的原理方法与优势

合合技术团队

人工智能 场景 端口 文本检测 文本识别

物理不好,如何给量子计算机编程?_语言 & 开发_Sara A. Metwalli_InfoQ精选文章