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.BaseEstimatorV2
使用預處理和後處理,例如具有錯誤qiskit.primitives.BaseSamplerV2
、錯誤緩解以及最終內建錯誤校正的最佳化轉譯器通道。例如,一些提供運行時原語實作的套件是:
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