量子计算实战

978-7-115-61847-4
作者: 约翰·沃斯(Johan Vos)
译者:
编辑: 郭泳泽

图书目录:

详情

在加密、科学建模、制造物流、金融建模和人工智能等领域,量子计算可以极大提升解决问题的效率。量子系统正变得越来越强大,逐渐可用于生产环境。本书介绍了量子计算的思路与应用,在简要说明与量子相关的科学原理之后,指导读者实现量子计算算法。本书将带领读者使用基于Java的Strange量子模拟器编写量子程序,并探索量子位和量子逻辑门。在介绍标准Java和构建工具创建量子算法的同时,本书还引入了有趣的示例和深入的解释。 本书适合对量子计算、量子编程感兴趣的计算机专业和从业人员,以及其他有?Java编程基础的人阅读。

图书摘要

版权信息

书名:量子计算实战

ISBN:978-7-115-61847-4

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

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

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

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

版  权

著    [比]约翰 • 沃斯(Johan Vos)

译    张云翼

责任编辑 郭泳泽

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

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

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

读者服务热线:(010)81055410

反盗版热线:(010)81055315

内容提要

在加密、科学建模、制造物流、金融建模和人工智能等领域,量子计算可以极大提升解决问题的效率。量子系统正变得越来越强大,逐渐可用于生产环境。本书介绍了量子计算的思路与应用,在简要说明与量子相关的科学原理之后,指导读者实现量子计算算法。本书将带领读者使用基于Java的Strange量子模拟器编写量子程序,并探索量子位和量子逻辑门。在介绍标准Java和构建工具创建量子算法的同时,本书还引入了有趣的示例和深入的解释。

本书适合对量子计算、量子编程感兴趣的计算机专业和从业人员,以及其他有 Java编程基础的人阅读。

1995 年,我开始在荷兰代尔夫特理工大学准备我的博士论文。我的工作主要集中于声波方程,需要将理论模型与实验数据结合起来,这当然就需要做些数据处理和可视化方面的工作。大约同一时间,名为Java的编程语言问世了。Java对不同平台的可移植性,使我可以容易地创建具有用户界面的应用程序,并在我研究的各种平台上执行程序,这使得Java对科学工作者很有吸引力。

但是我突然想到,科学界与信息技术领域存在着巨大不同。科学研究人员常常试图找到难题的答案,而信息技术人员则致力于将科学成果实现出来,并处理可伸缩性、故障转移、代码复用,以及面向函数或对象的开发等问题。通常,科学家提出的想法和模型需要信息技术人员实现。科学家不需要担心单元测试,信息技术人员也不需要了解物理中的标准模型,但二者的交接应该是平顺的。

我有幸经常与长期对量子计算感兴趣的Java专家James Weaver共同演讲。鉴于我的科学背景,他曾邀请我共同介绍量子计算。

对主题有基本的了解通常对演讲有所帮助。虽然我研究过声波方程,但量子计算完全不同,因此我强迫自己学习量子计算。学习一个概念的最好方法就是去使用它,为了解量子计算,我用Java创建了一个名为Strange的量子计算模拟器。后来,我逐步增加了Strange的功能。通过实现量子计算程序,我更好地理解了它对开发者的意义。

我注意到科学家与开发者通常面对不同的问题,在量子计算领域也是这样。我认为量子计算的重大挑战之一,是为现有开发者找到使用量子计算的方法,而无须让他们了解背后的物理原理。但反过来说,要想提出使多个领域取得进步的伟大算法,通常需要对现代信息技术开发有很好的理解。

我相信量子计算可以为医疗保健和安全等多个领域带来重大突破。通过本书,我希望向开发人员解释,如何在无须成为量子物理学专家的前提下从量子计算中受益。

致  谢

感谢家人一直以来的支持和耐心,他们给了我写作本书的机会。

感谢Gluon的同事的支持,尤其是在许多技术方面的支持。来自Java和JavaFX社区的持续支持和鼓励也促使我将本书写成一本对开发人员有用的书。

非常感谢帮助我实现这本书的Manning团队。我要特别感谢Mike Stephens、Andrew Waldron、Dustin Archibald、Alain Couniot、Jan Goyvaerts和Candace Gillhoolley提供的知识和指导。我还要感谢Tiffany Taylor、Keir Simpson、Melody Dolab、Meredith Mix和Andy Marinkovich为制作本书提供指导,并致力于使本书做到最好。

过去几年的形势很令人紧张。我们生活在一个新奇的时代,科学工作变得比以往任何时候都更加重要。研究量子计算使我深入了解自然的奥秘。我非常感谢所有致力于理解和解释基本自然概念的科学家,使硬件和软件开发人员可以根据这些新想法获益。

