Python量子计算实践:基于Qiskit和IBM Quantum Experience平台

978-7-115-60973-1
作者: [美]哈西·诺伦(Hassi Norlén)
译者: 陈梦婷
编辑: 刘雅思

图书目录:

详情

本书使用Qiskit开源框架和IBM Quantum Experience平台搭建一个量子计算平台,并借助Python来介绍实现量子编程的方法。 本书内容由浅入深,从搭建编程环境并编写一个简单的量子程序开始,介绍如何使用Python编写简单的脚本,Qiskit和IBM Quantum Experience进行交互的方法,概率计算、叠加和纠缠等基本概念,影响量子程序输出结果的各种物理因素,Qiskit量子门资源库,使用Aer模拟量子计算机,使用Ignis清理量子操作,Grover搜索算法,以及使用Aqua运行Grover算法和Shor算法等重要内容。 本书能够帮助读者学会使用Qiskit和IBM Quantum Experience,同时结合Python编程实践来实现量子比特的可视化并深入理解量子门、贝尔态、量子线路等概念,进一步掌握在实践中使用量子算法的方法。

图书摘要

版权信息

书名:Python量子计算实践:基于Qiskit和IBM Quantum Experience平台

ISBN:978-7-115-60973-1

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

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

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

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


版  权

著    [美]哈西·诺伦(Hassi Norlén)

译    陈梦婷

责任编辑 刘雅思

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

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

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

读者服务热线:(010)81055410

反盗版热线:(010)81055315

内 容 提 要

本书使用Qiskit开源框架和IBM Quantum Experience平台搭建一个量子计算平台,并借助Python来介绍实现量子编程的方法。

本书内容由浅入深,从搭建编程环境并编写一个简单的量子程序开始,介绍如何使用Python编写简单的脚本,Qiskit和IBM Quantum Experience进行交互的方法,概率计算、叠加和纠缠等基本概念,影响量子程序输出结果的各种物理因素,Qiskit量子门资源库,使用Aer模拟量子计算机,使用Ignis清理量子操作,Grover搜索算法,以及使用Aqua运行Grover算法和Shor算法等重要内容。

本书能够帮助读者学会使用Qiskit和IBM Quantum Experience,同时结合Python编程实践来实现量子比特的可视化并深入理解量子门、贝尔态、量子线路等概念,进一步掌握在实践中使用量子算法的方法。

关 于 作 者

哈西·诺伦(Hassi Norlén)是瑞典籍美国人。他既是一位教育家、物理学家,也是一名长期致力于计算机编程的软件开发人员,对小型程序、大型程序、新兴程序和经典程序都颇有研究。几年前,他偶然进入了量子计算的“新世界”,并从那时起开始涉足这个令人着迷的领域。研究量子计算既是他的工作,也是他的兴趣爱好。

工作上,他就职于IBM公司的AI应用部门,负责内容设计。业余生活上,他既是IBM公司的量子大使,也是Qiskit软件的倡导者。他通过演讲、编程和举办量子计算研讨会,宣传量子计算和Qiskit开源软件开发工具包。

致 谢

感谢丹尼斯·拉夫纳(Denise Ruffner)为我提供了撰写本书的机会,感谢安迪·库亚尔(Andi Couilliard)的大力支持!

感谢詹姆斯·韦弗(James Weaver)、罗伯特·洛雷多(Robert Loredo)、查尔斯·鲁宾逊(Charles Robinson)、史蒂文·马戈利斯(Steven Margolis)和加布里埃尔·张(Gabriel Chang)为我提供的建议和支持,与我进行探讨。

感谢杰瑞·周(Jerry Chow)带我去参观IBM公司的量子计算机,那是我第一次见到量子计算机。感谢杰伊·甘贝塔(Jay Gambetta)、鲍勃·苏托尔(Bob Sutor)和IBM公司量子团队的全体成员,你们让量子计算成为现实!

关于审稿人

詹姆斯·韦弗(James Weaver)既是一位对量子计算充满热情的软件开发人员,也是一名作家兼演说家。他是Java Champion(Java冠军程序员),也是JavaOne Rockstar演讲者。詹姆斯撰写过Inside JavaBeginning J2EEPro JavaFX系列和《物联网编程实战:应用Raspberry Pi和Java》(Raspberry Pi with Java)等图书。作为IBM公司的量子技术推广工程师,詹姆斯在量子计算会议和经典计算会议上就使用Qiskit进行量子计算发表过国际演讲。

前  言

使用IBM Quantum ExperienceIBM量子计算云平台)和Qiskit可以搭建一个简单易用又广受青睐的量子计算平台。它们不但可以用于通过云端访问IBM的量子计算机硬件并进行编程,也可以用于在本地模拟器云端模拟器上运行代码。

