量子计算Python与Q#编程实战

978-7-115-59068-8
作者: [美]萨拉·凯泽(Sarah Kaiser)[美]卡桑德拉·格拉内德(Cassandra Granade)
译者: 王海鹏
编辑: 郭泳泽

图书目录:

详情

本书指导读者使用Python和Q#语言学习量子计算,揭开量子计算的神秘面纱。本书尽量避免复杂的数学概念,试图直接通过量子编程来帮助读者建立对量子计算机的理解。读者可以通过使用Python创建自己的量子模拟器来学习量子计算的基础知识,然后使用QDK和Q#来编写和运行与经典计算不同的算法。 通过阅读本书,读者将能够把量子编程技术应用于量子密钥分发等应用程序中,并处理真实的示例,如进行化学模拟和搜索未排序的数据库等。

图书摘要

版权信息

书名:量子计算Python与Q#编程实战

ISBN:978-7-115-59068-8

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

版  权

著    [美]萨拉·凯泽(Sarah Kaiser)
         卡桑德拉·格拉内德(Cassandra Granade)

译    王海鹏

责任编辑 郭泳泽

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315

内容提要

本书指导读者使用Python和Q#语言学习量子计算,揭开量子计算的神秘面纱。本书尽量避免复杂的数学概念,试图直接通过量子编程来帮助读者建立对量子计算机的理解。读者可以通过使用Python创建自己的量子模拟器来学习量子计算的基础知识,然后使用QDK和Q#来编写和运行与经典计算不同的算法。

通过阅读本书,读者将能够把量子编程技术应用于量子密钥分发等应用程序中,并处理真实的示例,如进行化学模拟和搜索未排序的数据库等。

在量子计算的大部分历史上,它属于物理学家的研究领域——也许有几个研究者有学习计算机科学的倾向,但不一定是这样。经典教科书Quantum Computation and Quantum Information至今仍然广受欢迎,而它是由两位量子物理学家Michael A. Nielsen和Isaac L. Chuang编写的。可以肯定的是,计算机科学家一直都在,但不少理论学者仍以代码写得少为荣—— 这就是我自己、凯泽和格拉内德所处的量子计算的世界。我可以轻松地对新一批学生挥舞着拳头大喊:“当我在你们这个年龄时,我们不写代码!我们是吃粉笔灰长大的!”

我和格拉内德认识时,我们还都是研究生。那时,我们为物理学杂志写学术文章,其中有几行代码。文章被拒绝了,因为“这不是物理学”。但我们并没有被吓倒。许多年后的今天,我们用本书反击这个观点!本书讲授了关于量子计算的大量你想知道和需要知道的内容,而不需要太多物理学基础。如果你真的想知道量子计算与物理学的联系,凯泽和格拉内德也提供了这些内容(还有表情符号)!

从那时算起,我已经走过了很长的路。我非常感谢格拉内德,就像感谢量子计算领域一样。格拉内德向我们许多人展示了在“量子”和“计算”之间,不仅仅有定理和证明。凯泽也教会了我培养在发展量子技术时需要的软件工程师的嗅觉。凯泽和格拉内德将专业知识转化为文字和代码,使所有人都能从中受益,包括我。

尽管本书的目标是创造一本“非教科书”,但随着对量子计算的介绍从物理转向计算机科学,本书内容也可以用于大学课堂。人们对量子计算的兴趣与日俱增,其中大部分人不具有物理相关专业背景—— 软件开发人员、运营经理和财务主管都想知道量子计算是怎么回事,以及如何利用它。量子计算作为一种纯粹的学术追求的时代已经一去不复返。本书是为不断增长的量子社区的需求服务的。

尽管我已经暗示物理学家在量子计算领域的比例越来越低,但我并不想贬低他们,毕竟我曾经在软件开发领域一窃不通。这本书真的适合很多人,特别是那些已经身处量子领域,并且想在熟悉的环境中了解量子计算的程序实现的人。

启动你最喜欢的代码编辑器,准备好print ("Hello quantum world!")。

克里斯·费列(Chris Ferrie)博士

量子软件和信息中心副教授

澳大利亚新南威尔士州悉尼市

自  序

我们20多年来一直埋头于量子计算中,热衷于利用这些经验,帮助更多的人参与到量子技术中来。我们一起取得了博士学位,在此过程中,无论是研究问题还是闲暇之时我们都携手同行,帮助推动量子位可能的边界。在大多数情况下,这意味着开发新的软件和工具,以帮助我们和团队做更好的研究,这是“量子”和“计算”部分之间的一个伟大桥梁。然而,在开发各种软件项目的同时,我们需要向同事讲授我们正在进行的工作。我们一直在想,“为什么没有一本技术性强但不是教科书的关于量子计算的好书?”你现在看到的就是这样一本书

我们以开发人员能够理解的方式编写本书,而不是以其他量子计算书籍的典型教科书式风格来编写。我们自己学习量子计算时发现,它非常令人兴奋,但也有点“吓人”,令人畏惧。其实不必如此,因为很多让量子计算主题变得令人困惑的是呈现方式,而非内容本身。

不幸的是,量子计算经常被描述为“怪异”“诡异”或超出我们的理解范围。但事实是,经过几十年的发展,量子计算已经变得相当好理解。结合利用软件开发和数学,你可以建立起你所需要的基本概念,以了解量子计算,并探索这个惊人的新领域。