感谢所有评阅人:Aleksandr Erofeev、Alessandro Campeis、Antonio Magnaghi、Ariel Gamino、Carlos Aya-Moreno、David Lindelof、Evan Wallace、Flavio Diez、Girish Ahankari、Greg Wright、Gustavo Filipe Ramos Gomes、Harro Lissenberg、Jean-François Morin、Jens Christian Bredahl Madsen、Kelum Prabath Senanayake、Ken W. Alger、Marcel van den Brink、Michael Wall、Nathan B. Crocker、Patrick Regan、Potito Coluccelli、Rich Ward、Roberto Casadei、Satej Kumar Sahu、Vasile Boris、Vlad Navitski、William E.Wheeler和William W. Fly。你们的建议使本书变得更好。

前  言

目前大多数关于量子计算的资料,一部分围绕难以置信的物理知识,使量子计算成为可能;另一部分讨论量子计算成为主流技术之后可预期的顶层结果。而在本书中,我们关注许多开发者的疑问:量子计算如何影响我的日常开发,我又如何从中获益?要回答这个问题,需要从开发者的角度看待量子计算,即假设硬件已经或即将为人所用(可通过本地硬件或模拟器来实现),且我们编写的代码也不受营销炒作的影响。

目标读者

本书的目标读者是想要了解自己能否以及如何从量子计算中获益,量子计算又如何对工作产生影响的程序员。读者无须了解量子物理的知识,因为本书会解释量子计算将推动哪些领域的进步,并说明程序员们如何像使用现代硬件(如GPU)一样在不了解内部细节的情况下利用量子计算。

本书的内容

本书由3部分组成。第1部分提供一些关于量子计算的背景知识,第2部分介绍使量子计算区别于传统计算的基本概念,第3部分介绍程序员可以直接使用的算法和代码。

第1部分介绍关于量子计算的背景知识。

第1章讨论量子计算的重要性,摒弃流行语和不切实际的期望。脚踏实地的程序员会说“直接给我看代码”,本书就是这样做的。

在第2章,我们利用基于Java的量子计算模拟器Strange搭建第一个Java应用程序(也就是常说的“Hello, world”应用程序)。Strange量子计算模拟器将程序员与量子计算的底层细节隔离开,提供利用了量子概念的API。

第3章介绍量子位,这是量子计算的基本单元,类似于传统计算中的位。

第2部分介绍量子计算的相关概念。

第4章讨论叠加态,这是量子物理的核心原理之一。这一章给出的代码可以让你在Java应用程序中使用量子叠加态。

第5章解释了不同的量子位如何通过量子纠缠保持关联,及其对应用程序的意义。

第6章介绍量子网络,这是量子计算的一种具体应用。

第3部分利用代码示例介绍较复杂的实用算法。这一部分主要聚焦于解释算法的应用,但也会解释一些算法的内部细节,帮助读者理解类似的算法。

第7章对第2章给出的“Hello, world”应用程序进行解释。这个简单的应用程序并没有太大的实际用处(就像一般的“Hello, world”应用程序一样),但它说明了如何创建量子应用程序。

第8章在第6章和第7章的基础之上,说明如何创建一个利用了量子网络的Java应用程序,在两方之间进行安全通信。

第9章解释多伊奇-约萨算法。这个算法很容易利用Strange实现,使读者进一步熟悉量子计算的典型规律。

第10章讨论著名的量子算法:格罗弗搜索算法。这一算法对开发者而言具有现实意义。

第11章介绍舒尔算法,这也许是目前最热门的量子算法。这一算法需要结合传统计算和量子计算,十分适合作为本书的结尾。

本书配套代码

本书展示和引用了许多示例与演示应用程序。这些应用程序都用到了Strange量子计算模拟器。由于Strange是一个不断发展的项目,因此本书中的应用程序也会随之发展。

本书中的示例都基于撰写本书时最新公开的发行版Strange,此版本已上传到知名存储库(例如Maven Central等)。即使Strange的API发生变化,本书中的代码在未来也能运行。

本书的清单和正文包含许多源代码示例。源代码可能已被重新排版,添加了换行并重新设计了缩进,以适应本书的页面空间。在页宽不足时,可能增加了续行符。此外,正文中的源代码的注释通常已被删除。许多清单都包含代码注解,以突出重要概念。

作者简介

Johan Vos是Java Champion称号获得者、活跃的OpenJDK贡献者、OpenJDK Mobile项目负责人,以及OpenJFX共同规范负责人。Johan在代尔夫特理工大学获应用物理学博士学位。他是ProJava FX2/8/9和The Definitive Guide to Modern Java Clients with JavaFX的作者之一。Johan一直积极参与开源软件的开发。他也是Blackdown团队的一员,该团队将Java移植到了 Linux系统。除了在OpenJFX中担任领导,他还为许多 Java 和JavaFX 的相关库做出了贡献,包括本书中讨论的 Strange 和StrangeFX等。

本书封面简介