本书旨在借助简单示例和高级示例来介绍在Python环境中实现量子编程的方法。基于Python构建的Qiskit(Quantum Information Science Toolkit,量子信息科学工具包)软件可以安装在本地,是当今最容易使用的量子计算学习工具之一。

本书将从最基本的概念(比如安装和升级Qiskit、查看Qiskit的版本号)开始,逐步介绍Qiskit的类和方法,然后介绍创建和运行量子程序所需的组件,以及如何将这些Qiskit组件集成到混合的量子程序和经典程序中,以利用Python强大的编程功能。

本书将使用模拟器和真实的硬件来探索、比较和对比嘈杂中型量子(Noisy Intermediate-Scale Quantum,NISQ)计算机和通用容错量子(universal fault-tolerant quantum)计算机。其间会仔细探究嘈杂后端的模拟、在真实硬件上缓解噪声和误差的方法,以及使用Shor算法对单个量子比特进行量子纠错。

本书最后将介绍量子算法,并比较量子算法与经典算法的不同之处。本书将仔细研究Grover算法的代码实现,然后使用Qiskit Aqua运行不同版本的Grover算法和Shor算法,以展示如何在Qiskit代码中直接复用这些已经构建好的算法。本书是对IBM公司的量子信息科学工具包Qiskit及其组成(TerraAerIgnisAqua)的一次全面介绍。

本书还将使用在线的IBM Quantum Experience用户界面,通过拖放操作进行量子计算。本书中的所有内容和拓展方法都可以在IBM Quantum Experience的云端进行编码。

本书每章都包含代码示例,用于解释每个操作配方中相应的原理。

读者对象

本书适合希望了解如何使用Qiskit和IBM Quantum Experience实现量子解决方案的开发人员、数据科学家、研究人员以及量子计算爱好者阅读。读者最好具备量子计算的基础知识,并且有一定的Python语言编程基础。

本书内容

本书采用以解决问题为导向、以探索方法为基础的写作方法,借助IBM Quantum Experience、Qiskit和Python来介绍量子计算机编程中的细节。

第1章介绍将Qiskit作为Python 3.5的扩展包安装到本地工作站的方法,以及在IBM Quantum Experience上进行注册、获取API密钥和示例代码的步骤。

第2章展示如何使用Python编写简单的脚本,引导读者了解经典比特和量子比特的概念,以及在没有Qiskit和IBM Quantum Experience的情况下,量子门[1]是如何运行的。

[1] 原文中quantum gate(量子门)是quantum logic gate(量子逻辑门)的简称。——译者注

第3章介绍IBM Quantum Experience、IBM Quantum Experience在线版,以及基于云的交互式量子计算机编程工具。在本章中,我们将编写一个简单的程序,并学习在Qiskit和IBM Quantum Experience之间进行交互的方法。

第4章介绍一系列基本的量子程序或量子线路,以深入研究概率计算、叠加和纠缠等基本概念。在本章中,我们将在一台真实的IBM量子计算机上运行我们的第一个量子程序。

第5章着眼于IBM Quantum后端,主要介绍影响量子程序输出结果的各种物理因素。

第6章简单介绍Qiskit以开箱即用的方式提供的量子门,使读者了解量子门对量子比特的作用。本章还介绍了构成其他量子门基础的通用量子门,并从单量子比特门扩展双量子比特门、3量子比特门以及更多量子比特门(更先进的量子线路中会用到这些量子门)。

第7章帮助读者在一系列本地模拟器或云端模拟器上运行自己的量子线路。读者甚至可以将模拟器设置为模拟IBM Quantum后端的行为,以在自己的本地设备上实地测试自己的量子线路。

第8章介绍如何通过理解量子比特的行为来清理测量结果,并探讨如何使用降噪电路(如Shor码)来纠正噪声。

第9章搭建Grover搜索算法。Grover算法是经典搜索算法的二次加速。本章还将用到一个名为量子相位反冲的独特的量子工具,并搭建几个不同版本的算法,以在模拟器和IBM Quantum后端运行。

第10章介绍Grover搜索算法和Shor因子分解算法的Qiskit Aqua预制版本,还简要介绍了Qiskit Aqua算法库。

如何充分利用本书

为了充分利用本书,读者应该对量子计算的基本概念有一些了解。但本书不会花费过多笔墨证明相关概念,也不会深挖概念中的细节。如果读者还具备Python编程技能,则在本书构建一些稍微复杂的混合量子程序和经典程序时,更容易掌握相应内容。读者还需要对线性代数中的向量和矩阵乘法有基本的了解,这对于理解量子门的工作方式大有帮助,不过本书仍将使用Python和NumPy[2]来完成这项艰巨的工作。