我们写这本书的目的是帮助你学习有关该技术的基本知识,让你掌握可以用来构建未来量子解决方案的工具。我们专注于为量子计算开发代码的实践经验。在第一部分,你将用Python建立自己的量子设备模拟器;在第二部分,你将学习如何应用新技能,用Q#和量子开发工具包(Quantum Development Kit,QDK)编写量子应用程序;在第三部分,你将实现一种算法来对整数进行因数分解,且这种算法要比著名的传统算法快得多。从头到尾,都是你在做,这是属于你的量子之旅。

我们已经尽可能多地纳入了实际应用,但事实上,这正是你的优势所在!量子计算正处于向前发展的关键时刻,我们需要在大量已知的量子计算机的能力与人们需要解决的问题之间架设桥梁。架设这座桥梁将使我们的量子算法变得足以影响整个社会。你可以参与架设这座桥梁。欢迎来到你的量子之旅!我们将在这里让它变得有趣!

致  谢

我们一开始并不知道要为这本书做什么,只知道需要有这样的资源。编写这本书给了我们一个巨大的机会,来完善和发展我们解释和讲授内容的能力。与我们合作的Manning公司的所有人员都非常出色(制作编辑戴尔德丽· 希亚姆、文字编辑蒂法尼· 泰勒、校对凯蒂·坦南特和审稿编辑伊万·马丁诺维奇),他们帮助我们确保这本书以最好的样子面对读者。

我们感谢奥利维娅·迪马泰奥和克里斯·费列提供的所有宝贵的反馈和注释,这有助于使书中的解释准确清晰。

我们感谢所有审稿人,他们在不同的发展阶段审阅了书稿,他们周到的反馈使这本书变得更好:Alain Couniot、Clive Harber、David Raymond、Debmalya Jash、Dimitri Denisjonok、Domingo Salazar、Emmanuel Medina Lopez、Geoff Clark、Javier、Karthikeyarajan Rajendran、Krzysztof Kamyczek、Kumar Unnikrishnan、Pasquale Zirpoli、Patrick Regan、Paul Otto、Raffaella Ventaglio、Ronald Tischliar、Sander Zegveld、Steve Sussman、Tom Heiman、Tuan A. Tran、Walter Alexander Mata López和William E. Wheeler。

我们感谢所有Manning早期访问计划(Manning Early Access Program,MEAP)的用户,他们帮助发现了错误和需要改进解释的地方。许多人也通过在我们的示例代码库中提交问题来提供反馈,在此向他们表示感谢!

我们要感谢西雅图地区的许多了不起的企业(特别是Caffe Ladro、Miir、Milstead & Co.和Downpour Coffee Bar),它们的员工容忍我们喝了一杯又一杯的咖啡,并兴致勃勃地谈论量子位,还有Fremont Brewing的人们,他们总是在我们需要一杯啤酒时出现。一些路人会向我们问起正在研究的问题,这是一个难得的休闲时刻。

我们还要感谢微软量子系统团队的优秀成员,他们努力为开发者提供最好的工具,便于开发者进入量子计算领域。特别地,我们要感谢贝蒂姆·海姆,她致力于使 Q#成为一种伟大的语言,同时也是我们的好朋友。

最后,要感谢我们的宠物犬Chewie,它为我们提供了必需的休息时间和离开计算机的借口。

萨拉·凯泽的致谢

我的家人一直在我身边。感谢他们为我完成这个项目给予的所有耐心和鼓励。我要感谢我的治疗师,没有他,这本书就不会诞生。最重要的是,我要感谢我的合作者和伙伴卡桑德拉。这些人一直陪伴我渡过难关,鼓励和激励我,他们认为我可以做到

卡桑德拉·格拉内德的致谢

如果没有我的伙伴和合著者萨拉·凯泽博士惊人的热爱和支持,这本书是不可能成型的。我们一起经历了远比想象中多得多的事情,取得的成就也超出了我的梦想。我们一直致力于建立一个更好、更安全、更包容的量子社区,而这本书是一个奇妙的机会,让我们在这个旅程中又迈出了一步。感谢你让这一切发生,萨拉。

如果没有我的家人和朋友的支持,这本书也不可能出现。感谢他们的陪伴,无论是分享可爱的小狗照片,对最新的头条新闻表示同情,还是在深夜参加《动物森友会》游戏中的流星观测。最后,我还要感谢多年来我所依赖的神奇的网络社区,它们帮助我从许多新的角度理解这个世界。

前  言

欢迎阅读《量子计算Python与Q#编程实战》!本书以Python为起点,向你介绍量子计算的世界,以及如何用Q#(一种由微软公司开发的特定领域编程语言)编写解决方案。我们采用实例和游戏驱动的方法来讲授量子计算和开发的概念,让你能够尽早着手编写代码。

仅仅为了了解也无妨!

量子计算是一个丰富的跨学科研究领域,汇集了来自编程、物理、数学、工程和计算机科学的思想。在本书中,我们会不时地指出量子计算是如何借鉴这些其他领域的思想的,以便将我们正在学习的概念放入更丰富的背景。

虽然这些“题外话”是为了激发人们的好奇心和进一步的探索,但它们本质上是切题的。你无论是否投身于这些深入的研究,都会从本书中获得享受Python和Q#中的量子编程所需的知识。深入探究可能很有趣,也很有启发性,但如果深入量子计算不是你的爱好,那也没关系,抱着了解的目的来阅读本书也是完全可以的。

