🌓
Qiskitを使って簡単な量子コンピューティングをするためのメモ(Python)
こんな感じのことを始めるための環境構築についての雑書き(2024年3月時点)
Google Colaboratoryで動く(はず)なのでやってみてね。
必要パッケージのインストール
!pip install qiskit
!pip install pylatexenc
# シミュレーション用
!pip install qiskit-aer
# 実機計算用
!pip install qiskit_ibm_runtime
シミュレーションを動かす
10ビットの量子回路でGHZ状態を作る。
from qiskit import QuantumCircuit, transpile
from qiskit_aer import Aer, AerSimulator
from qiskit.visualization import plot_histogram
# 量子ビットの数を指定
n_qubits = 10
# 量子回路を作成
ghz_circuit = QuantumCircuit(n_qubits)
# GHZ状態を作る
ghz_circuit.h(0) # 0番目の量子ビットにアダマールゲートをかけて重ね合わせ状態を作る
for qubit in range(1, n_qubits):
# 1番目以降の量子ビットに対して、1つ前の量子ビットともつれ合いの状態にするという処理を行う
ghz_circuit.cx(qubit-1, qubit)
# 全ての量子ビットを測定
ghz_circuit.measure_all()
# 回路シミュレーション
simulator = AerSimulator()
compiled_circuit = transpile(ghz_circuit, simulator)
result = simulator.run(compiled_circuit).result()
# 結果のヒストグラムを表示
counts = result.get_counts()
plot_histogram(counts)
実行するとこんなヒストグラムが出た。最初の量子ビットが0なら以降も全て0、1なら全て1になるはずなので合ってそう。
回路を可視化する時は以下を実行。Hがアダマールゲート、+がNOTゲート、繋がってるところはもつれ合い。
ghz_circuit.draw(output='mpl')
実機で動かす
10ビットでGHZ状態を作る。
ただし、10ビットだと時間がかかるので最初は4ビットとかにした方が良い!
あらかじめIBM Quantumでアカウントを作成してAPI Tokenを取得しておく。
from qiskit import QuantumCircuit, transpile
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit.visualization import plot_histogram
# アカウント情報を保存
QiskitRuntimeService.save_account(channel="ibm_quantum", token="YOUR_API_TOKEN", overwrite=True)
# 量子ビットの数を指定
n_qubits = 10
# 量子回路を作成
ghz_circuit = QuantumCircuit(n_qubits)
# GHZ状態を作る
ghz_circuit.h(0) # 0番目の量子ビットにアダマールゲートをかけて重ね合わせ状態を作る
for qubit in range(1, n_qubits):
# 1番目以降の量子ビットに対して、1つ前の量子ビットともつれ合いの状態にするという処理を行う
ghz_circuit.cx(qubit-1, qubit)
# 全ての量子ビットを測定
ghz_circuit.measure_all()
# IBM Quantum
provider = QiskitRuntimeService(channel="ibm_quantum")
# 動かすバックエンド(実機)を指定
backend = provider.get_backend('ibm_kyoto') # kyotoとかosakaとかある
# 回路のトランスパイル
compiled_circuit = transpile(ghz_circuit, backend)
# 実機上で実行
job = backend.run(compiled_circuit)
# 結果の取得
result = job.result()
# 結果のヒストグラムを表示
counts = result.get_counts()
plot_histogram(counts)
実行するとこんな表が出てくる。多分成功?
シミュレーションだと0000000000と1111111111のみ出てくるところが、実機ではその間(0000000001~1111111110)もそれなりに出ている。これは実機の計算エラーによるものだと思われる。量子状態は非常に壊れやすく、ノイズにとても弱いらしい。ちなみにバックエンドはIBM_KYOTOで実行したが、このときのELPG(Error per layered gate)表示は3.6%だった。
横軸の数値が密すぎて波形みたいになってる。
以上!
Discussion