[2] NumPy是用于科学计算的Python扩展包,底层使用C语言编写,可以直接存储数据,而不是存储对象指针。因此,在进行大型矩阵和高维数组的存储、运算时,NumPy比Python自身的嵌套列表更为高效。——译者注

Qiskit支持Python 3.5及以上版本。本书中的代码示例在Anaconda 1.9.12(Python 3.7.0)上使用Anaconda捆绑的Spyder编辑器、Qiskit 0.21.0和在线的IBM Quantum Experience Code Lab环境进行了测试。建议读者使用相同版本的软件进行测试。

本书中涉及的软件

操作系统要求

Python 3.7

任意版本的Windows、macOS、Linux

Qiskit 0.21.0(Python 3.5及以上)

任意版本的Windows、macOS、Linux

Anaconda Navigator 1.9

任意版本的Windows、macOS、Linux

资源与支持

本书由异步社区出品,社区(https://www.epubit.com)为您提供相关资源和后续服务。

配套资源

本书提供如下资源:

原书彩图文件;

配套源代码;

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

您也可以在异步社区本书页面中点击,跳转到下载界面,按提示进行操作即可。注意:为保证购书读者的权益,该操作会给出相关提示,要求输入提取码进行验证。

提交勘误

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

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

与我们联系

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

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

如果您有兴趣出版图书、录制教学视频,或者参与图书技术审校等工作,可以发邮件给本书的责任编辑(liuyasi@ptpress.com.cn)。

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

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

关于异步社区和异步图书

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

“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社30余年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、AI、测试、前端、网络技术等。

第1章 搭建编程环境

在开始进行量子程序开发之前,读者必须有一个Python环境来运行代码。本书中的示例代码既可以通过IBM Quantum团队提供的Qiskit开发者环境在本地设备上运行,也可以通过IBM Quantum Experience在线运行。

本章会介绍这两种编程环境,带领读者注册一个IBM Quantum Experience账号,并安装本地版本的Qiskit。此外,本章还会探讨开源Qiskit快速迭代的环境,以及如何及时更新本地环境。

本章主要包含以下内容:

创建IBM Quantum Experience账号;

安装Qiskit;

下载示例代码;

安装API密钥并访问提供服务的量子计算机;

及时更新Qiskit环境。

现在,让我们一起开始本章的学习吧!本章的内容十分重要,因为搭建编程环境是使用Qiskit进行编程的基础。花一些时间搭建好编程环境之后,就可以跟随本书中的操作配方,开始在Qiskit上进行量子编程了。读者也可以借鉴并运行本书提供的示例代码,迅速入门。

1.1 技术要求

本章中探讨的操作配方参见本书GitHub仓库中对应第1章的目录。

按照本章中的步骤搭建好编程环境后,读者可以在本地的Qiskit环境中运行本书中的操作配方。本书中的大多数操作配方也可以在IBM Quantum Experience的量子实验室Quantum Lab)环境中运行。运行本章的ch1_r1_version.py脚本可以列出在运行操作配方的环境中安装的Qiskit版本。

截至本书完稿时,安装Qiskit需要Python 3.5及以上版本的本地环境。更多关于Qiskit最新安装要求的详细信息,参见Qiskit官方网站。

IBM Quantum团队建议使用 Anaconda 发行版的 Python,并使用虚拟环境安装Qiskit,不要将Qiskit安装在用户日常使用的Python环境中。

不了解虚拟环境?

虚拟环境可提供独立的Python环境,读者可以分别更改每个环境。例如,读者可以创建一个独立的环境来安装Qiskit。然后,读者可以只在该环境中安装Qiskit,不涉及主环境中的Python框架,不会改动主环境中的Python版本。

随着Qiskit新版本的发布,从技术上讲,读者可以为每个版本的Qiskit分别创建一个全新的独立环境,保留稳定的旧版Qiskit量子编程环境。更多详情参见1.6节。

1.2 创建IBM Quantum Experience账号

IBM Quantum Experience账号是开启量子计算机编程大门的“钥匙”,有了账号,就可以与 IBM 公司一起探索量子编程世界。使用该免费账号,即可访问在线的 IBM Quantum Experience界面以及其中可用的编程工具。从技术上讲,测试 IBM Quantum Experience软件或安装Qiskit软件不需要使用IBM Quantum Experience账号,但是在免费提供的 IBM 量子计算机上运行程序需要使用该账号。本书建议读者创建一个 IBM Quantum Experience账号,因为大部分读者阅读本书可能就是为了在量子计算机上运行程序。

1.2.1 准备工作