目标读者

本书是为那些对量子计算感兴趣,对量子力学几乎没有经验,但有一些编程背景的人准备的。介绍用Python编写量子模拟器、用Q#(微软的量子计算专用语言)编写量子程序时,我们将用传统的编程思想和技术来帮助你脱离困境。对编程概念有一定的了解(如循环、函数和变量赋值)是有益的。

同样,我们使用线性代数中的一些数学概念(如向量和矩阵)来帮助描述量子概念。你如果熟悉计算机图形学或机器学习,会发现许多概念是相似的。在这个过程中,我们通过Python来复习重要的数学概念,但熟悉线性代数是有益的。

本书的组织:路线图

本书旨在让你开始探索和使用量子计算的实用工具。本书分为三个部分,它们相辅相成。

第一部分逐步介绍了描述“量子位”所需的概念,这是组成量子计算机的基本单位。这一部分描述了如何在Python中模拟量子位,以使编写简单的量子程序变得容易。

第二部分描述了如何使用量子开发工具包和 Q#编程语言来组成量子位和运行量子算法,这些算法的表现与任何已知的经典算法都不同。

在第三部分,我们应用前两部分的工具和方法,学习如何将量子计算机应用于现实世界的问题,如模拟化学特性。

此外,本书还提供了4个附录。附录A有安装和配置本书中使用的工具的说明。附录B是术语和快速参考,包括量子术语、符号备忘录和代码片段,在你阅读本书的过程中可能会有所帮助。附录C是线性代数的复习资料。附录D是对你将要实现的一个算法的深入研究。

其他在线资源

在阅读本书和处理所提供的示例代码的途中,你可能会发现以下在线资源会对你有帮助。

微软Azure Quantum文档:概念文档和关于Q#的全部参考资料,包括比本书内容更新的变化和补充。

GitHub上的microsoft/Quantum开发包示例:使用Q#的完整样本,包括其本身和Python及.NET中的宿主程序,涵盖广泛的不同应用。

QuTiP网站:完整的QuTiP软件包的用户指南,我们用它来帮助完成本书的数学运算。

对于量子计算专家和新手,也有一些很棒的社区。加入类似下面这样的量子开发社区,可以帮助你解决在学习过程中所遇到的问题,也可以让你在学习过程中帮助他人。

Q# Community:一个由Q#用户和开发者组成的社区,有聊天室、博客和项目库。

Quantum Computing Stack Exchange:一个寻求量子计算问题答案的好地方,包括你可能遇到的 Q#问题。

WIQCA网站:一个包容性的网络社区,面向喜爱量子计算的所有人,以及使量子计算成为可能的人。

量子开源基金会(Quantum Open Source Foundation,QOSF):一个支持量子计算开放工具的开发和标准化的社区。

Unitary Fund:一个非营利组织,致力于创建一个惠及大多数人的量子技术生态系统。

走得更远

量子计算是一个迷人的新领域,它提供了思考计算的新方法和解决困难问题的新工具。本书可以帮助你入门量子计算,以便你继续探索和学习。也就是说,本书并不是一本教科书,也不是为了让你为量子计算研究做好全部准备。与经典算法一样,开发新的量子算法也是一门数学艺术。虽然我们在本书中触及了数学,并用它来解释算法,但有各种教科书可以帮助你建立在我们所涉及的想法之上的算法。

读完本书并开始接触量子计算后,如果想继续物理学或数学之旅,我们建议你选择以下资源。

Complexity Zoo网站。

Quantum Algorithm Zoo网站。

Complexity Theory: A Modern Approach,作者是Sanjeev Arora和Boaz Barak(剑桥大学出版社,2009年)。

Quantum Computing: A Gentle Introduction,作者是Eleanor G. Rieffel和Wolfgang H. Polak(麻省理工学院出版社,2011年)。

Quantum Computing since Democritus[1],作者是Scott Aaronson(剑桥大学出版社,2013年)。

[1] 中译本为《量子计算公开课:从德谟克利特、计算复杂性到自由意志》(人民邮电出版社,2021年)。
——编者注

Quantum Computation and Quantum Information,作者是Michael A. Nielsen和Isaac L. Chuang(剑桥大学出版社,2000年)。

Quantum Processes Systems, and Information,作者是Benjamin Schumacher和Michael Westmoreland(剑桥大学出版社,2010年)。

作者简介

萨拉·凯泽在滑铁卢大学的量子计算研究所取得了物理学(量子信息)博士学位。萨拉职业生涯的大部分时间都在实验室开发新的量子硬件,从建造卫星到研究量子密码学硬件。沟通量子的奇妙领域是她的激情所在,她喜欢建立新的演示和工具来帮助量子社区的发展。在不编写代码的时候,萨拉喜欢划皮划艇和为所有年龄的人编写关于科学的书。

卡桑德拉·格拉内德在滑铁卢大学量子计算研究所取得了物理学(量子信息)博士学位,现在在微软的量子系统组开发 Q#的标准库。作为根据经典数据对量子设备进行统计表征的专家,卡桑德拉还帮助斯科特·阿伦森把其报告整理成书Quantum Computing Since Democritus(剑桥大学出版社,2013年)。

封面简介

