Qiskit入門

Qiskitとは?

 Qiskitとは、干渉とエンタングルメント(量子もつれ)の2つの量子力学の原理を応用して「量子計算を実行、シミュレートするためのオープンソースSDK」です。ここで量子干渉(interference)、量子もつれ(entanglement)、量子計算(calculation)について簡単に説明します。

 まず、量子干渉とは「量子の特徴の1つの波動性を用いて波を重ね合わせ打ち消しあったり、増強しあったりする現象」です。これを用いて、量子コンピュータでは不正解の波動を打ち消しつつ、正解を取り出すことができます。次に、量子もつれとは「2個以上の重ね合わせ状態にある量子の片方の状態が決定すれば、もう片方も同時に一意に決まる現象」を指しています。この2つの現象を用いて、計算を行うことを量子計算といいます。将来的に、創薬やAI、気象予測などの応用が期待されています。

 今回は、量子計算を古典コンピュータ(普通のPC、ノイマン型コンピュータ)内にシミュレータを導入してQiskitのチュートリアルを行っていきます。

Anacondaインストール

 Qiskitでは、Anaconda上でのインストールが推奨されているため、Anacondaのインストールから行います。すでにインストールされている方は飛ばしてください。

(1) 以下のダウンロードページより、使用OSのGraphical Installer(ほとんどの方は64-bitで問題ないが、32-bitのPCを使っている方は注意)をクリックし、ダウンロードします。

参考 Anacondaのダウンロードページanaconda.com

(2) ダウンロードしたファイルを開き、手順にそってインストールします。

(3) condaコマンドを利用できるようにします。ターミナルまたはコマンドプロンプトを開き、次のコマンドを実行します。macOSの場合、シェル名にはzshが入ります。

/opt/anaconda3/bin/conda init シェル名

(4) ターミナルを再起動して、以下のコマンドを実行し、conda環境が自動的に有効にならないように設定する。

conda config --set auto_activate_base false

(5) conda環境を使用する場合、以下のコマンドを実行します。

conda activate

Python環境構築

(1) AnacondaにPython3のみの環境を以下のコマンドで構築します。環境名のところは自由に設定してください。例えばQiskitEnvとか。

conda create -n 環境名 python=3.8

(2) 以下のコマンドを実行して、環境をアクティブにします。

conda activate 環境名

(jupyter notebookを起動したい場合は、以下のコマンドを実行します。)←今は、ターミナルで、

conda install -c conda-forge jupyterlab

を実行する必要があるみたいです。

jupyter-notebook

Qiskitインストール

 以下のコマンドを実行して、Qiskitパッケージをインストールします。今回はzshの場合を紹介しています。もし他のシェルを使用している場合はこちらを参照。

pip install qiskit

pip install 'qiskit[visualization]'

pip install 'qiskit[machine-learning]'

Qiskit入門

Qiskitを使用した実験結果を得るためのワークフローは以下のようである。

  1. 量子回路の設計
  2. 回路のコンパイル
  3. コード実行
  4. 出力結果の分析

ワークフローの例

ここではワークフローの例として、|00>|11>が50%の割合で観測される量子回路を形成ます。

(1) まず、プログラム実行に必要なパッケージをインポートします。

import numpy as np # 数値計算用のパッケージ
from qiskit import QuantumCircuit, transpile # 量子演算、量子システムのためのパッケージ
from qiskit.providers.aer import QasmSimulator # Aerによる量子回路シュミレータ
from qiskit.visualization import plot_histogram # 実行結果をヒストグラムで表示するためのパッケージ

(2) 次に、変数の初期化を行います。今回は2量子ビットを0状態に、2古典ビットを0状態にします。

circuit = QuantumCircuit(2, 2) # 変数の初期化

(3) 量子回路を以下のコードで描画することができます。

circuit.h(0) # Qbit0にアダマールゲートHを設定し、重ね合わせ状態にする。
circuit.cx(0, 1) # 制御Qbit0と標的Qbit1に対する制御NOT演算(CNOT)でQbitを量子もつれ(エンタングル)状態にする。
circuit.measure([0,1], [0,1]) # 測定結果を古典ビットに格納

circuit.draw() # 量子回路描画

(4) では、実験シュミレーションのために以下のようにシミュレータインスタンスと量子回路の生成を行い、実行します。

simulator = QasmSimulator() # 回路シミュレータインスタンス生成
compiled_circuit = transpile(circuit, simulator) # 量子回路生成
job = simulator.run(compiled_circuit, shots=10000) # シュミレータ実行

(5) 最後に、Jobに格納されている結果を取得し、テキストとヒストグラムで表示します。

result = job.result() # 結果取得
counts = result.get_counts(circuit) # カウントを取得
print("\nTotal count for 00 and 11 are:",counts)

plot_histogram(counts)

コード全体

こちらが、今までコードです。

import numpy as np
from qiskit import QuantumCircuit, transpile
from qiskit.providers.aer import QasmSimulator
from qiskit.visualization import plot_histogram

circuit = QuantumCircuit(2, 2) # 変数の初期化

circuit.h(0) # Qbit0にアダマールゲートHを設定し、重ね合わせ状態にする。
circuit.cx(0, 1) # 制御Qbit0と標的Qbit1に対する制御NOT演算(CNOT)でQbitを量子もつれ(エンタングル)状態にする。
circuit.measure([0,1], [0,1]) # 測定結果を古典ビットに格納

circuit.draw() # 量子回路描画

simulator = QasmSimulator() # 回路シミュレータインスタンス生成
compiled_circuit = transpile(circuit, simulator) # 量子回路生成
job = simulator.run(compiled_circuit, shots=10000) # シュミレータ実行
result = job.result() # 結果取得
counts = result.get_counts(circuit) # カウントを取得
print("\nTotal count for 00 and 11 are:",counts)

plot_histogram(counts)

まとめ

 量子計算SDKであるQiskitのインストールからサンプルの量子シミュレーションを行いました。今回は、比較的単純な量子回路でシミュレートしましたが、Qiskitのチュートリアルでは、他にも機械学習や自然現象シミュレーションなどさまざまなデモが用意されています。もっとQiskitについて深掘りたい方は、そちらの方も見てみいいかもしれません。

 これからも、量子計算を随時投稿していきます。これからもよろしくお願いします。

参考文献

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA