Python(Qiskitサンプル)
■量子コンピュータのシミュレーションQiskitのお試し。
最近、量子コンピュータに関する記事を見ることがあったので、関連するものがないか調べるとPythonで量子回路のシミュレーションができるライブラリがあった。これを少し触ってみる。
通常のコンピュータは突き詰めると0か1の2値になるけど、量子コンピュータの場合、その2つの状態を重ね合わせたものもあるそう。観測された時点で、0か1になって固定されるけど、この重ね合わせた状態で演算を進めると、通常のコンピュータよりはるかに速い処理ができる。
シミュレーションは、結局は通常のコンピュータ上で行うので、処理のやり方を真似るだけで演算自体が速くなるわけではないと思うけど、どんなものかイメージしたい。
では早速、pipでqiskitとqiskit-aerをインストール。qiskit-aerのインストール時にエラーが出たので、pip install qiskit-aer --only-binary :all: としてバイナリのみインストールした。ライブラリのリストが下。

次にサンプルコード。まずは、量子ビットがどんなものか見るだけのもの。
from qiskit_aer import AerSimulator
from qiskit.visualization import plot_histogram
from qiskit import QuantumCircuit
import matplotlib.pyplot as plt
# 量子ビット2つ、古典ビット2つ
qc = QuantumCircuit(2, 2)
# Hadamardゲートで重ね合わせ状態を作る
#qc.h(0)
#qc.h(1)
#qc.cx(0,1)
#qc.x(1)
qc.draw('mpl')
# 測定
qc.measure(0, 0)
qc.measure(1, 1)
backend_sim = AerSimulator()
job_1 = backend_sim.run(qc, shots=512)
counts = job_1.result().get_counts(qc)
plot_histogram(counts)
plt.show()
実行すると、drawで下の図が出る。qが量子ビット、cが古典ビット。上のコードではコメントアウトしているけど、h(0)、cx(0,1)とか入れると図の中に対応した記号が追加される。左から右に向かって処理が進む形になる。

plt.show()で下の図が出る。上のコードは何もしていないので、shots=512の中で同じ値が観測される。shotsは試行の回数みたいな感じかな。

例えば、qc.h(0) のコメントアウトを外すと下のようになる。h(0)は、00、01で重ね合わせをさせている。観測した際には00か01として出てくる。観測前は 00 + 01 といった両方の状態をとりうる状態になっている。


大学の物理化学でシュレディンガーの猫とかやった覚えがあるけど、箱の中の猫は生きているし同時に死んでいる状態とか...初めて聞いたときはよく分からん話しだったなー。