既可以使用IBMid登录IBM Quantum Experience,也可以使用如下账号登录:

谷歌账号;

GitHub账号;

领英账号;

推特账号;

电子邮件地址。

1.2.2 操作步骤

(1)使用浏览器(最好使用谷歌的Chrome浏览器)访问IBM Quantum官方网站的登录页面。

(2)使用IBMid或其他账号登录。

也可以跳过登录步骤。没有登录的用户可以访问IBM Quantum Experience,但是只能搭建3量子比特的量子线路,并且只能使用模拟器后端。

(3)登录后,就有了一个已激活的IBM Quantum Experience账号,并可以进入主界面,如图1-1所示。

图1-1 IBM Quantum Experience主界面

(4)在主界面可以进行许多不同的操作。

点击左侧菜单栏中的“Circuit Composer”按钮(),跳转到量子线路创建器页面,开始在图形用户界面搭建自己的量子程序。现在,可以跳到第3章继续学习。

如果读者不想先安装本地的 Qiskit实例,可以跳转到 Qiskit记事本,开始使用Jupyter Notebook 在 Python 环境中编写自己的量子程序。先点击左侧菜单栏中的“Quantum Lab”按钮(),再点击“New Notebook”。现在,可以跳到第4章继续学习。

如果读者想继续按照本书的章节顺序学习 Qiskit软件,可以退出 IBM Quantum Experience,在本地计算机上安装Qiskit软件。

1.2.3 参考资料

IBM Quantum Experience is quantum on the cloud.

Quantum computing: It’s time to build a quantum community.

1.3 安装Qiskit

先将Python环境准备就绪,创建好自己的IBM Quantum Experience账号,然后使用pip[1]命令安装Qiskit(它是一个Python扩展包)。整个安装过程大约需要10 min,之后读者就可以根据自己的喜好,使用Python命令行或Anaconda[2]解释器编写自己的量子程序。

[1] pip是一个Python扩展包管理工具,可用于查找、下载、安装、卸载Python扩展包。——译者注

[2] Anaconda是一个开源的Python发行版,包含Conda、Python等软件,以及NumPy、pandas等Python扩展包。——译者注

1.3.1 准备工作

这一操作配方为读者提供了一些安装信息,展示了安装Qiskit软件的一般方法,但不讨论不同操作系统中安装细节的差异,也不讨论常规安装问题的排除方法。

更多关于Qiskit软件安装最新要求的详细信息,参见Qiskit官方网站。

1.3.2 操作步骤

(1)创建Anaconda虚拟环境。

$ conda create -n environment_name python=3

执行该命令,可以安装一套适用于特定系统环境的软件包。

(2)激活虚拟环境。

$ conda activate environment_name

(3)验证是否已经进入了搭建好的虚拟环境。

从现在开始,你的命令提示符应该包含了你自己的系统环境的名称。本书使用了类似于packt_qiskit[3]的名称来表示自己的系统环境:

[3] Packt代表Packt Publishing,读者可以自定义命令提示符的名称。——译者注

(packt_qiskit) Hassis-Mac:~ hassi$

命名问题

本章将输出完整的命令提示符,如(environment_name) … $,提示读者必须在正确的环境中执行命令。但在其他章节中,我们假设读者确实在已启用了Qiskit的环境中,因此只写通用提示符$

(4)如有需要,可使用pip进行更新。

要安装Qiskit,必须使用pip命令,因为Qiskit没有发布Conda[4]安装包。最新版的Qiskit需要用pip 19版以上的版本安装。

[4] Conda是为Python创建的一个开源的软件包管理系统和环境管理系统,适用于Windows、macOS和Linux操作系统,可以用于安装同一个软件的不同版本,还可以用于便捷地在不同版本之间切换。——译者注

如果读者使用的是旧版本的pip,需要先使用以下命令更新pip

(environment_name) … $ pip install -U pip

(5)安装Qiskit软件。

在完成所有的设置和准备工作之后,本书将开始带领读者进入主体内容的学习。使用以下命令安装Qiskit:

(environment_name) … $ pip install qiskit

安装包编译失败

在安装过程中,读者如果遇到报错“安装包编译失败”(the wheel[5] failed to build),可以忽略该报错。

[5] wheel是Python中的一种用于替代egg格式的新的工程打包文件的格式。——译者注

(6)使用Python验证Qiskit是否已经安装成功。

打开Python:

(environment_name) … $ python3

输入以下代码,导入Qiskit:

>>> import qiskit

完成这一步后,读者可能会因为初次使用Qiskit代码而感到兴奋。当然,严格意义上说,这并不算使用量子计算机进行编程。但可以肯定的是,进行到这一步,我们随时都可以开始编写自己的量子程序。

