この記事について
ここではpythonライブラリのblueqatを用いて量子プログラミングを行っていこうと思います。
内容は公式のチュートリアルを元に作成しています。
Blueqatに関して
量子ゲート方式の量子コンピュータ回路をシュミレーションしてくれるPythonライブラリです。
パッケージは以下のURLにあります。
Github: https://github.com/Blueqat/Blueqat
インストール
pip install blueqat
コマンド一つでインストールできます。
回路の作成
量子状態に様々なゲートを施した一覧の流れを量子回路と言います。
量子回路の初期値は全てのビットで $\left|0\right>$ です。
回路の初期状態はCircuit()
で作ることができます。
あとはこの回路に好きなゲートをCircuit().x[0].z[0]
と繋げていくだけです。
[]
の中にはゲートを施すビットの位置を表します。
実装
from blueqat import Circuit
c = Circuit().x[0].z[0]
これでc
は以下の回路を表すことになります。
\left|0\right> \begin{array}{cccccccc}-&-&\large{X}&-&-&\large{Z}&-&-\end{array}
行列では以下の式と同義です。
Z \times X\left|0\right>
※ $\left|0\right>$ に近いゲートから施していくので回路の表示と実際の積の順番は逆になります。
測定と観測
重ね合わせの状態では $\left|0\right>,\left|1\right>$ のどちらが観測されるかは確率で決まります。
これを実際にプログラミングしてみます。
測定はm[:]
をつけて行います。(この時点で 0, 1 のどちらかに確定)
観測はrun(shots=x)
で行います。(x
には測定回数を入れます。)
状態ベクトルを見たい場合は 0, 1 を確定させてはいけないのでm[:]
を置かず、run()
を繋げます。
(測定しないので確率は関係ないからこの場合run
のshots
はいらない。)
実装
今回はXゲートを考えます。
計算上では $X\left|0\right>=\left|1\right>$ より 1 が100%観測されるはずです。
Xゲートは回路に.x[]
をつけるとできます。
普通に値を観測する場合
from blueqat import Circuit
c = Circuit().x[0]
c.m[:].run(shots=1000)
結果
Counter({'1': 1000})
Counterの一つ目の値が観測された値で二つ目の値が観測された回数を表します。
1000回観測して1000回とも1が測定されましたので
100%できちんと1が取れました。
ベクトルを観測する場合
from blueqat import Circuit
c = Circuit().x[0]
c.run()
結果
array([0.+0.j, 1.+0.j])
arrayの中の配列が状態ベクトルです。
きちんと $\left|1\right>$ が取れました。
まとめ
今回はblueqatを用いて回路作成の流れを説明していきました。
次回は複数量子ビットの操作を説明しようと思います。