本书封面上的人物是匈牙利女人。这幅插图来自Jacques Grasset de Saint-Sauveur的各国服装集,名为Costumes de Différents Pays(《不同国家的服装》),1797年在法国出版。每幅插图都是手工精心绘制和上色的。Grasset de Saint-Sauveur的作品种类丰富,使我们想起200年前世界上的城镇和地区在文化上是多么的不同。

曾经,人们几乎彼此隔绝,说着不同的语言。在街上或乡下,仅凭衣着就可以轻易地识别他们住在哪里、他们的行业或生活状况如何。后来,我们的着装方式发生了变化,如此丰富的地区多样性逐渐消失了。现在已经很难区分不同大陆的居民,更不用说不同国家、地区和城镇。也许我们已经用文化多样性来换取个人生活,使现在的生活更富于变化、更快节奏。

在这个很难区分不同计算机图书的时代,Manning以两个世纪前各地区生活的丰富多样性为基础,通过Grasset de Saint-Sauveur的图片,赞美计算机行业的创造性和积极性。

资源与支持

资源获取

本书提供如下资源:

配套代码文件;

本书思维导图;

异步社区7天VIP会员。

要获得以上资源,您可以扫描下方二维码,根据指引领取。

提交勘误

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区(www.epubit.com),按书名搜索,进入本书页面,点击“发表勘误”,输入勘误信息,点击“提交勘误”按钮即可(见下页图)。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

与我们联系

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们。

如果您所在的学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。

关于异步社区和异步图书

“异步社区”是由人民邮电出版社创办的IT专业图书社区,于2015年8月上线运营,致力于优质内容的出版和分享,为读者提供高品质的学习内容,为作译者提供专业的出版服务,实现作者与读者在线交流互动,以及传统出版与数字出版的融合发展。

“异步图书”是异步社区策划出版的精品IT图书的品牌,依托于人民邮电出版社在计算机图书领域30余年的发展与积淀。异步图书面向IT行业以及各行业使用IT技术的用户。

第一部分 量子入门

书的这部分内容为我们接下来的量子之旅进行铺垫。在第1章中,我们将了解量子计算背景的更多知识、学习量子计算的方法,以及我们学到的技能预期可以在哪里应用。在第2章中,我们通过在Python中开发一个量子模拟器,开始编写代码,然后用这个模拟器来制作一个量子随机数生成器。接下来,在第3章中,我们将模拟器扩展到量子技术的加密应用编程,如BB84量子密钥交换协议。在第4章,我们利用非本地游戏来学习纠缠,并再次扩展模拟器以支持多量子位。在第5章,我们学习如何使用一个新的Python包,来帮助实现第4章的非本地游戏的量子策略。最后,在第6章中,我们最后一次扩展模拟器,增加新的量子运算,这样就可以模拟“量子隐形传态”等技术,并练习在量子设备中移动数据。

第1章 量子计算简介

本章内容

为什么人们热衷于量子计算?

什么是量子计算机?

量子计算机能做什么?不能做什么?

量子计算机与经典编程的关系。

在过去的几年里,量子计算是一个越来越受欢迎的研究领域,也是一个容易引起炒作的源头。通过利用量子物理学,从而以新颖的方式进行计算,“量子计算机”可以影响全社会。这使得现在成为一个令人兴奋的时代,吸引人们参与其中,学习如何为量子计算机编程,并应用量子资源来解决重要问题。

然而,在所有关于量子计算提供的优势的喧哗声中,我们很容易忽视这些优势的“真正”范围。我们有一些有趣的历史先例,说明当对一项技术的承诺超过现实时可能会发生什么。在20世纪70年代,机器学习和人工智能遭遇了资金的大幅减少,因为围绕人工智能的炒作和人们的激动之情超过了人工智能实际取得的成绩。这在后来被称为“人工智能寒冬”。同样,互联网公司在试图克服网络公司的萧条时也面临同样的危险。

前进的道路就是批判性地理解量子计算提供的承诺、量子计算机的工作原理、量子计算的范围是什么(以及不是什么)。在本章中,我们将帮助你建立这种理解,这样你就可以在本书的其余部分动手编写自己的量子计算程序了。

撇开这些不谈,了解一个全新的计算模型真的“很酷”!阅读本书时,你将通过编程模拟来学习量子计算机如何工作,并且立即就可以在笔记本计算机上运行写出的程序。这些模拟程序将展示许多基本元素,我们预料真正的商业量子编程会包含这些元素,同时有用的商用硬件正在上线。本书是为那些有一些基本的编程经验和线性代数基础,但没有量子物理或计算知识的人准备的。如果你对量子有一定的了解,可以跳到第二和第三部分,在那里我们将探讨量子编程和算法。

1.1 为什么量子计算很重要?

计算技术正在以真正惊人的速度向前发展。30 年前,80486 处理器允许用户以50 MIPS[1]的速度执行指令。今天,像树莓派这样的小型计算机可以达到5000 MIPS,而桌面处理器可以轻松实现 50000~300000 MIPS。如果我们有一个特别困难的计算问题想要解决,一个非常合理的策略就是等待下一代处理器出现,它们可以让我们的生活更轻松、视频流更快、游戏更丰富多彩。

[1] MIPS全称为million instructions per second,即百万条指令每秒。