列出详细的版本信息:

>>> qiskit.__qiskit_version__

这时,系统会显示已安装的Qiskit组件的版本信息:

{'qiskit-terra': '0.15.2', 'qiskit-aer': '0.6.1',
'qiskit-ignis': '0.4.0', 'qiskit-ibmq-provider': '0.9.0',
'qiskit-aqua': '0.7.5', 'qiskit': '0.21.0'}

恭喜,Qiskit安装已完成,可以开始编写量子程序了!

通过在虚拟环境中使用pip install命令,读者可以仅在某个独立的系统环境中安装Qiskit,而不影响自己的其他Python环境。

1.3.3 知识拓展

Qiskit中还有一些可选的与可视化相关的功能,可以在Qiskit组件中进行可视化操作。读者可以使用如下命令安装相应组件:

(environment_name) … $ pip install qiskit[visualization]

注意

如果读者使用的是zsh[6],在输入的命令中必须用引号将组件括起来:

pip install 'qiskit[visualization]'

[6] shell是命令解释程序,zsh(Z-shell)是一种交互式的shell,也可以作为脚本解释器来使用。——译者注

1.3.4 参考资料

关于Anaconda环境的简要介绍,参见Anaconda官方网站的文档。

无论从何种意义上说,本书都不算排除Qiskit安装问题的指南。读者在安装Qiskit时,可能会遇到各种问题,具体会遇到何种问题取决于读者使用的本地操作系统类型、操作系统版本,或其他因素。但是不必担心,可以通过一些优质且友好的渠道获取帮助:

Slack[7]软件中的Qiskit频道;

[7] Slack是国外流行的一款团队协作软件,可以实现群组聊天、文件分享、搜索等功能。——译者注

Stack Exchange[8]网站中Qiskit相关问题的页面。

[8] Stack Exchange是一个编程领域的问答网站。——译者注

1.4 下载示例代码

本书操作配方中包含的示例程序长短不一,这些示例有助于引导读者迈出量子计算机编程的第一步。读者可以按照本书中的指引,亲自动手输入这些程序的代码,但是方便起见,读者也可以从Packt出版社的GitHub仓库或本书配套资源中直接获取示例代码。

本书中的Python示例代码是为使用3.5及以上版本的Python并在自己的Python环境中安装了Qiskit的用户编写的。这些Python示例代码都保存在以.py为扩展名的脚本文件中。

1.4.1 准备工作

读者既可以直接在自己的Python环境中输入这些操作配方,也可以将其输入IBM Quantum Experience或本地Anaconda环境中的Jupyter Notebook[9]中,但直接下载代码或使用Git将示例代码克隆到本地环境中更高效。克隆代码的优点是,如果示例代码有任何更新,可以通过远程代码仓库刷新本地文件。

[9] Jupyter Notebook是一个共享的Python记事本,可以用于编写Python、R、Julia、JavaScript等的代码,支持Markdown格式。——译者注

如果读者不打算使用Git克隆,而是以压缩文件的方式下载这些示例代码,可以按照1.4.2节中相应的操作步骤进行操作。

读者必须先进行以下操作,才能使用Git克隆示例代码。

(1)获取一个GitHub账号。读者可以在GitHub官方网站免费注册一个账号。

(2)在本地环境中安装Git。更多相关信息,参见Git官方网站的帮助文档。

(3)如果读者习惯使用用户界面,可能还需要安装GitHub桌面版(GitHub Desktop)。

1.4.2 操作步骤

本书提供了几种可以将操作配方下载到本地设备上的方法。

每种下载方法都需要先打开网页浏览器,然后跳转到名为“Quantum-Computing-in- Practice-with-Qiskit-and-IBM-Quantum-Experience”的GitHub仓库。

1.将GitHub仓库下载为压缩文件

获取操作配方的最简单的方式是仅将示例文件作为压缩文件下载,并在本地设备上解压。

(1)在前面提到的GitHub仓库中,点击“Clone or download”按钮,选择“Download zip”。

(2)下载压缩文件并选择文件存储位置。

(3)将文件解压。

2.使用Git克隆GitHub仓库

(1)点击“Clone or download”按钮并复制GitHub仓库的URL。

(2)打开命令行窗口,定位到想要保存克隆目录的本地位置。

(3)输入如下命令。

$ git clone https://git×××/PacktPublishing/Quantum-Computing-in-Practice-with- Qiskit-and-IBM-Quantum-Experience.git

命令的执行结果大概如下所示。

