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()
関数に渡します。 Estimator には測定を行わない回路が必要であるため、以前に作成した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
にあるこのインターフェースは、プロバイダーがハードウェアまたはシミュレーターを Qiskit に表すために実装できる抽象BackendV2
クラスを定義します。バックエンド クラスには、バックエンドで回路を実行するための共通インターフェイスが含まれています。ただし、このインターフェイスでは、各プロバイダーがさまざまな種類の前処理および後処理を実行し、ベンダー定義の結果を返す場合があります。実際のハードウェアとインターフェイスする公開されたプロバイダー パッケージの例をいくつか示します。
これらのシステムにアクセスして使用する方法の詳細については、これらのパッケージのドキュメントを参照してください。
Qiskit に貢献したい場合は、貢献ガイドラインをご覧ください。参加することにより、当社の行動規範を遵守することが期待されます。
リクエストとバグの追跡には GitHub の問題を使用します。ディスカッション、コメント、質問については、Qiskit Slack コミュニティに参加してください。 Qiskit の実行または使用に関する質問については、Stack Overflow にqiskit
があります。 Qiskit を使用した量子コンピューティングに関する質問については、Quantum Computing Stack Exchange のqiskit
タグを使用してください (まず、フォーラムでの質問方法に関するガイドラインをお読みください)。
Qiskit は、さまざまなレベルでプロジェクトに貢献する多くの人々の作品です。 Qiskit を使用する場合は、付属の BibTeX ファイルに従って引用してください。
特定のリリースの変更ログは動的に生成され、リリースごとに Github のリリース ページに書き込まれます。たとえば、 0.46.0
リリースのページは次の場所にあります。
https://github.com/Qiskit/qiskit/releases/tag/0.46.0
現在のリリースの変更ログは、[リリース] タブにあります。変更ログには、特定のリリースの注目すべき変更の概要が示されています。
さらに、各リリースの一部として、リリースの一部として変更された内容を詳細に文書化する詳細なリリース ノートが作成されます。これには、アップグレードおよび新機能の潜在的な重大な変更に関するドキュメントが含まれます。すべてのリリースノートはここでご覧ください。
私たちは、契約番号 DE-SC0012704 に基づく DOE 科学局国立量子情報科学研究センター、量子アドバンテージ共同設計センター (C2QA) からの Qiskit 開発に対する部分的なサポートに感謝します。
Apache ライセンス 2.0