然而,对于我们关心的许多问题,我们就没有那么幸运了。我们可能希望得到一个2倍快的CPU,这会让我们解决2倍大的问题。但就像生活中的许多事情一样,量变引发质变。假设我们对1000万个数字进行排序,发现需要大约1秒。后来,如果我们想在1秒内对10亿个数字进行排序,就需要一个快130倍的CPU,而不仅仅是100倍。在解决某些种类的问题时,情况会变得更糟:对于某些图形问题,从处理 1000 万像素到处理10亿像素需要多耗费13000倍的时间。

像导航城市交通和预测化学反应这样广泛存在的问题,会“很快”变得困难。如果量子计算是为了制造一台运行速度快1000倍的计算机,那么在我们想要解决的艰巨挑战中,几乎不会有任何突破。幸运的是,量子计算机要有趣得多。我们预计,量子计算机将比经典计算机“慢”得多,但解决许多问题所需的资源将以不同的方式“伸缩”,这样,如果我们找对了问题的种类,就可以突破由量变引发的质变。同时,量子计算机并不是灵丹妙药—— 有些问题仍然会很难。例如,虽然量子计算机很可能在预测化学反应方面给我们带来巨大的帮助,但在其他困难问题上,它们可能没有什么帮助。

调查到底哪些问题我们可以获得这样的优势,并开发量子算法来实现,这是量子计算研究的一大重点。直到现在,以这种方式评估量子方法是非常困难的,因为这样做需要大量的数学技能来写出量子算法,并理解量子力学的所有微妙之处。

然而,随着工业界开始开发平台,帮助开发者与量子计算建立联系,从而试图改变这种情况。通过使用微软的整个“量子开发工具包”(QDK),我们可以抽象出量子计算的大部分数学复杂度,并开始实际理解和使用量子计算机。本书所教授的工具和技术,允许开发者探索和了解为这个新的硬件平台编写程序会是什么样子的。

换言之,量子计算不会消失,所以了解我们可以用它来解决哪些问题确实很重要!无论量子“革命”是否发生,量子计算已经影响(并将继续影响)有关未来数十年如何开发计算资源的重要决定。类似下面的决定受到了量子计算的强烈影响。

在信息安全方面,什么样的假设是合理的?

什么技能在学位课程中是有用的?

如何评估计算解决方案的市场?

我们这些在技术或相关领域工作的人越来越多地遇到必须做出决定或为回答这些问题提供意见的情况。我们有责任了解量子计算是什么、(也许更重要的是)不是什么。这样一来,我们就能做好最充分的准备,为这些新的努力和决定做出贡献。

撇开这些不谈,量子计算是一个如此迷人的话题,另一个原因在于,它与经典计算既相似又非常不同。了解经典计算和量子计算的相似之处和不同之处,有助于我们理解一般计算的根本所在。经典计算和量子计算都产生于对物理规律的不同描述,因此,理解计算可以帮助我们以一种新的方式理解宇宙。

不过,绝对关键的是,对量子计算感兴趣并没有一个正确的甚至是最好的理由。无论是什么将你带入量子计算研究或应用,你都会在这一路上学到有趣的知识。

1.2 什么是量子计算机?

我们来谈一谈实际上是什么构成了量子计算机。为了便于讨论,我们简单地谈谈“计算机”这个词的含义。

定义 “计算机”是一种将数据作为输入并对这些数据进行某种运算的设备。

我们所说的“计算机”有很多实例,部分实例如图1.1所示。

图1.1 不同种类的计算机的实例,包括霍普海军少将操作的UNIVAC主机,一个解决飞行计算的“人类计算机”房间,一个机械计算器,以及一个基于乐高积木的图灵机。每种计算机都可以用与手机、笔记本计算机和服务器等计算机相同的数学模型来描述。资料来源:“人类计算机”的照片由美国国家航空航天局提供。乐高积木图灵机的照片由Projet Rubens拍摄,在CC BY 3.0许可证下使用

所有这些都有一个共同点:我们可以用经典物理学来模拟它们,也就是用牛顿运动定律、牛顿引力和电磁学来模拟。

这将有助于区分我们习惯的各种计算机(如笔记本计算机、电话、面包机、房屋、汽车、心脏起搏器)和在本书中学习的计算机。为了区分这两者,我们把可以用经典物理学描述的计算机称为“经典计算机”。这样做的好处是,如果我们用“量子物理学”取代“经典物理学”,就有了一个关于量子计算机的漂亮定义!

定义 “量子计算机”是一种将数据作为输入并对这些数据进行某种运算的设备,其过程只能用量子物理学来描述。

换言之,“经典计算机”和“量子计算机”之间的区别正是“经典物理学”和“量子物理学”之间的区别。我们将在本书的后面更多地讨论这个问题。但它们主要的区别是尺度:我们的日常经验主要是与那些足够大和足够热的物体打交道,即使量子效应仍然存在,但整体来看没有起什么作用。虽然量子力学甚至在咖啡杯、面粉袋和棒球棒等日常物体的规模上也起作用,但事实证明,我们仅用经典物理学就能很好地描述这些物体的相互作用。

深入探究:相对论呢?

量子物理学适用于那些非常冷或隔离良好的极小物体。同样,另一个被称为相对论的物理学分支描述了那些尺寸大到足以让引力发挥重要作用或者移动速度非常快(接近光速)的物体。许多计算机依赖于相对论效应,事实上,全球定位卫星在很大程度上也依赖于相对论。到目前为止,我们主要是在比较经典物理学和量子物理学,那么相对论呢?