Cloning into 'Quantum-Computing-in-Practice-with-Qiskitand-IBM-Quantum- 
Experience'...
remote: Enumerating objects: 250, done.
remote: Counting objects: 100% (250/250), done.
remote: Compressing objects: 100% (195/195), done.
remote: Total 365 (delta 106), reused 183 (delta 54), pack-reused 115
Receiving objects: 100% (365/365), 52.70 MiB | 5.42 MiB/s, done.
Resolving deltas: 100% (153/153), done.

3.使用GitHub桌面版克隆GitHub仓库

(1)点击“Clone or download”按钮,选择“Open in desktop”。

(2)在GitHub桌面版的对话框中选择一个下载位置,将GitHub仓库克隆到该位置,并点击“OK”按钮。

读者现在可以浏览本书中的操作配方。每章都包含一个或多个操作配方。如有需要,读者可以将操作配方代码直接复制并粘贴到自己的 Python 环境中,也可以复制并粘贴到IBM Quantum Experience或本地Anaconda环境中的Jupyter Notebook中。

4.打开一个操作配方文件

到目前为止,读者已经使用命令行完成了所有操作。下面,本书将带领读者获取下文所示的 Python 程序,并在自己喜欢的Python解释器(如Anaconda SpyderJupyter Notebook)中运行它。

如果读者已经下载了本书的示例文件,可以在本地保存的下载文件中对应第1章的目录中找到操作配方文件 ch1_r1_version.py,其代码如下所示,运行后可以列出刚才安装的Qiskit组件的版本信息。

# Import Qiskit
import qiskit
 
# Set versions variable to the current Qiskit versions
versions=qiskit.__qiskit_version__
 
# Print the version number for the Qiskit components
 
print("Qiskit components and versions:")
print("===============================")
 
for i in versions:
    print (i, versions[i])

运行该代码,系统会显示类似图1-2这样的输出结果。

图1-2 Qiskit组件及其版本信息

接下来介绍如何在读者现有的环境中运行脚本。

5.在Spyder中运行Python脚本

在本地环境中,读者现在可以在自己选择的Python解释器中运行Python脚本。下面以在Anaconda的Spyder中运行Python脚本为例。

重要提示

确保是在安装了Qiskit的虚拟环境中运行解释器。否则,解释器找不到Qiskit,无法正常运行脚本。

(1)打开Anaconda的用户界面。

(2)选择虚拟环境。

(3)点击Spyder图标。如果读者的虚拟环境中还没有安装Spyder,系统会自动安装。安装Spyder可能需要一些时间。

(4)在Spyder中,打开本章的示例Python脚本chl_rl_version.py。

(5)点击“Run”。该脚本会读取已安装的Qiskit组件的版本信息。读者也可以在Jupyter Notebook中打开Python脚本,例如在在线的IBM Quantum Experience的Jupyter Notebook中打开,但是需要一些额外的操作。

6.在Anaconda的Jupyter Notebook中运行Python脚本

(1)打开Anaconda的用户界面。

(2)选择虚拟环境。

(3)点击Jupyter Notebook图标。如果读者的虚拟环境中还没有安装Jupyter Notebook,系统会自动安装。

(4)在根目录中打开的默认浏览器中会打开Jupyter Notebook的界面。找到并点击示例Python脚本chl_rl_version.py。

(5)示例脚本在Jupyter Notebook文本编辑器中被打开。读者现在可以看到代码,但是无法运行。

(6)返回到Jupyter Notebook浏览器,点击“New Notebook”。

(7)将Python脚本中的代码复制并粘贴到新建的记事本中,此时可以点击“Run”,观察代码的运行过程。

7.在IBM Quantum Experience的Jupyter Notebook中运行Python脚本

(1)为了在在线的IBM Quantum Experience的Notebook中运行Python脚本,读者需要登录IBM Quantum Experience。

(2)在IBM Quantum Experience的主页面中,点击左侧菜单栏中的“Quantum Lab”按钮(),然后点击“New Notebook”,再按照上一部分的步骤7进行操作。

1.4.3 运行原理

本书后续章节中介绍的基于 Qiskit的 Python 代码可以在任何满足 Qiskit要求的Python环境中运行。读者可以自由选择适合自己的系统环境,还可以在自己选择的系统环境中选择自己喜欢的工具来运行程序。

本书中的代码已经在Anaconda中默认的Spyder编辑器、IBM Quantum Experience和Anaconda中的Jupyter Notebook环境里测试运行过。

1.5 安装API密钥并访问提供服务的量子计算机

在安装好Qiskit之后,读者即可开始创建自己的量子程序,并在本地模拟器中运行这些程序。如果读者有时想在IBM Quantum的实体硬件上运行自己的量子程序,必须在本地环境中安装自己的API密钥,每个API密钥都是独一无二的。

IBM Quantum Experience的API密钥

