Qiskit是一个开源 SDK,用于在扩展量子电路、运算符和基元级别上使用量子计算机。
该库是 Qiskit 的核心组件,其中包含用于创建和使用量子电路、量子运算符和原始函数(采样器和估计器)的构建块。它还包含一个支持优化量子电路的转译器,以及一个用于创建高级算子的量子信息工具箱。
有关如何使用 Qiskit 的更多详细信息,请参阅此处的文档:
https://docs.quantum.ibm.com/
警告
请勿尝试将现有 Qiskit 0.* 环境就地升级到 Qiskit 1.0。阅读更多。
我们鼓励通过pip
安装 Qiskit :
pip install qiskit
Pip 将自动处理所有依赖项,您将始终安装最新(且经过充分测试)的版本。
要从源安装,请按照文档中的说明进行操作。
现在 Qiskit 已安装,是时候开始使用 Qiskit 了。量子程序的基本部分是:
sampler
对结果进行采样,或使用estimator
来估计值。使用QuantumCircuit
类创建一个示例量子电路:
import numpy as np
from qiskit import QuantumCircuit
# 1. A quantum circuit for preparing the quantum state |000> + i |111>
qc_example = QuantumCircuit ( 3 )
qc_example . h ( 0 ) # generate superpostion
qc_example . p ( np . pi / 2 , 0 ) # add quantum phase
qc_example . cx ( 0 , 1 ) # 0th-qubit-Controlled-NOT gate on 1st qubit
qc_example . cx ( 0 , 2 ) # 0th-qubit-Controlled-NOT gate on 2nd qubit
这个简单的例子将纠缠态称为 GHZ 态h
)、相位门 ( p
) 和 CNOT 门 ( cx
)。
制作完第一个量子电路后,请选择要使用的原始函数。从sampler
开始,我们使用measure_all(inplace=False)
来获取测量所有量子位的电路的副本:
# 2. Add the classical output in the form of measurement of all qubits
qc_measured = qc_example . measure_all ( inplace = False )
# 3. Execute using the Sampler primitive
from qiskit . primitives import StatevectorSampler
sampler = StatevectorSampler ()
job = sampler . run ([ qc_measured ], shots = 1000 )
result = job . result ()
print ( f" > Counts: { result [ 0 ]. data [ "meas" ]. get_counts () } " )
运行此命令将得到类似于{'000': 497, '111': 503}
的结果,根据统计波动,50% 的时间为000
% 的时间为111
。为了说明 Estimator 的强大功能,我们现在使用量子信息工具箱来创建算子run()
函数。请注意,估算器需要一个没有测量的电路,因此我们使用之前创建的qc_example
电路。
# 2. Define the observable to be measured
from qiskit . quantum_info import SparsePauliOp
operator = SparsePauliOp . from_list ([( "XXY" , 1 ), ( "XYX" , 1 ), ( "YXX" , 1 ), ( "YYY" , - 1 )])
# 3. Execute using the Estimator primitive
from qiskit . primitives import StatevectorEstimator
estimator = StatevectorEstimator ()
job = estimator . run ([( qc_example , operator )], precision = 1e-3 )
result = job . result ()
print ( f" > Expectation values: { result [ 0 ]. data . evs } " )
运行此命令将得到结果4
。为了好玩,尝试为每个单量子位运算符 X 和 Y 分配 +/- 1 的值,看看是否可以实现此结果。 (剧透警告:这是不可能的!)
使用 Qiskit 提供的qiskit.primitives.StatevectorSampler
和qiskit.primitives.StatevectorEstimator
不会让您走得太远。量子计算的力量无法在经典计算机上模拟,您需要使用真正的量子硬件来扩展到更大的量子电路。然而,在硬件上运行量子电路需要重写量子硬件的基础门和连接性。执行此操作的工具是转译器,Qiskit 包含用于综合、优化、映射和调度的转译器通道。但是,它还包含一个默认编译器,在大多数示例中都运行良好。以下代码将示例电路映射到basis_gates = ['cz', 'sx', 'rz']
和量子位的线性链coupling_map =[[0, 1], [1, 2]]
。
from qiskit import transpile
qc_transpiled = transpile ( qc_example , basis_gates = [ 'cz' , 'sx' , 'rz' ], coupling_map = [[ 0 , 1 ], [ 1 , 2 ]] , optimization_level = 3 )
Qiskit 提供了一个抽象层,允许用户在任何提供兼容接口的供应商的硬件上运行量子电路。使用 Qiskit 的最佳方法是使用运行时环境,该环境为给定的硬件平台提供sampler
和estimator
的优化实现。该运行时可能涉及使用预处理和后处理,例如带有错误抑制、错误缓解以及最终内置错误校正的优化转译器通道。运行时实现qiskit.primitives.BaseSamplerV2
和qiskit.primitives.BaseEstimatorV2
接口。例如,一些提供运行时原语实现的包是:
Qiskit 还提供了一个较低级别的抽象接口来描述量子后端。该接口位于qiskit.providers
中,定义了一个抽象BackendV2
类,提供商可以实现该类来向 Qiskit 表示其硬件或模拟器。后端类包括用于在后端执行电路的公共接口;然而,在此接口中,每个提供商可以执行不同类型的预处理和后处理,并返回供应商定义的结果。与真实硬件交互的已发布提供程序包的一些示例包括:
您可以参阅这些软件包的文档,以获取有关如何访问和使用这些系统的进一步说明。
如果您想为 Qiskit 做出贡献,请查看我们的贡献指南。通过参与,您应该遵守我们的行为准则。
我们使用 GitHub issues 来跟踪请求和错误。请加入 Qiskit Slack 社区进行讨论、评论和提问。对于与运行或使用 Qiskit 相关的问题,Stack Overflow 有一个qiskit
。有关 Qiskit 量子计算的问题,请使用 QuantumComputing Stack Exchange 中的qiskit
标签(请首先阅读有关如何在该论坛中提问的指南)。
Qiskit 是许多在不同层面上为该项目做出贡献的人的成果。如果您使用 Qiskit,请按照随附的 BibTeX 文件进行引用。
特定版本的变更日志是动态生成的,并写入每个版本的 Github 上的版本页面。例如,您可以在此处找到0.46.0
版本的页面:
https://github.com/Qiskit/qiskit/releases/tag/0.46.0
当前版本的变更日志可以在版本选项卡中找到:变更日志提供了给定版本的显着更改的快速概述。
此外,作为每个版本的一部分,都会编写详细的发行说明,以详细记录版本中发生的更改。这包括有关升级和新功能的潜在重大更改的任何文档。请在此处查看所有发行说明。
我们感谢美国能源部国家量子信息科学研究中心科学办公室、量子优势联合设计中心 (C2QA) 对 Qiskit 开发的部分支持,合同号为 DE-SC0012704。
阿帕奇许可证 2.0