LoginSignup
11
10

More than 1 year has passed since last update.

量子計算シミュレータ、つくってみた

Last updated at Posted at 2019-04-09

勉強がてら、量子計算シミュレータをつくってみたよ。
qlazy - Quantum Computer Simulator

Interface2019年3月号にC言語での実装例が出ていたので、参考にさせていただきました。まず、Linuxコマンドとして実装して、その後、ctypesでPythonからも呼び出せるようにしました。

使い方は至ってシンプル。

foo.qc
init 2
h 0
cx 0 1
m

というファイルを用意しておいて、

$ qlazy -qc foo.qc

とやると、

frq[00] = 45
frq[11] = 55
last state => 00

という結果が得られます。何をやっているかというと…
* 1行目:量子ビットを2つ用意し、|00>に初期化
* 2行目:0番目の量子ビットにアダマールゲートを適用
* 3行目:0番目と1番目に制御NOTを適用
* 4行目:全量子ビットを観測(デフォルトでは100回測定してその頻度を出して、100回目の測定結果をlast stateとして表示します。上の例では|00>だったのが45回、|11>だったのが55回で、100回目の結果は|00>でした、という意味)
…です。

また、行の途中で、

show

とやると、そのときの量子状態を出力することもできます。例えば、上のfoo.qcの制御NOTゲートの後にshowを入れると、

c[00] = +0.7071+0.0000*i : 0.5000 |+++++
c[01] = +0.0000+0.0000*i : 0.0000 |
c[10] = +0.0000+0.0000*i : 0.0000 |
c[11] = +0.7071+0.0000*i : 0.5000 |+++++

という感じで、各状態の確率振幅とその絶対値の2乗(と棒グラフ)を表示してくれます。というわけで、この例の場合、「量子もつれ」の様子がわかります。実際の量子コンピュータでは、こんな芸当はできないですが、シミュレータならではの機能ですね。

あと、ファイル読み込みではなく、対話モードでも実行できます。

$ qlazy
>> init 2
>> h 0
>> cx 0 1
>> show
c[00] = +0.7071+0.0000*i : 0.5000 |+++++
c[01] = +0.0000+0.0000*i : 0.0000 |
c[10] = +0.0000+0.0000*i : 0.0000 |
c[11] = +0.7071+0.0000*i : 0.5000 |+++++
>> m
frq[00] = 45
frq[11] = 55
last state => 00
>> quit
$ 

Pythonから使う場合は、以下のように書けば、同じようなことができます。

from qlazypy.basic import QState

qs = QState(2)
qs.h(0)
qs.cx(0,1)
qs.show()
md = qs.m()
md.show()

del qs

とりあえず、基本的なゲートは実装できた気になっています。以下に置いたので、ご興味あれば触ってみてください。諸々不具合あるかもしれませんが、フィードバックいただけると、とてもうれしいです。

qlazy - Quantum Computer Simulator

補足(2021.9.5)

最新版の仕様はqlazyドキュメントをご覧ください。

以上

11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10