如果读者在IBM Quantum Experience的Notebook环境中运行自己的Qiskit程序,系统会自动注册一个API密钥。

1.5.1 准备工作

在安装API密钥之前,读者必须先创建一个IBM Quantum Experience的账号。如果读者还没有创建账号,可以回到1.2节,按照操作步骤进行创建。

1.5.2 操作步骤

下面,本书将介绍如何在本地环境中安装API密钥。

(1)通过IBM Quantum官方网站的登录页面登录到IBM Quantum Experience。

(2)在IBM Quantum Experience主页面的右上角,找到用户图标,点击该图标,选择“My account”。

(3)在账号页面中找到“Qiskit in local environment”选项,点击“Copy token”。

(4)读者可以将复制的令牌粘贴到一个临时的位置,或者将其保留在剪切板中。

(5)在本地设备上访问自己的Qiskit环境。之前的步骤中已经包含这一步,但是如果读者使用的是Anaconda,需要再次进行本操作。

(6)激活虚拟环境。

$ conda activate environment_name

(7)打开Python。

$(environment_name) … $ python3

检查屏幕上显示的Python版本信息,确保正在运行的Python版本是正确的:

Python 3.7.6 (default, Jan 8 2020, 13:42:34)
[Clang 4.0.1 (tags/RELEASE_401/final)] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

(8)获取所需的IBMQ类型。

>>> from qiskit import IBMQ

(9)在本地环境中安装API令牌。

>>> IBMQ.save_account('MY_API_TOKEN')

在这一步中,读者需要将刚才从IBM Quantum Experience里复制的API令牌粘贴到该命令中MY_API_TOKEN的位置。要保留单引号,因为该命令需要使用单引号。

(10)登录自己的账号。

API令牌就位后,读者需要验证API密钥是否都设置好了,自己的账号权限是否正常:

>>> IBMQ.load_account()

执行上述命令后,系统会显示如下输出结果:

<AccountProvider for IBMQ(hub='ibm-q', group='open', project='main')>

这就是为账号提供服务的量子计算机的信息,其中包含hub(集线器)、group(群组)和project(项目)信息。

1.5.3 运行原理

在上述示例中,读者导入的主要的类是IBMQ,它是一种用于使用IBM在云上提供的量子硬件和软件的工具箱。

本章使用save_account()在本地存储账号。随着学习的深入,在将要访问IBM Quantum机器的操作配方中,本书将在量子程序中使用IBMQ.load_account()IBMQ.get_provider()类,以确保读者能够获取正确的访问权限。

更新API密钥

如果出于某些原因,读者需要在IBM Quantum Experience中创建一个新的API令牌,并更新本地保存的API令牌,可以使用如下命令:

>>> IBMQ.save_account('NEW_API_TOKEN', overwrite=True)

1.5.4 知识拓展

在本书后续操作配方的代码中,会使用如下命令设置一个provider变量,以保存为读者账号提供服务的量子计算机的信息:

>>> provider = IBMQ.get_provider()

之后,读者就可以使用provider信息选择IBM Quantum计算机或后端来运行自己的量子程序。在后续示例中,本书将选择一个名为“IBM Q 5 Yorktown”(内部名称为ibmqx2)的量子计算机作为后端:

>>> backend = provider.get_backend('ibmqx2')

1.6 及时更新Qiskit环境

Qiskit是一个不断更新的开源编程环境。在撰写本书的过程中,我经历了Qiskit软件次版本和主版本的多次更新。

通常,及时更新并使用最新版本的Qiskit是明智之举,但有时进行更新后,一些代码组件的行为可能会发生变化。建议读者仔细阅读每个新版本的发布说明。有时,版本更新引入的变更会改变用户代码的行为方式。在这种情况下,读者可以推迟更新,直到验证自己的代码仍然按预期工作。

如果读者使用的是Anaconda环境,则可以为不同版本的Qiskit启用多个编程环境,这样,即使某次Qiskit版本更新破坏了代码,还有一个备用环境可以使用。

Qiskit更新得很快

IBM Quantum Experience的Notebook环境总是会运行最新版本的Qiskit,建议读者在更新本地环境之前,在Notebook环境中测试自己的代码。

读者也可以按照以下步骤订阅Qiskit的更新通知,获取新版本发布的时间。

(1)通过IBM Quantum官方网站的登录页面登录IBM Quantum Experience。

(2)在IBM Quantum Experience主页面的右上角找到用户图标,点击该图标,选择“My account”。

(3)在账号页面的“Notification”设置中,将“Updates and new feature announcements”设置为“On”。

1.6.1 准备工作

如果读者有不止一个环境,则在开始更新Qiskit环境之前,需要在每个环境中验证自己所运行的Qiskit的版本。