本书封面插画的标题为《达拉纳女人》[1]Femme Dalécarlie)。该插图取自Jacques Grasset de Saint-Sauveur(1757—1810)所著、1797年在法国出版的Costumes de Différents Pays一书,书中每幅插图均由手工精细绘制与着色而成。Grasset de Saint-Sauveur丰富多样的作品集,生动地再现了200多年前世界各地的巨大的文化差异。那时,世界各地的人们彼此相隔,语言或方言也各不相同。无论在城市街头还是乡村田野,单从着装就能轻松辨识人们的居住地以及职业或生活地位。

[1] 达拉纳是瑞典中部的一个省。——译者注

后来,人们的着装开始发生变化,当时丰富的地域多样性逐渐消失。现在单从着装已很难区分不同大陆的居民,更不用说不同国家、地区和城镇的了。也许人们牺牲文化多样性,是为了换取更多样的个人生活,也是为了换取更多样化、更快节奏的科技生活。

在这个计算机书籍同质化的时代,Manning出版社通过将Grasset de Saint-Sauveur绘制的、再现两个世纪前丰富多样的区域生活的插图用作封面,来赞颂计算机产业的创造性和主动性。

资源与支持

资源获取

本书提供如下资源:

配套代码库;

本书思维导图;

异步社区7天VIP会员。

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

提交勘误

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

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

与我们联系

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

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

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

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

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

关于异步社区和异步图书

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

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

第1部分 量子计算导论

阅读本书之前,你可能已经听说过量子计算。量子计算的核心部分以量子物理学为基础。量子计算具有巨大的潜在影响力,将对安全、金融、科学等领域产生深远影响。因此,你在专业的科学论文和流行的生活杂志中,都能看到量子计算的身影。

但是量子计算对于当今的计算机开发者意味着什么?本书讨论了量子计算对开发者生活的潜在影响。

第1部分简要解释量子计算的概念和结果,以便将讨论范围缩小到与开发人员相关的部分。第1章介绍基本思想;第2章讲解如何创建一个使用量子计算的简单的Java应用程序,并介绍Strange库,借助此库便可继续用Java(或其他高级语言)编程,但仍旧使用量子概念;第3章介绍量子计算的基本单元——量子位。

第1章 进化,革命,还是炒作?

本章内容

对量子计算的期望

适合用量子计算机求解的问题类型

Java编程者使用量子计算的方式

关于量子计算的书籍、文章、博客层出不穷。即使只阅读过有关量子计算的基本介绍,我们也会清楚地知道这不只是经典计算的小改进。相对于经典计算,量子计算的核心概念从本质上就完全不同,其应用领域也有很大差异。在某些领域,量子计算机可能可以解决经典计算机不能解决的问题。

除此之外,量子计算的基础是量子物理,所以它常常自带神秘的光环。量子物理并不是物理学中最简单的部分,一些量子物理的概念非常难以理解。

因此量子计算常常被人描述为一种处理数据的神秘而崭新的方法,它将彻底地改变世界。至少基于我们现在的了解,后半句是对的。许多分析师相信再过5到10年,量子计算将成为现实,其中的大多数人认为它将带来巨大的影响。

本书将尽量贴近现实,向新老Java开发者阐释,如何将量子计算运用于现有和新开发的应用中。我们将在后面说明,量子计算的确会在信息技术领域中的很多重要问题上产生巨大影响,也会解释为什么对真正的量子计算机的到来做好准备十分必要,以及如何使用Java和喜欢的工具(如集成编程环境和构建工具)实现这一点。虽然真正的量子计算硬件还没有广泛普及,但是开发者应该认识到利用量子计算开发软件需要一定的时间。而利用量子模拟器和早期原型,现在便可以开始在项目中探索量子计算。如果这样做,当硬件可用时,软件更有可能已经准备好投入使用。

1.1 期望管理

量子计算有着巨大的潜在影响。研究人员仍然在尝试评估这一影响,但至少从理论上看,量子计算可能对信息技术产业、安全、医疗、科学研究,乃至整个人类,都产生重大影响。因为这种潜在的影响,量子计算机常常被错误地描绘成一个巨大的经典计算机。这是不对的,要想了解量子计算的重要性,必须先理解为什么量子计算与经典计算有着根本上的不同。必须强调,在宏伟的目标实现之前,仍然有许多的障碍需要解决。

管理期望

不要认为量子计算能解决所有问题;

量子计算与经典计算有着根本上的不同;

量子计算主要适用于复杂问题;

量子计算机和经典计算机将需要并用;

硬件太过于复杂,不是我们讨论的范围;

虽然硬件还不明确,但已经可以利用量子模拟器和早期原型开发软件了。

量子计算的潜在成功取决于许多因素,这些因素可以归为以下两类。

硬件——需要全新复杂的硬件;

软件——要想利用量子硬件的能力,需要开发专门的软件。

1.1.1 硬件

