写点什么

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

  • 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:083927

评论

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

【Swift实现代码】iOS架构模式之MVP

码爷

ios swift 架构

数字投票时代即将到来

CECBC

数字投票

LeetCode题解:剑指 Offer 22. 链表中倒数第k个节点,双指针,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

亲测三遍!8步搭建一个属于自己的网站

华为云开发者联盟

MySQL Linux 开发者 网站 华为云

《迅雷链精品课》第三课:区块链主流框架分析

迅雷链

区块链 区块链方案 区块链+ 区块链应用

多线程并发主题-ThreadLocalRandom类

公众号:程序猿成神之路

Java 并发编程 线程

什么?还不懂c++vector的用法,你凭什么勇气来的!

良知犹存

c++

手把手教你本地 k8s 集群搭建云原生 Tekton CICD 流水线

比伯

Java 大数据 编程 架构 计算机

Github标星67.9k的微服务架构以及架构设计模式笔记我真的爱了

Java架构之路

Java 程序员 架构 面试 编程语言

C++多元组tuple使用方法?你熟悉吗?快来看看吧

良知犹存

c++

【Mycat】作为Mycat核心开发者,怎能不来一波Mycat系列文章?

冰河

分布式事务 分布式数据库 系统架构 分布式存储 mycat

我就是增发、健身、养猫、社交通通拥有的锦鲤本鲤

脑极体

Flutter Bloc模式

码爷

flutter ios 程序员

轻松云上揽胜中华,靠的就是这份聪明的“地图”!

华为云开发者联盟

MySQL 数据库 postgresql AI 地图

DeFi质押挖矿系统开发技术

薇電13242772558

区块链 defi

云图说|多模态AI开发套件HiLens Kit:超强算力彰显云上实力

华为云开发者联盟

人工智能 开发者 物联网 机器人 华为云

阿里大牛说:你凭什么搞不懂SpringBoot,Cloud,Nginx与Docker

小Q

Java 学习 编程 架构 面试

高交会科技盛宴:“科技改变生活,创新驱动发展”

13530558032

mongodb 源码实现系列 - 网络传输层模块实现四

杨亚洲(专注MongoDB及高性能中间件)

MySQL 数据库 mongodb 高性能 分布式数据库mongodb

加快脑动脉瘤检测,AI来了

华为云开发者联盟

人工智能 学习 算法 华为云 医疗AI

企业级软件的核心价值

Philips

敏捷开发 企业应用

IMC总决赛精彩对战应接不暇,英特尔酷睿极致性能燃爆比赛现场!

E科讯

为什么我就面试阿里P6,好不容易过2面,3面来个架构师来吊打我?

小Q

Java 学习 程序员 架构 面试

WE大会上,科学家们是怎样治愈“小破球”的?

脑极体

美国区块链政策大盘点

CECBC

区块链 政策 货币

握草!美团P8整理的280页超详细Docker实战文档简直太香了,让你对如日中天的Docker有更深入的了解。

Java架构之路

Java 程序员 架构 面试 编程语言

【涂鸦物联网足迹】涂鸦云平台接口列表

IoT云工坊

人工智能 接口 物联网 API 智能家居

java-File对象

Isuodut

Teambition 网盘 VS 阿里云盘:阿里这个浓眉大眼的也开始玩赛马了?

郭旭东

阿里云 阿里云网盘

微众银行大数据平台建设方案

康月牙

大数据 开源 金融 平台 微众银行

“双11”购物狂欢节,所有女生走进了谁的直播间?

博睿数据

APM AIOPS 拨测 直播 用户体验

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