Qiskit は、IBM が提供する量子計算用のPythonライブラリです.私は IBM Quantum Challenge の時に使用するだけなので,毎回使うたびに以前覚えたことを忘れているので,備忘録として少しブログにまとめておこうと思います.
# バージョン確認
import qiskit
print(qiskit.__version__)
1.2.4
Bell状態を作る回路を作成してみます.
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure([0,1], [0,1])
qc.draw(output='mpl')
QuantumRegister と ClassicalRegister を作成し,それぞれのレジスタを使って回路を作成する方法もある.
※この辺表記が複数あるので毎回混乱してる.
from qiskit import ClassicalRegister, QuantumRegister, QuantumCircuit
qr = QuantumRegister(2,'qr') #量子ビット.名前がつけられる
cr = ClassicalRegister(2,'cr') #古典ビット.名前がつけられる
qc = QuantumCircuit(qr, cr)
qc.h(0)
qc.cx(0, 1)
qc.measure(qr, cr)
qc.draw(output='mpl')
シミュレーションを実行してみよう.
from qiskit import QuantumCircuit,transpile
from qiskit.visualization import plot_histogram
from qiskit.providers.basic_provider import BasicProvider
# ベル状態を作成する回路を付加する関数
def create_bell_state(qc):
qc.h(0)
qc.cx(0, 1)
# ベル状態を作成する量子回路
qc = QuantumCircuit(2, 2)
create_bell_state(qc) # 参照渡しなので、関数内部でqcが更新されると、外部のqcも更新される
qc.measure([0,1], [0,1])
# シミュレーターの指定
backend = BasicProvider().get_backend("basic_simulator")
# 量子回路のシミュレーターを使った実行
tqc = transpile(qc, backend)
job = backend.run(tqc,shots=10000)
# 測定結果
result = job.result()
counts = result.get_counts(qc)
# 測定結果のカウント表示
print("Total count [q1,q0]:",counts)
# ヒストグラム表示
plot_histogram(counts)
Total count [q1,q0]: {'11': 5009, '00': 4991}
ベル状態のもつれが確認できました.続いてGreenberger–Horne–Zeilinger (GHZ)状態を作成してみます.
# n qubits GHZ state を作成する回路を生成
def make_GHZ_circuit(n):
qr = QuantumRegister(n)
cr = ClassicalRegister(n)
qc = QuantumCircuit(qr, cr)
qc.h(0)
for i in range(n-1):
qc.cx(i, i+1)
qc.barrier() # 量子回路を見やすくするためのバリア
qc.measure(qr, cr)
return qc
qc = make_GHZ_circuit(5)
qc.draw(output='mpl', plot_barriers=False)
シミュレーションを実行してみます.
# シミュレーターの指定
backend = BasicProvider().get_backend("basic_simulator")
# 量子回路のシミュレーターを使った実行
tqc = transpile(qc, backend)
job = backend.run(tqc,shots=10000)
# 測定結果
result = job.result()
counts = result.get_counts(qc)
# 測定結果のカウント表示
print("Total count [q4,..,q0]:",counts)
# ヒストグラム表示
plot_histogram(counts)
Total count [q4,..,q0]: {'11111': 5110, '00000': 4890}
IBM Quantum Challenge 等のノートブックは必要なライブラリをロードするセルが用意されているため,簡単な量子回路の実行に必要なライブラリが何なのかを把握しづらかったのですが,今回最小限のライブラリのみを使ってシミュレーションをすることで,必要なライブラリを把握することができました.
次回は状態ベクトルの表示などを試してみたいと思います.
Leave a Reply