こんにちは、光量子コンピュータが汎用量子ゲート方式に行く前に少しアナログな光連続量計算というのを導入しています。そちらのSDKはあまり世界で開発が進んでおらず、blueqatで開発していたphotonqatをスピンアウトしてBosoniQという会社に立ち上げました。
今回はblueqat cloudでphotonqatをプリインストールしましたので、使い方を見てみたいと思います。
1,まずは登録してログイン。その後、メニュー一番上の黄色いボタンを押す。
2,Jupyter画面が出たらpython3を立ち上げます
こちらの画面になります。
その後、
こちらに行ったら準備完了です。
3,コードを書く
とりあえず、下記の例題などを参考にしてみます。
https://github.com/BosoniQ-github/Photonqat
https://github.com/BosoniQ-github/Photonqat/tree/master/examples
光連続量計算は位置xと運動量pの関係性を表した座標平面上での計算の分布を操作します。できる操作には、変位ゲートや回転ゲートなどがありますが、それらの記述方法を見てみます。まずはphotonqatはプリインストールされていますので、phtonqat/numpy/matplotlibを呼び出します。
import photonqat as pq
import numpy as np
import matplotlib.pyplot as plt
量子テレポーテーションのコードをガウシアンシミュレータでの実装です。
量子テレポーテーションゲートではガウシアンゲートのみの利用となるので、ガウシアンシミュレータで十分のようです。
シミュレータを呼び出し、
変位ゲート(テレポートしたい初期状態を作成)
スクイージングゲート
ビームスプリッターゲート
を変数を設定して適用します。
その後xとpでそれぞれの量子モードを測定し、測定した結果に応じてそれぞれ移動先の量子モードに値を適用します。
最後にウィグナー平面上にプロットを行い視覚的に確認しながら、移ったあとのモードの値を確認しています。
r = 2
G = pq.Gaussian(3)
G.D(0, 1 + 0.5j) # state to teleport
G.S(1, -r)
G.S(2, r)
G.BS(1, 2, np.pi/4) # 50:50 beam splitter
G.BS(0, 1, np.pi/4) # 50:50 beam splitter
G.MeasX(0)
G.MeasP(1)
G.X(2, G.Creg(0, "x", scale = np.sqrt(2)))
G.Z(2, G.Creg(1, "p", scale = np.sqrt(2)))
G.run()
G.Wigner(2) # plot
print('measured x =', G.Creg(0, "x").read())
print('measured p =', G.Creg(1, "p").read())
print('teleported mu =', G.mean(2)) # mu of qumode 0
簡単ですので、ぜひ使ってみてください。
Fockシミュレータを利用するとより光量子計算に近い計算が利用できます。最適化計算や機械学習その他いろいろな用途が想定されていますので、ぜひ活用してみてください。
以上です。