概要
量子コンピュータへの理解を深めたかったのですが、私は「シュレディンガーの猫」の話の延長線上にある知識くらいしか持っていなかったため量子力学の勉強と簡単な量子回路の作り方を調べてまとめてみました。
1時間目なので今回は、量子の重ね合わせとそれを用いた量子回路のシミュレーションの作成という初歩的な箇所にフォーカスしています。
目次
1. 量子の重ね合わせの基礎
2. 量子回路の基礎
3. Qiskitを用いた量子回路の実装
4. 感想
5. 参考
量子の重ね合わせの基礎
スーパーポジション
0と1の両方を重ね合わせて持っている状態のこと。
観測することで0と1のどちらかの状態に確定する。
量子ビット
1ビットの情報を持つ量子のビットのこと。
これをスーパーポジション状態にしたり観測して確定させたりする。
また、普通のコンピュータで使われるものは古典ビットと呼ばれる。
説明だと0となる割合と1となる割合は50%:50%にすることが多いが(シュレディンガーの猫等)、この割合は任意で設定することができる。
ブロッホ球
量子ビットの状態をベクトルと球を用いて視覚的に図示したもの。
地球に見立てて、0地点を北極、1地点を南極、それらと等距離にある球上の線を赤道と読んだりする。
量子ビットを観測した際に0と1のどちらが観測されやすい状態かというのを北極と南極からの距離を見ることで
量子回路の基礎
量子回路
量子ビットがスーパーポジション状態のまま演算を行い、出力を観測することで値を確定させる。
この手順は量子ビットの特性上毎回出力が異なるため、繰り返し実行することで出力分布を得る。(モンテカルロ法のような)
アダマールゲート (Hadamarl Gate)
量子をスーパーポジション状態にするためのゲート
Qiskitを用いた量子回路の実装
実装コード
from qiskit import QuantumCircuit, Aer, transpile, assemble
from qiskit.visualization import plot_histogram
# 1つの量子ビットと1つの古典ビットを持つ回路を作成
qc = QuantumCircuit(1, 1)
# 入力状態を準備
qc.h(0)
qc.t(0)
qc.h(0)
# 測定を行い、結果を古典ビットに格納
qc.measure(0, 0) # 量子ビット0の結果を古典ビット0に測定
# ローカルシミュレータで実行
simulator = Aer.get_backend('qasm_simulator')
compiled_circuit = transpile(qc, simulator)
job = simulator.run(assemble(compiled_circuit))
result = job.result()
counts = result.get_counts()
# 結果を表示
print("Measurement results:", counts)
plot_histogram(counts)
コード説明
量子回路のコードでの実装はQiskitというライブラリを用いて行いました。
コメントで補足しきれていない重要な箇所だけ説明していきます。
# 1つの量子ビットと1つの古典ビットを持つ回路を作成
qc = QuantumCircuit(1, 1)
# 入力状態を準備
qc.h(0)
qc.t(0)
qc.h(0)
# 測定を行い、結果を古典ビットに格納
qc.measure(0, 0) # 量子ビット0の結果を古典ビット0に測定
量子回路を作成して、それぞれのゲートを配置している箇所です。
このコードだと、Hゲート、Tゲート、Hゲートの順に量子ビットを通過させています。
それぞれのゲートの細かい挙動は割愛しますが、この結果下図のような π/8 位相シフトの演算が行えます。
ブロッホ球の北極側にベクトルが向いているため、0を測定しやすい状態になっているということですね。
細かい計算は割愛しますが、大体85%の確率で0が観測されるような重ね合わせ方になっています。
最後の行では量子ビットを観測して、その結果を古典ビットに反映させる作業を行っています。
# ローカルシミュレータで実行
simulator = Aer.get_backend('qasm_simulator')
compiled_circuit = transpile(qc, simulator)
job = simulator.run(assemble(compiled_circuit))
result = job.result()
counts = result.get_counts()
先ほど組んだ回路を用いてシミュレートを行います。
具体的には「3つのゲートを通す → 出力された量子ビットを確認する」の流れを1024回繰り返して結果を見ています。
出力結果
1024回の出力結果をグラフにしたものがこちらです。
今回は量子ビットを約85%の確率で0が示す状態にしてそれを観測するという回路なので、予測通りの結果が得られました。
感想
今回は量子ビットの理解を深めて簡単な回路を組むところまでの作業を行いました。
もし、2時間目の記事を投稿することになったときは量子のもつれを活用した回路の作成になるかと思います。
参考