阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

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

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

评论

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

MFC | 图片的傻瓜式加解密方法

中国好公民st

c++ 加密技术 10月月更

《数字经济全景白皮书》中国银行业场景金融生态建设分析2022 发布

易观分析

金融 客户 场景生态建设

Go容易搞错的知识点汇总

王中阳Go

Go 面试题 #go 10月月更 go面试题

啃论文俱乐部——移植speexdsp到OpenHarmony标准系统①

离北况归

OpenHarmony

爬虫实例——爬取豆瓣网 top250 电影的信息

二哈侠

Python爬虫 10月月更 爬虫案例

2022-10-11:一个整数区间 [a, b] ( a < b ) 代表着从 a 到 b 的所有连续整数,包括 a 和 b。 给你一组整数区间intervals,请找到一个最小的集合 S, 使得

福大大架构师每日一题

算法 rust 福大大

数据中台4点核心建设内容

阿泽🧸

数据中台 10月月更

网络异常之后为什么MOA地址列表错乱了?

BUG侦探

TCP Jedis 乱序

Redis 的快速介绍及其基本数据类型和操作

宇宙之一粟

redis 10月月更

前端工程师面试题自检篇(二)

loveX001

JavaScript

铜九银十react考察点梳理

beifeng1996

React

Flash软件应用项目(一)

张立梵

设计师 Flash 10月月更

Spring之IOC自动装配

楠羽

笔记 SP【ring 10月月更

Web3雇佣兵的现状,Zebec根本上提高用户黏性

股市老人

Web3雇佣兵的现状,Zebec根本上提高用户黏性

EOSdreamer111

【答读者问】把Go基础学完后,是学web方向还是区块链方向?

王中阳Go

php Go 区块链 职业规划 10月月更

啃论文俱乐部——移植speexdsp到OpenHarmony标准系统②

离北况归

OpenHarmony

React-Hooks怎样封装防抖和节流-面试真题

beifeng1996

React

Java文档注释 Intellij IDEA Generate JavaDoc

Yeats_Liao

后端 doc Java core 10月月更

基础算法:二分查找 搜索插入位置

二哈侠

Python 二分查找 10月月更

cstdio的源码学习分析09-改变文件流文件流buffer函数setvbuf

桑榆

源码刨析 10月月更 C++

React循环DOM时为什么需要添加key

beifeng1996

React

【网络安全】如何在Apache 安装开源 WAF

网络安全学海

黑客 网络安全 信息安全 渗透测试

Web3雇佣兵的现状,Zebec根本上提高用户黏性

鳄鱼视界

Docker下Nacos配置应用开发

程序员欣宸

nacos spring-cloud 10月月更

前端工程师面试题自检篇(一)

loveX001

JavaScript

Python进阶(十三)浅谈sorted 函数应用及文件操作

No Silver Bullet

Python 文件操作 sorted 10月月更

大数据ELK(二十二):采集Apache Web服务器日志

Lansonli

ELK 10月月更

【Java深入学习】Park&Unpark的深入学习讲解

Geek_65222d

10月月更

这是两个Gopher面试必知必会的知识点,你搞懂了吗?

王中阳Go

Go golang 面试题 channel 10月月更

啃论文俱乐部——移植speexdsp到OpenHarmony标准系统③

离北况归

OpenHarmony

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