一些不确定性阻碍着量子计算的大规模使用。此外,还需要强调的是,量子计算机不能解决所有问题。

量子计算所需的硬件离量产还尚远。生产适合量子计算机或量子协处理器的量子硬件极为困难。

本书中解释的量子计算的核心原理,是基于量子力学的核心原理之上的。量子力学研究自然界的基本粒子,通常被认为是物理最具挑战性的方向之一,而且它还在不断发展。一些出色的物理学家,包括阿尔伯特·爱因斯坦、马克斯·普朗克和路德维希·玻尔兹曼,都曾投入到量子力学理论的研究中。但是量子力学研究的一个重要问题是:通常很难检验理论与实际是否相符。但令人惊讶的是,科学家们创造了一些理论来预测一些尚未被观察到的粒子的存在。观察这些自然界的最小元素及其行为需要特殊的硬件设备。

在封闭的实验室环境中研究和操纵量子效应就已经十分困难。而在现实世界,以可控的方式利用这些量子效应则更是巨大的挑战。

现有的许多实验性量子计算机都基于超导原理,在非常低的温度(例如 10 毫开尔文,即约−273摄氏度)下运行,因此存在一些在室温下运行的经典计算机所没有遇到的实际限制。

本书对硬件进行了抽象。我们稍后会讨论,软件开发人员没有理由等到硬件准备好之后,才开始考虑最终应该在量子硬件上运行的软件算法。量子计算的原理可以通过量子计算机模拟器来理解和模拟。我们预计,只要核心量子概念相同,在量子计算机模拟器上编写的量子软件,也可以在真正的量子计算机上运行。

关于硬件

显然,硬件问题还未解决,通常人们预计,可用于解决目前经典计算无法解决的问题的硬件还需要数年方可上市。硬件解决方案需要支持大量可靠的量子位(量子计算的基本概念,本章稍后将详细讨论),这些量子位要能在合理的时间内使用,并且可以由经典计算机控制。

在撰写本书时,就已经有许多早期的量子计算机原型问世了。IBM有一台可通过云接口供公众使用的5量子位的量子计算机,而它提供给研究实验室和客户使用的量子计算机拥有更多的量子位。谷歌也有一台名为Bristlecone的量子处理器,包含72量子位。D-Wave和Rigetti等专业公司也有量子计算机原型机。

还需要提及的是,比较不同的量子计算机也并非易事。乍一看,量子位的数量像是最重要的标准,但这可能会产生误导。构建量子计算机的最大困难之一是尽可能长时间地保持量子状态。非常轻微的干扰都会破坏量子态,使量子计算机出现需要纠正的错误。

1.1.2 软件

虽然理论上量子计算可以在一些领域取得巨大突破,但是人们普遍认为,量子计算机或量子处理器可以接管经典计算机的部分任务,但不能取而代之。可以使用量子计算解决的问题,与目前使用经典计算机解决的问题并无不同。然而,量子计算由于采用了完全不同的底层方法,因此可以用完全不同的方式处理问题。对于给定的一组问题,使用量子计算可以显著提高性能。因此,当今由于没有足够的计算资源而无法解决的问题,如模拟化学反应、优化问题或整数分解,用量子计算机应该就可以求解。

关于时间复杂度

算法的复杂度通常用时间复杂度表示。一般而言,当输入规模增加时,算法就需要更长的时间。根据问题在输入规模增加时难度提升的值,可以将问题分为不同的类别。这通常用大O记号表示。

假设输入数据有n项。如果每项输入需要固定数量的处理步骤,则算法完成的总时间与n呈线性关系。在这种情况下,我们称算法需要线性时间

许多算法比这更复杂。当输入数据的数量增加时,所需的总步数可能会以n的平方(n2)或nk次方(nk,其中k为常数)的速度增加。在这种情况下,我们称算法需要多项式时间

还有一些算法随着输入数据的增加而变得更难,如果没有已知的算法可以在多项式时间内解决问题,我们就称这一算法需要非多项式时间。如果算法的步骤数随n的增加指数级增长,则称该算法需要指数级时间。当问题需要2n步时,复杂度显然会急剧增加,因为n是步骤数量的指数。在稍后讨论的另一个示例中,所需步骤数为,其中b是位数,因此该问题也被称为指数复杂度。

事实证明,量子计算机将有助于在多项式时间内解决经典计算机无法在多项式时间内解决。一个常见的例子是就是整数分解,它是加密中的常见操作(例如应用于广泛使用的密码系统RSA),或者更准确地说是破解加密算法。整数分解的基本思想是将一个数分解为几个质数,使它们的乘积等于原数,如15=3×5。虽然没有计算机也很容易做到,但可以想象,当数字变大时计算机就会变得很有帮助,例如将146963分解为281×523。