在每个环境中,都可以从命令行、IDE(如Spyder)或Jupyter Notebook中启动Python,然后运行以下代码:

>>> import qiskit
>>> qiskit.__qiskit_version__

如果读者安装了旧版本的Qiskit,运行上述代码可能会输出以下结果:

{'qiskit-terra': '0.9.0', 'qiskit-aer': '0.3.0', 'qiskit-ibmqprovider': 
'0.3.0', 'qiskit-aqua': '0.6.0', 'qiskit': '0.12.0'}

之后,读者就可以跳转到Qiskit的“Release Notes”页面,查看是否有更新的版本可供下载。

这些步骤的作用都是验证Qiskit版本是否正确。整个过程都可以在Python中自动进行。顺着这个思路,本书将带领读者进行下一部分内容的学习。

1.6.2 操作步骤

(1)激活虚拟环境。

$ conda activate environment_name

(2)执行如下命令,以检查虚拟环境的pip包是否已过时。

(environment_name) … $ pip list –outdated

(3)该命令会返回如下列表,列表中包含用户目前所有已过时的pip包,并列出可用的版本。

Example:
Package Version Latest Type
------------------ ------- ------- -----

qiskit 0.19.6 0.21.0 sdist
qiskit-aer 0.5.2 0.6.1 wheel
qiskit-aqua 0.7.3 0.7.5 wheel
qiskit-ibmq-provider 0.7.2 0.9.0 wheel
qiskit-ignis 0.3.3 0.4.0 wheel
qiskit-terra 0.14.2 0.15.1 wheel

(4)使用pip命令更新Qiskit。

(environment_name) … $ pip install qiskit –upgrade

(5)在命令行中验证Qiskit是否安装成功。

(environment_name)… $ pip show qiskit

该操作的返回结果类似如下所示:

Name: qiskit
Version: 0.21.0
Summary: Software for developing quantum computing programs
Home-page: https://git×××/Qiskit/qiskit
Author: Qiskit Development Team
Author-email: qiskit@us.ibm.com
License: Apache 2.0
Location: /Users/hassi/opt/anaconda3/envs/packt_qiskit/lib/python3.7/site-packages
Requires: qiskit-aer, qiskit-terra, qiskit-aqua, qiskit-ignis, qiskit-ibmq-provider
Required-by:

(6)验证Qiskit是否已集成到了自己的独立环境中的Python上。

① 打开Python:

(environment_name)… $ python3

② 导入Qiskit:

>>> import qiskit

③ 列出详细的版本信息:

>>> qiskit.__qiskit_version__

④ 执行该命令后,会显示已安装的Qiskit组件的版本:

{'qiskit-terra': '0.15.2', 'qiskit-aer': '0.6.1', 'qiskit-ignis': '0.4.0',
'qiskit-ibmq-provider': '0.9.0', 'qiskit-aqua': '0.7.5', 'qiskit': '0.21.0'}

恭喜,Qiskit已经成功更新了,读者现在运行的是最新版本!

1.6.3 运行原理

不同读者使用本书的方式不同,部分读者可能初次阅读关于Qiskit的教程时就读到了这个更新过程,刚刚安装了Qiskit,并不需要更新。这种情况的读者可以标注一下1.6节,然后继续往后阅读,以后在进行Qiskit更新时再翻回来看这一部分。

pip工具可以管理用户的每个虚拟环境的软件包的更新。正如本书之前所提到的,如果读者有多个虚拟环境,建议对其分阶段进行更新。

读者可以更新某一个虚拟环境,并试着在该环境中运行自己的量子程序,以确保该新版本不会对自己的代码造成任何不利的影响。

好的,到这里为止,读者应该已经跟随本书的指引,正确地设置了一个或多个可以运行量子程序的Qiskit环境。如果读者觉得已经准备就绪,现在就可以跳转到第4章,开始使用Qiskit在Python中进行量子编程,开启量子计算世界的奇妙探险。如果读者准备学习一些预备内容,大致了解量子计算机编程,可以从第2章开始学习,了解什么是量子比特和量子门;也可以翻到第3章,使用IBM Quantum Experience的交互式编程界面,直观地感受量子编程。

无论读者选择哪条学习路径,都不必过分担心,因为本书会引导读者使用Python完成复杂的工作。再次祝读者能够体会到学习量子编程的快乐!

相关图书

Python极客项目编程(第2版)
Python极客项目编程(第2版)
动手学自然语言处理
动手学自然语言处理
Python财务应用编程
Python财务应用编程
Web应用安全
Web应用安全
深度学习的数学——使用Python语言
深度学习的数学——使用Python语言
Python数据科学实战
Python数据科学实战

相关文章

相关课程