事实表明,所有利用相对论效应实现的计算也可以用图灵机等纯经典的计算模型来描述。相比之下,量子计算不能描述为更快的经典计算,而是基于不同的数学模型。目前还没有像利用量子物理一样利用相对论的“引力计算机”的提议,所以在本书中我们可以把相对论放在一边,这没有问题。

如果我们将注意力集中在更小规模的系统上,这些系统需要量子力学来描述,那么量子计算就是使用小的、隔离良好的设备来有用地转换数据的艺术,而这种方式不能单独用经典物理学来描述。构建量子设备的一种方式是使用小型经典计算机,如数字信号处理器(Digital Signal Processor,DSP)来控制奇异材料的特性。

物理学和量子计算

用于构建量子计算机的奇异材料的名字听起来很吓人,如“超导体”和“拓扑绝缘体”。不过,我们可以从学习理解和使用经典计算机的方式得到慰藉。

我们可以在不知道什么是半导体的情况下为经典计算机编程。同样,我们如何建造量子计算机背后的物理学是一个迷人的主题,但这并不是我们学习如何编程和使用量子设备的必要条件。

量子设备在如何控制的细节上可能有所不同,但最终所有的量子设备都是由经典计算机和某种控制电子设备控制和读出的。毕竟,我们是对经典数据感兴趣,所以最终必须有一个与经典世界的接口。

注意 大多数量子设备必须保持非常低的温度和良好的隔离,因为它们极易受到噪声的影响。

通过利用嵌入式经典硬件来应用量子运算,我们可以操纵和转换量子数据。量子计算的力量来自于对要应用的运算的细心选择,以实现有效的转换,解决感兴趣的问题。

1.3 如何使用量子计算机?

我们能像科幻影视作品中展示的那样使用量子计算机吗(如图1.2所示)?了解量子计算机的潜力和局限性是很重要的,尤其是考虑到围绕量子计算的炒作。这种炒作背后的许多误解来自于将类比外推,超出它们适用的范围——所有类比都有局限性,量子计算也不例外。模拟量子程序在实践中的行为是一个好方法,可以帮助测试和完善类比所提供的理解。尽管如此,我们仍然会在本书中使用类比,因为它们有助于直观地理解量子计算如何工作。

图1.2 我们所希望的使用量子计算机的方式。漫画由xkcd网站授权使用

提示 如果你曾经看到过对量子计算新成果的夸张描述,如“我们可以利用无限多的平行宇宙的力量,同时传送两个地方的猫,从而治疗癌症”,那么你就明白了,将有用的类比外推得太远是很危险的。

关于量子计算的一个特别常见的困惑之处,就是用户将如何使用量子计算机。我们已经理解了什么是“计算机”:你可以用它来运行网络应用程序,写文件,以及运行模拟。事实上,经典计算机在我们的生活中做了许多不同的事情,我们有时甚至不会注意到什么是计算机、什么不是计算机。Cory Doctorow指出“你的车就是你坐在里面的一台计算机”(DrupalCon Amsterdam 2014主题演讲),从而提出了这个观点。

然而,量子计算机的用途可能更为特殊——我们预料量子计算机对于某些任务来说是毫无意义的。量子计算将如何融入我们现有的经典计算堆栈,一个很好的模型就是GPU。GPU是专门的硬件设备,旨在加速特定类型的计算,如图形绘制、机器学习任务,以及任何容易并行化的任务。你想用GPU来完成这些特定的任务,但很可能不想用它来完成所有的任务,因为我们有更灵活的CPU来完成一般的任务,如检查电子邮件。量子计算机是完全一样的:它们擅长加速特定类型的任务,但不适合广泛使用。

注意 量子计算机的编程有一些限制,所以当没有特别的量子优势可言时,经典计算机是最好的选择。

经典计算仍将存在,并且是我们(以及我们的量子硬件)彼此交流和互动的主要方式。甚至为了让经典计算资源与量子设备对接,在大多数情况下,我们还需要一个数模信号处理器,如图1.3所示。

图1.3 量子设备如何通过使用数字信号处理器与经典计算机交互的示例。数字信号处理器向量子设备发送低功率信号,并放大返回设备的极低功率信号

此外,量子物理学描述的事物在非常小的规模上(包括尺寸和能量),它们与周围环境很好地隔离。这对我们可以运行量子计算机的环境提出了一些硬性限制。一个可能的解决方案是将量子设备保存在低温冰箱中,通常接近 0 K(−459.67 ℉,或−273.15 ℃)。虽然这在数据中心不是问题,但在台式机上搭建一个简化版低温冰箱并不太现实,更不用说在笔记本计算机或手机上。由于上述原因,量子计算机可能会通过云来使用,至少在它们首次商业化后的相当一段时间内是如此的。

将量子计算机用作云服务类似于专门的计算硬件的其他进展。在数据中心中,通过下面这样的奇特计算资源,可以探索一些计算模式,这些模式除了最大的用户之外,很难在内部部署:

专门的游戏硬件(如PlayStation、Xbox);

用于科学问题的极低延迟、高性能计算集群(如Infiniband);

大规模的GPU集群;

可重复编程的硬件(如Catapult、Brainwave);

张量处理单元(Tensor Processing Unit,TPU)集群;

高持久、高延迟的档案存储(如Amazon Glacier)。

展望未来,像Azure Quantum这样的云服务将以大致相同的方式提供量子计算的支持。