想要分解的数字越大,找到答案所需的时间就越长。这是许多安全算法的基础。其思路是几乎不可能分解一个包含1024位的数字。可以证明,解决这个问题所需时间的增长趋势大约与以下函数相同:

  (1.1)

其中 是原数所包含的位数。此式开头的 e 是重要部分:简言之,这意味着 b增大,分解该数字所需的时间会指数级增加。图1.1显示了分解一个b位数字的时间复杂度。

需要注意的是,绝对时间并不重要。这里要表达的是,即使用现有最快的计算机,只增加一位也会带来巨大的差异。

由于没有已知的经典算法可以在多项式时间内解决这一问题,因此我们称这一问题是非多项式时间的,因而通过增加数字的位数,经典计算机就几乎不可能得到这一问题的答案。

然而,同样的问题可以利用量子算法在多项式时间内解决。利用舒尔算法,量子计算机解决这一问题的时间与同阶,详情参见第11章。

为了说明这意味着什么,我们将量子计算机利用量子算法与经典计算机利用经典算法的时间复杂度图像叠加在一起,如图1.2所示。

图1.1 时间随位数指数级增长

图1.2 多项式时间与指数级时间的对比

从一定位数起,量子计算机的解题速度开始超越经典计算机。而且位数越多,这个差距就越大。这是因为经典计算机解决这一问题所需的时间随位数指数级增长,而量子算法只会随之以多项式方式增长。

这类问题在量子上是多项式时间的,是相对值得利用量子计算机处理的问题。

注意:舒尔算法是最流行的量子计算算法之一。但基于一些原因,仅在第11章中讨论该算法。首先,要想充分理解算法的工作原理,必须掌握量子计算的基本知识。其次,以当前的硬件状态,即使有了快速的革新,大多数专家认为,距离量子计算机能在实际可接受的时间内算出合理大小的密钥,仍有数年的时间。你应该尽早考虑舒尔算法,但我们也不想给你错误的期望。最后,尽管舒尔算法的影响可能很大,但量子计算在其他领域也能产生巨大影响,例如医疗、化学、优化问题等。

1.1.3 算法

对于经典计算机难以解决(非多项式时间)而量子计算机相对容易解决(多项式时间)的计算问题,舒尔算法是一个非常好的例子。这个差异从何而来?我们将在第11章讨论,舒尔算法将整数分解问题转换为求函数周期性的问题,即求的值,使得对于所有的都有。这个问题在经典计算机上仍然很难解决,但在量子计算机上相对容易解决。

如今已知适用于量子计算机的大多数算法,都基于相同的原理:将初始问题转换为容易用量子计算机解决的问题。经典方法如图1.3所示,将知名的算法应用于该问题,并获得结果。

图1.3 经典方法:在经典计算机上解决问题

如果可以设法将初始问题转换为一个量子计算机容易解决的问题,就可以期待效率提升,如图1.4所示。

图1.4 将问题转换为量子计算机可以带来重大改变的领域

注意,需要考虑将初始问题转换为另一个问题,以及将结果转换回去的代价。但是在谈论计算密集型算法时,这一代价应该可以忽略。

注意:在阅读量子算法的解释时,你可能会奇怪为什么这看似是绕了远路。这是因为量子计算机可以快速地解决一些特定的问题,可以将初始问题转换为这些特定问题的其中之一,将有可能利用量子计算机执行快得多的算法。

提出这些算法通常需要深厚的数学背景。一般而言,开发人员不会为应用创建新的量子算法,而是使用现有算法,寻求量子计算机的帮助。但是,开发人员如果了解量子算法的基础知识,理解为什么它们更快以及如何使用它们,将在工作中具有优势。

1.1.4 为什么现在就开始量子计算?

程序员们有时不明白,离量子计算机真正可用还要几年的时间,为什么现在就要学习量子计算。不过,你必须意识到,编写涉及量子计算的软件不同于编写经典软件。虽然预计会有一些方便开发人员使用量子计算机的库,但这些库也需要编写。即便如此,你也需要技能和知识,才能在特定的项目中使用最佳的工具。

任何从事需要加密或安全通信的项目的开发人员都能从学习量子计算中获益。当量子计算机变得可用时,一些现有的经典加密算法将变得不安全。而等到量子计算机已经破解加密后,再改进加密软件并非好主意。与之相反,应该在硬件可用之前就做好准备。因为量子计算确实具有颠覆性,所以可以预测,与使用一个新的库相比,大多数开发人员需要更多的时间学习量子计算。

虽然我们不想用最糟糕的场景吓唬你,但你需要了解,要突破现有的加密技术,并不需要安装大量的量子计算机。网络攻击亦然,而且可以随处进行。

提示:一旦量子计算机变得更强大,一些现有的通信协议和加密技术很有可能会受到攻击。开发人员必须了解哪种软件可能易受攻击以及如何解决此问题。这不是一蹴而就的事情,因此建议你尽早开始研究。

