Qiskit 入門¶
Qiskit を使用する流れには大きく3つの手順があります。
ビルド: 検討している問題を表現する量子回路をデザインします。
実行: 異なるバックエンド (これにはシステムとシミュレーターの両方が含まれます) で実験を実行します。
分析: 要約統計量を計算し、実験の結果を可視化します。
ワークフロー全体の例を挙げます。各手順は以下のセクションで詳しく説明します。
import numpy as np
from qiskit import(
QuantumCircuit,
execute,
Aer)
from qiskit.visualization import plot_histogram
# Use Aer's qasm_simulator
simulator = Aer.get_backend('qasm_simulator')
# Create a Quantum Circuit acting on the q register
circuit = QuantumCircuit(2, 2)
# Add a H gate on qubit 0
circuit.h(0)
# Add a CX (CNOT) gate on control qubit 0 and target qubit 1
circuit.cx(0, 1)
# Map the quantum measurement to the classical bits
circuit.measure([0,1], [0,1])
# Execute the circuit on the qasm simulator
job = execute(circuit, simulator, shots=1000)
# Grab results from the job
result = job.result()
# Returns counts
counts = result.get_counts(circuit)
print("\nTotal count for 00 and 11 are:",counts)
# Draw the circuit
circuit.draw()
Total count for 00 and 11 are: {'00': 502, '11': 498}
┌───┐ ┌─┐ q_0: ┤ H ├──■──┤M├─── └───┘┌─┴─┐└╥┘┌─┐ q_1: ─────┤ X ├─╫─┤M├ └───┘ ║ └╥┘ c: 2/═══════════╩══╩═ 0 1
# Plot a histogram
plot_histogram(counts)

ワークフローの手順¶
上のプログラムは6つの手順に分解できます。
パッケージのインポート
変数の初期化
ゲートの追加
回路の可視化
実験のシミュレーション
結果の可視化
手順1 : パッケージのインポート¶
プログラムに必要な基本的要素は以下のようにインポートされます。
import numpy as np
from qiskit import(
QuantumCircuit,
execute,
Aer)
from qiskit.visualization import plot_histogram
インポートされるものの詳細は以下の通りです。
QuantumCircuit
: 量子コンピューターシステムにおける動作命令を示し、全ての量子演算をつかさどっています。execute
: 回路や実験を実行するAer
: シミュレーターのバックエンドを管理するplot_histogram
: ヒストグラムを作成する
手順2:変数の初期化¶
次のコードを考えてみます。
circuit = QuantumCircuit(2, 2)
ここでは、二つの量子ビットをゼロの状態に、二つの古典ビットをゼロに初期化し、量子回路 circuit
に代入しています。
構文:
QuantumCircuit(int, int)
手順3:ゲートの追加¶
ゲート(演算子) を追加することで、回路のレジスターを操作します。
次の3行のコードを考えてみます。
circuit.h(0)
circuit.cx(0, 1)
circuit.measure([0,1], [0,1])
ゲートが一つづつ回路に追加され、Bell状態が形成されます。
上記コードは以下のゲートが適用されています。
QuantumCircuit.h(0)
: 量子ビット0に対するアダマール・ゲート \(H\) 。量子ビット0を 重ね合わせ状態 にします。QuantumCircuit.cx(0, 1)
: 量子ビット0をコントロール・ビット、量子ビット1をターゲット・ビットとした制御NOTゲート(\(CNOT\))。量子ビットを 量子もつれ状態 にします。QuantumCircuit.measure([0,1], [0,1])
: 全ての量子レジスターと古典レジスターをmeasure
に送ると、i番目の量子ビットの結果がi番目の古典ビットに保存されます。
手順4:回路の可視化¶
qiskit.circuit.QuantumCircuit.draw()
を使用して、多くの教科書や研究記事で使用されているさまざまな形式で設計した回路を表示できます。
circuit.draw()
┌───┐ ┌─┐ q_0: ┤ H ├──■──┤M├─── └───┘┌─┴─┐└╥┘┌─┐ q_1: ─────┤ X ├─╫─┤M├ └───┘ ║ └╥┘ c: 2/═══════════╩══╩═ 0 1
この回路では、量子ビットは量子ビット0が上、量子ビット1が下に記述されています。回路は左から右に読み、左に表示されているゲートから順に適用されます。
QuantumCircuit.draw()
又は``qiskit.visualization.circuit_drawer()`` のデフォルトのバックエンドは text backendです。ローカルの環境によっては、より適切なデフォルトの設定を行う必要があるかもしれません。その場合はuser configファイルの設定を行うことで対応できます。user configファイルは通常 ~/.qiskit/settings.conf
下の .ini
ファイルになります。
例えば, Matplotlib drawer を設定するための settings.conf
ファイルは:
[default]
circuit_drawer = mpl
このconfigには、有効な circuit drawer バックエンドであればどれでも指定することができます。これらには text, mpl, latex, そして latex_source が含まれます。
実験のシミュレーション¶
Qiskit Aerは、量子回路の高パフォーマンス・シミュレーター・フレームワークです。様々なシミュレーションの目的を達成するために、いくつかのバックエンド を提供します。
Aerのインストールに問題がある場合は、Aer を BasicAer で置き換えることで、代わりにBasic Aerプロバイダーを利用することができます。Basic AerはQiskit Terraに含まれます。
import numpy as np
from qiskit import(
QuantumCircuit,
execute,
BasicAer)
...
回路のシミュレートには、qasm_simulator
を使用します。回路の実行毎にビット文字列00もしくは11を生成します。
simulator = Aer.get_backend('qasm_simulator')
job = execute(circuit, simulator, shots=1000)
result = job.result()
counts = result.get_counts(circuit)
print("\nTotal count for 00 and 11 are:",counts)
Total count for 00 and 11 are: {'00': 479, '11': 521}
期待通りにビット文字列の出力が00になるのはおおよそ50%です。回路の実行回数は execute
メソッドの shots
引数で指定できます。このシミュレーションの実行回数は1000(デフォルトは1024) に設定されています。
result
オブジェクトを取得できたら、get_counts(circuit)
メソッドを使用して回数を取得することができます。これにより、実行した実験の総計を得ることができます。
ステップ6:結果の可視化¶
Qiskitは 多くのビジュアライゼーション を提供します。
その中には結果を表示するための plot_histogram
という関数も含まれます。
plot_histogram(counts)

観測された確率 \(Pr(00)\) と \(Pr(11)\) は、対応する事象が観測された回数を全実行回数で割った数値です。
注釈
execute
メソッドの shots
引数を変更して、推定される確率がどのように変化するか見てみましょう。
次の手順¶
基礎の学習が終わりました。ここから先は、以下の学習リソースでの継続的な学習をおすすめします。