正如高速、高可用的互联网连接使大量用户可以使用云计算一样,我们也将能够在最喜欢的、有Wi-Fi覆盖的海滩或咖啡馆里,甚至在火车上观看远处的雄伟山脉时,使用量子计算机。

1.3.1 量子计算机能做什么?

作为程序员,如果我们有一个具体的问题,那么“我们怎么知道用量子计算机来解决它是有意义的呢?”

我们还在了解量子计算机到底能做到什么程度,因此还没有具体的规则来回答这个问题。到目前为止,我们已经发现了一些问题实例,在这些问题中,量子计算机比著名的经典方法更具有明显的优势。在所有情况下,已经发现的解决这些问题的量子算法都是利用量子效应来实现优势的,这有时被称为“量子优势”。下面是两个有用的量子算法。

格罗弗算法(在第11章中讨论)可以在个步骤中搜索N个项目的列表。

舒尔算法(第12章)可以快速分解大的整数,如被用作加密以保护私人数据的整数。

我们将在本书中看到更多的算法,但格罗弗算法和舒尔算法是量子算法有效的好示例:它们都使用量子效应来分离计算问题的正确答案和无效解。实现量子优势的一个方法是找到一些方法,利用量子效应来分离经典问题的正确和错误答案。

什么是量子优势?

格罗弗算法和舒尔算法说明了两种不同的量子优势。整数的因数分解可能比我们猜想的更容易。许多人已经非常努力地尝试快速分解整数,但都没有成功,但这并不意味着我们可以证明分解是困难的。另一方面,我们可以证明格罗弗算法比任何经典算法都要快,其中的秘诀是:它使用的是另一种输入。

为一个实际问题找到可证明的优势是量子计算的一个热门研究领域。也就是说,量子计算机可以成为解决问题的强大工具,即使我们无法证明永远不会有更好的经典算法。毕竟,舒尔算法挑战了大量信息安全的基础假设。数学证明是必要的,只是我们还没有建立一个足够大的量子计算机来运行舒尔算法。

量子计算机还为模拟量子系统的特性提供了巨大的好处,为量子化学和材料科学的应用开辟了道路。例如,量子计算机可以使我们更容易了解化学系统的基态能量。这些基态能量可以让人们深入了解反应速率、电子构型、热力学特性,以及其他业界感兴趣的化学特性。

在开发这些应用的过程中,我们也看到了衍生技术的巨大优势,如量子密钥分配和量子计量学,其中一些我们将在接下来的几章中看到。在以计算为目的,学习控制和理解量子设备的过程中,我们也学到了成像、参数估计、安全等方面的宝贵技术。虽然这些并不是严格意义上的量子计算的应用,但它们在很大程度上展示了用量子计算来“思考”的价值。

当然,当我们对量子算法的工作原理和如何从基本原理建立新的算法有了具体的了解后,量子计算机的新应用就更容易发现了。从这个角度来看,量子编程是学习如何发现全新应用的一个很好的资源。

1.3.2 量子计算机不能做什么?

像其他形式的专业计算硬件一样,量子计算机不会擅长所有工作。对于某些问题,经典计算机更适用。在为量子设备开发应用时,注意到哪些任务或问题不属于量子计算的范围是有帮助的。

简言之,我们没有任何硬性的规则来快速决定哪些任务最好在经典计算机上运行、哪些任务可以利用量子计算机的优势。例如,大数据式应用的存储和带宽要求很难映射到量子设备上,我们可能只有一个相对较小的量子系统。目前的量子计算机只能记录几十位的输入,随着量子设备被用于更苛刻的任务,这种限制将变得更加重要。尽管我们期望最终能建造出比现在大得多的量子系统,但对于需要大量输入或输出来解决的问题,经典计算机可能永远是首选。

同样,对于严重依赖随机访问大量经典输入集的机器学习应用,在概念上很难用量子计算来解决。也就是说,“可能”有其他机器学习应用更自然地映射到量子计算上。寻找应用量子资源解决机器学习任务的最佳方法的研究工作仍在进行。一般来说,那些输入和输出数据量小,但需要大量计算才能从输入到输出的问题是量子计算机的良好候选问题。

鉴于这些挑战,我们可能会得出这样的结论:量子计算机总是擅长于那些输入和输出量小,但两者之间计算量非常大的任务。像“量子并行性”这样的概念在媒体上很流行,量子计算机有时甚至被描述为使用平行宇宙来计算。

注意 “平行宇宙”的概念是一个很好的类比示例,它可以帮助理解量子概念,但如果走向极端就会导致非理性。把量子计算的不同部分看作处在互不影响的多个宇宙中,有时是有帮助的,但这种描述让我们更难思考在本书中将要学习的一些效应,比如干扰。如果走得太远,平行宇宙的比喻也会让人觉得量子计算的方式更接近于《星际迷航》这样的科幻剧中特别充满激情和乐趣的情节,而不是现实。

然而,这未能告诉大家,如何使用量子效应从量子设备中提取有用的答案并不总是显而易见的,即使量子设备的状态似乎包含所需的输出。例如,使用经典计算机对一个整数N进行因数分解的一种方法是列出每个“潜在的”因数,并检查它是否真的是一个因数。

1.令i = 2。

2.检查N/i的余数是否为零:

- 如果是,则返回iN的因数;

- 如果不是,则递增i并循环。