本书中讨论的软件示例均为基本应用程序。它们说明了量子计算的核心原则,并阐明了哪些问题适用于量子计算。但是基本算法和完整功能的软件之间还有巨大的差距。因此,尽管硬件还需要数年时间才能准备就绪,但开发人员必须明白,可能还需要很长时间来优化软件项目,以在可能的情况下尽量多地利用量子计算。

20世纪中叶,当第一台数字计算机建成时,同样需要创建软件语言。而现在我们可以使用经典计算机来模拟量子计算机,在不访问量子计算机的情况下,为量子计算机开发软件。

这个优势很重要,它凸显了量子模拟器的重要性。当量子硬件变得更广泛可用时,现在就开始利用模拟器研究量子计算的开发人员将比其他开发人员拥有更加巨大的优势。

1.2 量子计算的颠覆性部分:贴近自然

量子计算的一个主要应用领域是物理相关领域。长期以来,科学家们尝试通过在经典计算机上模拟,来理解现代物理学的核心概念。但是,由于自然界的多数基本粒子不遵循经典定律,因此在经典计算机上模拟它们非常复杂。使用这些量子粒子及其定律作为量子计算机的基础,可以更容易地解决这些问题。

位的性质

的概念似乎常常与信息的最小单元相对应。音乐、书籍、视频,以及设备的功能(应用程序)等信息可以用位的序列表示。正如本章后面将简要解释的,自然本身,包括宇宙中的所有物质,不能单单描述为0和1的序列。在小尺度下,粒子具有不同的行为,量子力学相当成功地描述了这种行为。自然界的基本组成单元不是0和1,而是一组具有不同属性的基本粒子,量子计算使用的正是这些粒子及其属性。

1.2.1 经典计算机的进化

在最近几十年中,计算机变得越来越强大。其性能提升的主要原因如下:

计算机内存的扩大;

处理器性能的提升;

计算机处理器数量的增加。

这些进步一般会带来增量、线性的提升。使用量子计算机带来的预期性能提升与这些改进无关。量子计算机不是具有更小芯片、更多内存、更快通信的经典计算机。量子计算的出发点是量子位这一完全不同的基本概念。第3章将详细讨论量子位,但因为这是一个至关重要的概念,所以这里先进行简要介绍。

1.2.2 量子计算机的进化

经典计算机最小的信息单元是位,其取值可以为0或1。位可以进行不同的操作,也可以更改或互相组合。在任意时刻,计算机中所有的位都处于确定的状态:不是0就是1。经典的位可以类比为电流,0状态代表无电流,1状态代表有电流。所有现存经典的软件开发都是基于对这些位的操纵。使用位的组合和对位进行逻辑门操作,是经典软件开发的本质。第3章将详细讨论。

量子计算的基本概念是量子位。与经典位相同的是,量子位也具有0和1的取值。但其颠覆性区别在于,量子位的值可以是0和1的组合。乍一听,这十分令人困惑。量子计算的基本单元(量子位)比经典计算机的基本单元(位)更加复杂。接下来这个结论听起来很反直觉,然而的确得到了事实证明:量子位比经典位更接近自然的基本概念。

1.2.3 量子物理

顾名思义,量子计算基于量子物理,量子物理研究最小粒子及其行为和相互作用。事实证明,一些粒子具有有趣的特征。例如,电子具有自旋的属性,它有两个取值:上或下。有趣的是,在给定时刻,电子的自旋可以处于这两个值的叠加态。这是一个难以理解的物理现象,在第4章讨论的一定的限制下,可以用更容易理解的数学公式将自旋表达为上值和下值的线性组合。

一些物理现象允许一个属性同时处于一种以上的状态,电子的自旋就是其中一例。在量子计算中,量子位就是通过这种物理现象实现的,因而量子位的行为非常接近量子物理的现实情况。量子位的物理实现就是一个真实世界的概念。因此人们常认为量子计算更贴近自然的运作方式。

量子计算的目标之一是利用小尺度微粒发生的物理现象。因此,量子计算更加“自然”,虽然乍一看比经典计算复杂得多,但事实上可以说它反而简单得多,因为它需要的人工干预更少。

理解量子现象和操纵量子现象是两码事,证明量子现象的存在耗费了大量的时间和资源。为了实现在量子位上进行计算表征,我们必须能够操纵其基本单元。这尽管已在大型科研中心实现,但在一般的计算环境下仍然很难做到。

1.3 混合计算

前文提到,量子计算机非常擅长处理一些特定的问题,但并非所有问题。因此,利用一种新形式的混合计算可能可以取得最好的结果,即用量子系统解决一部分问题,用经典计算机解决其余部分。

