使用 IBM Quantum Experience 编写您的第一个量子电路
介绍
随着量子计算越来越受欢迎,各种云提供商都在其平台上向公众提供量子计算机。本指南将重点介绍 IBM Quantum Experience 平台,并向您展示如何编写您的第一个基本量子电路。
您将执行该电路,首先使用在经典机器上运行的量子模拟器,然后在真实的量子设备上运行!
首先,通过主页熟悉该平台。您需要创建一个新的 IBMid 或使用 GitHub 等第三方提供商登录。
登录后,使用左侧导航栏导航到Quantum Lab。这是您的笔记本的存放位置。笔记本是指 Jupyter Notebook,这是一个开源的交互式环境,可在浏览器中运行 Python 代码,特别适用于数据分析和方程式。这些笔记本文档使用 .ipynb 作为文件扩展名。
创建笔记本
使用“新建笔记本 +”按钮创建一个新笔记本。您将看到一些代码已经为您编写好了,它们位于所谓的单元格中。您可以通过单击单元格使其突出显示,然后单击顶部导航中的“运行”按钮来运行单元格。
此单元格包含可帮助您入门的默认导入。请注意,您正在导入 Qiskit,它是 IBM 的开源量子 SDK,使用 Python 作为其编程语言。使用 Qiskit,您可以编程量子电路并在模拟器或实际量子系统上运行它们。
建立电路
用 Qiskit 编写的程序有三个主要部分:构建、执行和分析。让我们从构建步骤开始。
初始化
在下面的代码中,你将在名为qc的量子电路中分别初始化两个量子位和两个经典位:
# cell 2
qc = QuantumCircuit(
2, # quantum register with 2 qubits
2 # classical register with 2 classical bits
)
经典比特有两种状态:0 和 1。可以将这些状态视为硬币的正面和反面。在对经典计算机进行编程时,您总是在这两种状态之间来回翻转硬币。
类似地,量子比特在测量时也处于 0 或 1 状态。然而,在测量之前,量子比特也可以处于一种概率状态,称为叠加。想象一下这就像硬币在翻转后在半空中的状态。量子研究人员利用量子比特的这一独特特性来完成需要巨大处理能力的任务。
当这些量子比特和经典比特被初始化的时候,它们的状态都是0。
在测量量子比特时,您将结果存储在经典比特中。 qc.measure()中的第一个列表表示量子寄存器,第二个列表表示经典寄存器。 您正在将一个映射到另一个:
# cell 2
qc.measure([0,1], [0,1])
在模拟器上执行电路
在构建步骤中,您还没有告诉电路做任何有趣的事情,但在返回之前,您需要执行该电路。
指定模拟器
首先在量子模拟器上运行你的电路。在这种情况下,这意味着在经典机器上运行优化的 C++ 代码。
Aer 是 Qiskit 的模拟器组件,最常用的模拟器是QasmSimulator,因为它允许多次执行:
# cell 2
simulator = Aer.get_backend('qasm_simulator')
运行电路
执行电路并指定实验次数(您想要重复实验的次数):
# cell 2
job = execute(qc, simulator, shots=1000)
捕获实验结果
现在,存储并格式化已发生的 1,000 次射击的结果:
# cell 2
result = job.result()
counts = result.get_counts(qc)
print("\nCount:",counts)
到目前为止的所有代码都应按顺序粘贴到笔记本的第二个单元格中。全部粘贴完成后,运行该单元格。输出应为:
Count: {'00': 1000}
这意味着您运行的 1,000 次测试中,有 1,000 次测量到了状态 00(每个量子位一个 0)。
分析电路
电路分析的一个基本步骤就是简单地画出电路。为此,请在程序的第二个单元格末尾添加此行:
# cell 2
qc.draw()
读懂电路图
这是一个电路图,您将看到两个量子比特的电路线(用 q0 和 q1 注释),以及代表经典比特的双灰线(用 c 和表示经典比特数的数字注释,在本例中为 2)。
从左到右阅读,您会注意到仪表符号。这代表测量操作。符号上的双灰线有一个指向经典电路线的箭头,旁边有一个 0,这意味着您正在将量子位 q0 的测量值存储在经典位 0 中。向右移动,您可以看到这个重复,但对于量子位 q1 和经典位 1。
绘制结果
创建第三个单元格,并添加以下行:
# cell 3
plot_histogram(counts)
您可以看到,在此图中,获得结果 00 的概率是 1.00 或 100%。
添加量子门
# cell 2
qc.h(0)
此处,h代表Hadamard,这是您正在应用的门的名称,在本例中是量子比特 0。现在,您可以将 Hadamard 门视为将硬币(又称量子比特)置于翻转后在半空中旋转的状态。硬币落地的概率是 50/50。这种概率的均等分割称为均匀叠加。
再次运行第二个单元。请注意,现在有两个结果(00 和 01),每个结果的测量时间约为 50%。其中一个量子比特始终在 0 状态下测量,而另一个量子比特有时处于 0 状态,有时处于 1 状态。
您可能会注意到这里有点奇怪。您操作了量子位 0,即寄存器列表中的第一个。然而,在打印的结果中,可变的不是第一个量子位,而是第二个。这是因为当涉及到字符串时,Qiskit从右到左对位进行编号。
在真实量子系统上执行
到目前为止,在本指南中,您只使用了模拟器来运行电路。当您尝试估计少量量子比特的行为方式时,模拟器非常有用,而且实际上,这就是您在一段时间内要做的全部工作。但是如果您想在真正的量子设备上运行实验怎么办?
为简单起见,首先删除带有 Hadamard 门的线路。这样您就可以回到最初的实验,在该实验中,您会看到 100% 的时间输出结果 00。
然后,将第一个单元格中当前定义提供程序的行替换为以下内容:
# cell 1
provider = IBMQ.get_provider(hub='ibm-q')
backends = provider.backends(simulator=False, operational=True)
backend = backends[0]
backend
运行第一个单元格以查看有关您将要使用的后端的打印信息。
在第二个单元格中,将定义作业的线替换为以下内容:
# cell 2
job = execute(qc, backend, shots=1000)
现在运行第二个单元(这可能需要几分钟)。
你注意到什么有趣的事情了吗?如果你查看计数输出,你会发现你不再只有一个被测量的状态,而是有四个!为什么会发生这种情况?
量子系统极其敏感,容易受到环境干扰,从而影响量子比特的状态。这也是为什么你应该多次运行实验的原因——如果你只运行一次,结果可能会非常不准确。
如果您想查看刚刚运行的作业的信息,请转到左侧导航中的“结果”选项卡。
结论
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~