Qiskit

Qiskitは、量子コンピュータ用のオープンソースのフレームワークである。量子回路を作成し、プロトタイプの量子デバイスやシミュレーション上で実行するためのツールを提供する。の量子回路に対応しており、これに従う量子ハードウェアに使用することができる。

Qiskitは、サービスのソフトウェア開発を実現するためにIBM Researchによって作成された。学術機関等の外部の支援者からもコントリビューションが行われている。

Qiskitの正式バージョンではPythonプログラミング言語を利用する。SwiftとJavaScript で記述することも可能。これらは、表記に基づいて量子プログラムを記述することになる。

量子コンピューターに使用されるサンプルとして、さまざまなJupyter notebooksが提供されている。

コンポーネント 

Qiskitは、OpenQASMの機械語水準と、量子コンピューターの専門知識を持たないエンドユーザーに適した抽象水準の両方で量子ソフトウェアを開発する機能を提供する。これらの機能は下記のコンポーネントによって提供されている。

Terra 
Qiskit Terraは、量子機械語水準か、それに近い量子回路を作成するツールを提供する。量子ハードウェアで実行される量子ゲートを明示的に構築することができる。また、特定のデバイス用に量子回路を最適化するツール、ジョブの管理、リモートの量子デバイスにアクセスしシミュレートするツールが含まれる。

Qiskit Terraの例は次のようになる。ベル状態を作成するために必要な量子ゲートを含む、2つの量子ビットを作成する量子回路である。量子回路は各量子ビットからビットを抽出する量子測定を行って終了する。

from qiskit import QuantumRegister, ClassicalRegister
from qiskit import QuantumCircuit, Aer, execute

q = QuantumRegister(2)
c = ClassicalRegister(2)
qc = QuantumCircuit(q, c)

qc.h(q[0])
qc.cx(q[0], q[1])
qc.measure(q, c)

作成した量子回路は、バックエンド（量子ハードウェアまたはシミュレター）で実行できる。次の例ではローカルのシミュレーターを使用する。

backend = Aer.get_backend('qasm_simulator')
job_sim = execute(qc, backend)
sim_result = job_sim.result()
print(sim_result.get_counts(qc))

最後のPrint関数がバックエンドの返した結果を表示する。結果は、量子回路の複数の実行結果から取得したビット文字列を表示するPythonの辞書型となっている。今回使用した量子回路では、ビット列'00'と'11'が唯一の結果であり、同じ確率で発生するはずだ。したがって、通常の結果は {'00':519, '11':505} などの2つのサンプルがほぼ等しく分割される。

Qiskit Terraを利用する量子ハードウェアで行われた実験は、量子誤り訂正、エンタングルメントの生成、均衡とは程遠いダイナミクスのシミュレーションといった分野の多くの研究論文で使用される。

Aqua 

Qiskit Aquaは、ユーザー自身が量子プログラミングを行うことなく使用できるツールを提供する。現在、化学、AI、最適化、金融の分野がサポートされる。ユーザーが問題を与え、その分野で標準的な（化学用ツールPySCFなど）を使用して定義された結果を受け取ることができる。対応する量子アルゴリズムがQiskit Aquaには実装されている。

Aer 

短期的に見て、量子ソフトウェアの開発は小さい量子デバイスのシミュレーションに使用される。Qiskitでは、これをAerコンポーネントが提供する。ユーザーのデバイスでローカルに実行されるシミュレーターと、クラウドを通じて利用可能なHPCが提供される。また、ノイズの影響を再現することもできる。

Ignis 

Ignisは、短期的なデバイスのノイズ特性のツールを含むコンポーネントであり、ノイズ影響下での計算を可能にする。これには、デバイスのベンチマーク、エラーの軽減、エラー修正のためのツールが含まれる。

脚注

出典 

IBMのソフトウェア
量子プログラミング