事实上这并不是一个全新的方法,大多数现代计算机系统已经采用了中央处理器(Central Processing Unit,CPU)与图形处理单元(Graphics Processing Unit,GPU)并用的类似模式。GPU适于执行某些任务(例如图形或深度学习应用程序所需的矢量运算),但并非所有任务。许多现代UI框架,包括JavaFX在内,都利用了CPU和GPU的可用性,并将部分工作委托给CPU,而将另一些部分工作委托给GPU,从而优化需要执行的任务,如图1.5所示。

图1.5 CPU与GPU分担工作

对不同任务使用不同协处理器的思路可以扩展到量子计算中。在理想情况下,软件应用程序可以将一些任务委托给CPU,一些委托给GPU,剩下的委托给量子处理单元(Quantum Processing Unit,QPU),如图1.6所示。

图1.6 CPU、GPU与QPU分担工作

当工具用于其适合的工作时,就能取得最好的结果。对此,软件应用程序应该使用GPU进行矢量计算,将QPU用于在经典系统上速度较慢但在量子系统上速度较快的算法,而将CPU用于所有GPU或QPU不占优势的事情。

如果每个终端应用程序都需要判断哪个部分应当委托给哪个处理器,那么软件开发人员的工作会非常困难。我们希望框架和库能够提供一些帮助,并将这个问题从终端开发者那里抽象出来。

如果使用JavaFX API在Java中创建用户界面,就不必担心哪些部分在GPU上执行、哪些部分在CPU上执行的问题,JavaFX API的内部已经实现了此功能。JavaFX框架可以检测有关GPU的信息并将工作委托给它。虽然开发人员仍然可以直接访问CPU或GPU,但这通常是Java等高级语言所不允许的。

图1.6对QPU进行了非常简化的表示。GPU很容易适用于现代的服务器、桌面系统以及移动和嵌入式设备,但量子处理器则相对更困难,因为它要求在受控、无噪声的环境中操纵量子效应(例如硬件的温度需保持在接近绝对零度的低温)。至少一开始,大多数真正的量子计算资源有可能要通过特定的云服务器,而非嵌在芯片上的协处理器才能获得。同理,因为库可以将复杂任务拆分,并将一些任务委托给通过云服务访问的量子系统,从而使终端软件应用程序获益,如图1.7所示。

图1.7 依赖云服务的量子计算

1.4 为量子计算机抽象软件

之前提到,真正的量子计算机虽然已经问世,但远未实现大规模生产。近年来,量子计算机硬件制造已取得了巨大进步,然而在实现真正可用的量子计算机或量子处理器等方面仍然存在诸多不确定性。这并不能作为拒绝开始研究软件的理由,人们已从经典的硬件和基于它的软件中学到了很多东西。在过去的几十年中,高级编程语言使得软件开发人员能够以便捷的方式创建应用程序,而无须担心底层硬件。Java作为一种高级编程语言,特别擅长对底层的低级软硬件进行抽象。在执行Java应用程序时,最终还是会执行低级的、针对特定硬件的指令。所用的硬件不同,不同架构的不同处理器对应的机器指令也不同。

经典计算机的硬件仍在不断发展,软件亦然。但大部分Java语言的变更已与硬件的变更无关。硬件演化和软件演化的解耦促成了更快的创新。在许多领域,硬件的改进最终会导致软件更具体的改变。但对于大多数开发人员来说,硬件和软件是可以解耦的。图1.8展示了Java应用程序如何最终实现对硬件的操作,多个不同层次的抽象将真实的硬件(以及硬件的演变)与终端应用程序屏蔽开来。

在很大程度上,量子计算软件也可以与硬件的演化解耦。虽然硬件实现的细节还远未确定,但总体原则正变得愈加清晰,第2章~第5章将对此进行讨论。软件开发可以基于这些一般原则进行。正如经典软件开发者不必考虑晶体管(经典计算机的低级单元)如何集成芯片,量子软件开发者也不必考虑量子位的物理表达。量子软件只要满足并利用一般原理,就可以在真正的量子计算机或量子处理器问世后使用。

图1.8 传统软件栈

大量可用的经典计算机为量子计算机的软件开发提供了巨大的方便。量子硬件的行为可以通过经典软件进行模拟,这是一个巨大的优势,因为这意味着借助经典计算机上用经典软件编写的量子模拟器,就可以用来测试量子软件。显然,量子计算机模拟器与真正的量子计算机之间存在重大差异:根据定义就可以知道,典型的量子算法在量子计算机上的执行速度比量子模拟器上快得多。但从功能的角度来看,它们的结果应是一样的。

除了真正的量子计算机和量子计算机模拟器之外,还可以考虑云服务。通过将工作委托给云服务,应用程序甚至不知道它是在模拟器上运行还是在真正的量子计算机上运行。云服务提供商可以将服务从模拟器升级为真正的量子计算机。当使用真正的量子计算机时,应该能更快地获得结果,但结果与使用模拟器时一致。

