在Python中使用qiskit包进行量子计算机编程

简介: 在Python中使用qiskit包进行量子计算机编程

一个普遍的误解是,量子计算机尚未准备好进行市场应用,并且该技术还需要很多年才能使用。在本文中,我们将介绍对量子计算机进行编程的一些基本原理, 并消除这种误解。我们将研究免费的开源软件:IBM研发的QISKit ,以及量子机器学习软件 PennyLane 。我们还将介绍如何在IBM的云端量子计算机上运行程序。在后续文章中,我们将讨论一些应用到机器学习中的程序,这些应用程序可供有好奇心的人使用。

image.png

什么是量子计算机?

首先,让我们谈谈量子计算以及你能从这项技术中期待什么。你会发现在手机,笔记本电脑或平板电脑内部的计算机芯片都是由硅构成的。最常见的技术之一是:使用一种基于光的特殊光刻技术将微观图案蚀刻到硅芯片中。这些微小的图案使我们能够以可控方式通过硅芯片传输电子(电流)。目前,我们已经达到了这些微小图案可以达到的物理极限。现在我们可以以纳米级精度有效大量创建它们,一个典型的体系结构大约为10纳米,大约20到50个原子。

目前存在可以更精确操纵单个原子的技术,并且我们目前可以创建比你通常在计算机或电话中发现的架构还要小的架构。不过这种制造过程要慢一些, 因此要大量生产这些小得多的,原子尺度的芯片要困难些。在构造具有如此小特征的计算机芯片时,我们遇到的困难是电子和原子的量子行为。电子具有波粒二相性,这意味着,在某些情况下,电子的行为类似于波,而不是粒子,因此,如果蚀刻的图案太小,将其限制在硅芯片上的微小蚀刻图案上将变得更加困难。电子“扩散”并发生电子泄漏(量子隧穿效应),从而导致部分电流流过硅芯片中微小通道。这种泄漏意味着芯片无法达到预期的性能,并且电子作为波的行为将成为问题。这通常被称为“摩尔定律之死”,它代表了过去几十年来,我们所期望计算机性能增长的停滞。如果你将赌注押在假设市场不断增长上,那么这将是一个很大的问题,因为计算机芯片的大小和效率确实存在物理限制。

量子计算旨在将这种量子力学的“问题”作为一种计算优势,通过使用它,来以不同于我们的手机和笔记本电脑中通常的二进制1和0的方式来处理信息。量子计算机的一种有用方式是作为ASIC  (专用集成电路),这不是确切的,但却不是一个坏的类比。将其视为一种特殊的计算机芯片,以能够比标准硅芯片更有效地执行特定类型的计算。让我们看一下QISKit中基本计算单位的表示方式。

QISKit中的量子态

首先,您需要下载免费的 Anaconda,以便您可以使用Jupyter Lab。下 载Anaconda之后,在Anaconda导航中打开Jupyter Lab的实例,要安装QISKit,你只需在Jupyter notebook或Jupyter Lab中使用pip。

image.png

接下来,你需要导入qiskit 和matplotlib库。

image.png

现在,如果要在Bloch Sphere上绘制“Spin-Up”态,则可以键入以下命令:

image.png

我们可以使用以下命令绘制量子比特的“Spin-Down"状态。

image.png

通常,量子比特状态不再局限于简单的0或1(经典的二进制位),量子比特可以处于无限多个状态。每个状态都可以表示为Bloch球面上的一个点。Spin-Up对应于状态0, Spin-Down 对应于状态1,但是量子比特也可以处于这两种状态的组合中。Bloch球上的每个点都像地球表面上的坐标一样, 代表唯一的量子比特状态。量子比特有无限多个不同状态的这种特性与量子力学中“叠加态”概念有关。例如,Bloch球上的以下状态是状态0和状态1的均匀混合,因此它处于这两个状态的叠加状态。

image.png

此“Spin-Right”位置表示为“叠加态”,

image.png

或0状态和1状态的“线性组合”。如果您不理解线性代数表达,那也没关系。现在,如果我们想在Spin-Up状态(或状态0)下对单个量子比特进行操作,并将其翻转为Spin-Down (或状态1),则可以使用非门。非门或“Pauli X门”是量子逻辑门。量子逻辑门在概念上与经典逻辑门相似,但并不完全相同。它们对量子比特的操作非常类似于经典逻辑门可以对比特进行的操作,但是它们始终是可逆的,并由单位矩阵乘法表示。我们可以在QISKit中创建一个量子电路,如下所示:

image.png

现在,如果要使用非门对单个量子进行操作,可以在QISKit中使用以下代码进行操作。

image.png

然后,我们可以定义一个设备来运行电路。

image.png

最后,我们可以输出通过运行电路而得到的态矢量。

image.png

这表明我们已经将量子比特状态翻转为Spin-Down,这是量子算法的基本思想。在后续文章中,我们将研究如何在实际硬件上实现这些量子逻辑门。同样也可以使用IBM的软件来完成,并且可以对量子计算机芯片的微波脉冲进行编程。

目录
相关文章
|
3天前
|
Python
Python中字典解包(Unpacking Dictionaries)
【6月更文挑战第14天】
16 5
|
8天前
|
测试技术 虚拟化 云计算
GitHub高赞!速通Python编程基础手册,被玩出花了!
随着云时代的来临,Python 语言越来越被程序开发人员喜欢和使用,因为其不仅简单易学,而且还有丰富的第三方程序库和相应完善的管理工具。 从命令行脚本程序到 GUI程序,从图形技术到科学计算,从软件开发到自动化测试,从云计算到虚拟化,所有这些领域都有 Python 的身影。 今天给小伙伴们分享的这份手册采用以任务为导向的编写模式,全面地介绍了 Python 编程基础及其相关知识的应用,讲解了如何利用 Python 的知识解决部分实际问题。
GitHub高赞!速通Python编程基础手册,被玩出花了!
|
9天前
|
数据管理 Python 内存技术
python WAV音频文件处理—— (2)处理PCM音频-- waveio包
python WAV音频文件处理—— (2)处理PCM音频-- waveio包
35 15
|
2天前
|
Python
Python中解包为关键字参数
【6月更文挑战第15天】
6 2
|
5天前
|
Python
NumPy 是 Python 中的一个重要的科学计算包,其核心是一个强大的 N 维数组对象 Ndarray
【6月更文挑战第18天】NumPy的Ndarray是科学计算的核心,具有ndim(维度数)、shape(各维度大小)、size(元素总数)和dtype(数据类型)属性。方法包括T(转置)、ravel()(扁平化)、reshape()(改变形状)、astype()(转换数据类型)、sum()(求和)及mean()(计算平均值)。更多属性和方法如min/max等可在官方文档中探索。
22 5
|
4天前
|
Python
在Python中,解包参数列表和Lambda表达式是两个不同的概念
【6月更文挑战第19天】在Python中,解包参数允许将序列元素作为单独参数传递给函数,如`greet(*names_and_ages)`。而Lambda表达式用于创建匿名函数,如`lambda x, y: x + y`。两者可结合使用,如`max(*numbers)`找列表最大值,但过度使用lambda可能降低代码可读性。
11 3
|
6天前
|
Python
|
5天前
|
开发者 Python
Python基础第八篇(Python异常处理,模块与包)
Python基础第八篇(Python异常处理,模块与包)
|
5天前
|
开发者 Python
【干货】Python编程惯例
【干货】Python编程惯例
11 1