我们可以通过使用大量不同的经典计算机来加速这个经典算法,每个我们想尝试的潜在因数都使用一台计算机。也就是说,这个问题很容易被并行化。一台量子计算机可以在同一设备内尝试每个潜在因数,但事实证明,这还不足以使因数分解比经典方法更快。如果我们在量子计算机上使用这种方法,输出将是随机选择的潜在因数之一。实际正确的因数会出现的概率约为,这并不比经典算法好。

不过,正如我们在第12章中所看到的,我们可以利用其他量子效应,用量子计算机对整数进行因数分解,其速度比那些著名的经典因数分解算法还要快。舒尔算法所做的大部分繁重工作都是为了确保最后测出正确因数的概率远远大于测出错误因数的概率。以这种方式消除不正确的答案是量子编程的大部分艺术所在。对于我们可能想要解决的所有问题,这并不容易,甚至不可能做到。

为了更具体地了解量子计算机能做什么、不能做什么,以及如何在这些挑战下用量子计算机做“很酷”的事情,采取更具体的方法是有帮助的。因此,让我们思考一下什么是量子程序,以便着手编写自己的程序。

1.4 什么是程序?

在本书中我们经常会发现,以重新审视类似的经典概念的方式来解释一个量子概念是有用的。具体来说,让我们回头看看什么是经典程序。

定义 “程序”是一连串的指令,它可以被经典计算机解释为执行一项预期的任务。税单、驾驶指南、菜谱和Python脚本都是程序的例子。

我们可以编写经典程序来分解各种不同的任务,以便由各种不同的计算机来解释。一些程序的例子见图1.4。

我们来看一个简单的“Hello, world!”程序在Python中会是怎样的:

>>> def hello():
...     print("Hello, world!")
...
>>> hello()
Hello, world!

图1.4 经典程序示例。税单、地图指示和菜谱都是由经典计算机(或人)解释一连串指令的示例。这些示例看起来可能非常不同,但每一个示例都用一个步骤列表来传达一个程序

最基本的是,这个程序可以认为是给Python“解释器”的一连串指令,然后依次执行每条指令来实现某种效果——本例中是向屏幕打印一条信息。也就是说,这个程序是对一个任务的“描述”,然后由Python“解释”,接下来由CPU解释,以完成我们的目标。这种描述和解释之间的相互作用促使我们把Python、C和其他类似的编程工具称为“语言”,强调编程是我们与计算机的交流方式。

在使用Python打印“Hello, world!”的例子中,可以认为,我们是在与Python语言的创始设计师Guido van Rossum沟通。然后,Guido代表我们与我们正在使用的操作系统的设计者沟通。这些设计者又代表我们与英特尔、AMD、ARM或任何我们正在使用的CPU的设计公司沟通,等等。

什么是量子程序?

与经典程序一样,量子程序由指令序列组成,这些指令被经典计算机解释为执行一项特定的任务。然而不同之处在于,在量子程序中,我们想完成的任务包括让量子系统执行一项计算。

因此,经典程序和量子程序中使用的指令也有所不同。一个经典程序可能会将“从互联网加载一些猫的图片”这种任务描述为网络栈的指令,并最终由类似“mov(移动)”的汇编指令描述。相比之下,像Q# 这样的量子语言允许程序员用M(测量)这样的指令来表达量子任务。当量子硬件运行时,这些程序可以指示数字信号处理器将微波、激光或其他种类的电磁波送入量子设备,并放大从该设备传出的信号。

在本书,我们将看到许多说明量子程序所面临的要解决的(或至少是关注的)任务种类,以及可以使量子编程更容易的经典工具实例。例如,图1.5显示了一个在Visual Studio Code(一个经典的集成开发环境)中编写量子程序的示例。

图1.5 用QDK和Visual Studio Code编写量子程序。第7章中会讲解该程序的内容,但从高层面上来看,它与你可能做过的其他软件项目相似

我们将逐章建立起编写量子程序所需的概念,图1.6展示了其路线图。在第2章中,我们将学习构成量子计算机的基本构件,并用它们来编写我们的第一个量子程序,从而拉开学习的序幕。

图1.6 本书阐述了编写量子程序所需的概念。从第一部分开始,通过在Python中建立我们自己的模拟器,对模拟器和内在运算(考虑硬件API)进行低层次的描述。第二部分研究了Q# 语言和量子开发技术,这将有助于我们开发自己的应用程序。第三部分展示了一些已知的量子计算的应用,以及我们在这项技术上的挑战和机遇

小结

量子计算之所以重要,是因为量子计算机有可能让我们解决传统计算机难以解决的问题。

在某些类型的问题上,量子计算机可以提供比经典计算机更多的优势,比如大数的因数分解。

量子计算机是使用量子物理学来处理数据的设备。

程序是可以由经典计算机解释的指令序列,用以执行任务。

量子程序是通过向量子设备发送指令进行计算的程序。

相关图书

Python极客项目编程(第2版)
Python极客项目编程(第2版)
动手学自然语言处理
动手学自然语言处理
Python财务应用编程
Python财务应用编程
Web应用安全
Web应用安全
深度学习的数学——使用Python语言
深度学习的数学——使用Python语言
Python量子计算实践:基于Qiskit和IBM Quantum Experience平台
Python量子计算实践:基于Qiskit和IBM Quantum Experience平台

相关文章

相关课程