这些选择的组合如图1.9所示,图中表明Java应用程序可以使用量子计算的API库。这些库可以在真正的量子计算机上实现,也可以使用量子计算模拟器,或者将工作委托给云端。但对于终端应用,结果应当是相似的。另外,即使将来硬件拓扑发生变化(例如添加了一个量子协处理器),终端应用程序也不需要修改。库的更新不应对顶层API产生影响。

我们已经讨论过,量子算法在处理经典计算机需要非多项式(指数)时间的问题上特别有优势,一个典型的例子是整数分解。量子计算机能将大整数进行质因数分解(至少提供部分算法),而目前即使动用世界上所有的计算能力,也是不可能做到的。因此用经典软件编写的量子计算机模拟器也无法进行大数分解。

同样的量子算法当然也可以分解小整数,因此量子模拟器可以用于小整数的分解。可以在量子模拟器上用较小的数字创建、测试和优化量子算法。一旦硬件可用,就可以用相同的算法在真实的硬件上进行整数分解(一个5量子位的系统足以分解21)。随着量子硬件的进步(更多的量子位或更少的错误率),算法就能分解更大的数字。

图1.9 使用量子API的Java应用程序栈

总而言之,量子计算机的原理可以在经典计算机上用模拟器进行模仿。开发者可以借此在模拟器上进行量子实验。本书使用了一个用Java编写的开源量子模拟器,它既可以在计算机本地运行,也可以在云环境中运行。你不需要关心代码具体在哪里执行。

本书通过查看库中算法的源代码的方式解释一些量子计算的原理。虽然这并不是使用量子计算编写应用程序的硬性要求,但这会帮助你更深入地了解量子算法,以及量子算法如何突显其真正的优势。

1.5 从量子到计算还是从计算到量子

信息技术项目中有多种运用量子计算的方式,人们正在同时开展不同方向的研究。大体而言,研究有两个不同的思路,两者中间存在许多中间地带,如图1.10所示。

图1.10 在新的量子专用语言和现有语言之间寻找平衡

一个极端思路是使用直接对应于量子计算的物理特性的特定软件语言,例如微软发明的量子软件语言Q#,这种方法有明显的优缺点。

优点:直接建立在量子物理概念之上,更容易在具体应用程序中运用这些概念;

缺点:已有许多开发语言可供选择,切换语言的学习成本更高。另外,由于多数应用程序需要量子计算与经典计算的结合,仅使用一种量子专用语言并不足以支持一个项目。

另一个极端思路则是坚持现有语言,对开发者隐藏所有的量子特征,这种思路也有优缺点。

优点:开发者不用学习新的编程语言,他们的软件可以“魔法般地”从经典、量子、混合模式中选择最合适的实现方式;

缺点:“魔法般”的效果其实很难实现。将特定语言在特定情形下进行优化就已经很困难(这是即时编译器的工作),而在运行过程中动态地决定是使用量子还是经典程序则更加棘手。

本书选择了两个极端思路的中间地带。第2章介绍的Strange量子模拟器支持Java开发者创建使用量子计算的应用程序。你不需要学习一门新的语言,但仍然可以创建属于自己的算法,并从量子特性中获益。

本书的第1部分主要讨论量子物理的特性,这些特性使得量子计算与经典计算存在根本性差异。我们会用Strange中的底层代码来说明这些概念。

第2部分讨论这些基本概念如何与Java代码相关联,以便更加接近“使用现有语言”的方式。

第3部分将聚焦于可以在库中实现并被开发者使用的量子算法。如图1.11所示。

图1.11 本书的各部分与开发量子计算软件不同方式的对应关系

最后,我们预计软件平台将变得越来越智能,且可以找到结合经典计算与量子计算实现特定功能的最佳方法。这需要很长时间,但与此同时,了解量子计算及其特性对于软件开发者而言一定是一种竞争优势。

本章小结

量子计算并非只是经典计算的升级。

量子计算采用物理学中的基本核心概念,因此比经典计算更接近现实。

硬件可能还需要数年的发展,才能使人们充分从量子计算中获益。

对于在实践中用经典方式无法实现的算法,量子计算机有望显著为其加速,但并不会取代经典计算机,因为量子计算机只擅长特定(而重要)的任务。

高级软件的开发不应担心底层量子的细节。

软件开发者应该意识到,将算法的某些部分转移到不同领域可带来巨大改进。

相关图书

DeepSeek原理与项目实战大模型部署、微调与应用开发
DeepSeek原理与项目实战大模型部署、微调与应用开发
AI辅助编程实战
AI辅助编程实战
大模型工程化:AI驱动下的数据体系
大模型工程化:AI驱动下的数据体系
推荐系统:产品与算法解析
推荐系统:产品与算法解析
软件开发中的决策:权衡与取舍
软件开发中的决策:权衡与取舍
大模型应用开发:RAG入门与实战
大模型应用开发:RAG入门与实战

相关文章

相关课程