[21.10.15]光量子コンピュータのアプリケーション計算をちょっと試してみた

勉強してみたいので光量子コンピュータにチャレンジしてみます。わからないことは、少しずつ聞いてみたいと思います。多少の量子ビットの知識はありますが、光量子モードはよくわかりません。まずはインストールしてみます。

!pip install -U -q photonqat

使うライブラリはphotonqat https://github.com/BosoniQ-github/Photonqat

さっそく扉絵のチュートリアルを見てみると、

#Fock basis
#Circuit

import photonqat as pq
import numpy as np
import matplotlib.pyplot as plt

# mode number = 2, cutoff dimension = 15
F = pq.Fock(2, cutoff = 15)

Fock basisというのがまずはよくわからない。photonqatとnumpyをimportしています。モード数とカットオフ数があるとのことですが、おそらく量子ビット数に対応する数字と、あとは精度に関する桁数みたいなものかと思われる。今回はビット数に対応するモード数が2、カットオフが15と設定され、Fockシミュレータに設定された。

フォック空間のwikipedia

https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A9%E3%83%83%E3%82%AF%E7%A9%BA%E9%96%93

フォック空間 (英: Fock space)とは、くりこまれたパラメータを持つ自由粒子の集まりでできたヒルベルト空間のことである。個数演算子の固有ベクトルで張られた空間とも言える。 最初にフォック空間を導入したウラジミール・フォックにちなんで命名された。

概要 場の量子論は、ヒルベルト空間の次元だけでなく自由度も無限大である。 よってヒルベルト空間Hをどのように構成するのかという問題が生じる。 そこで一般的に、扱いたい状態を含んで、かつ、物理量が無駄なく既約に表現される空間にHを選ぶのが普通だが、その場合によく用いられるのがフォック空間である。 いつもフォック空間が適切なヒルベルト空間となる保証は無いのだが、便利なのでよく用いられる。

とのことですが、まったくわからないので、あとで質問するとして便利なフォック空間というのを使うと光量子コンピュータの計算ができるらしい。

次にゲートを適用していきます。こちらは量子ビットと同じですね。

alpha = (1 + 1j)
r = -0.5

F.D(0, alpha) # Displacement to mode 0
F.S(1, r) # Squeezeng to mode 1

ゲートの名前は見慣れない変位ゲートとスクイージングゲートとなっています。それぞれ、変位量alphaをモード0に、スクイージングゲートでrの値?のものをモード1に。alphaやrの正体についてもそのうち質問をしてみたいと思います。

F.run()

実行しただけでは結果は取り出せないようです。

# Plot Wigner fucntion for mode 0 using matplotlib
(x, p, W) = F.Wigner(0, plot = 'y', xrange = 5.0, prange = 5.0)

ちなみにつなげてもかけます。

(x, p, W) = pq.Fock(2, cutoff = 15).D(0, alpha).S(1, r).run().Wigner(0, plot = 'y', xrange = 5.0, prange = 5.0)

なんかすごい怪しい模様が出ましたが、これが光量子コンピュータの計算結果のようです。

そして、フォックシミュレータのほかにガウスシミュレータもあるらしく(正式名称はわかりません)同じようにゲートを作用させて計算をしてみました。

# mode number = 2
G = pq.Gaussian(2)

(x, p, W) = G.D(0, alpha).S(1, r).run().Wigner(0, plot = 'y', xrange = 5.0, prange = 5.0)

ガウスシミュレータにはカットオフの設定はなく、モード数の設定ができました。計算結果は見た感じに似ているように見えますが、明るいところから遠方のエリアの描画が違う気がします。こちらのシミュレータのほうが速い?ようです。簡易的なものなのでしょうか。

もうちょっとやってみます。チュートリアルがあります。

https://github.com/BosoniQ-github/Photonqat/blob/master/examples/Basic%20Operations.ipynb

F = pq.Fock(1, cutoff = 15) # (qumode数, cutoff 数)
F.n_photon(0, 4) # (qumode, photon number state)

F.run()

(x, p, W) = F.Wigner(0, plot = 'y', xrange = 5.0, prange = 5.0) # plot Wigner function

print("Photon number state:\n", F.state)

今度はフォトン数状態みたいなのが出てきました。。。計算結果はカットオフ数だけの状態があり、4の状態の状態ベクトルが1になっているように見えます。

Wigner関数に関しては、光の量子状態は光子数状態で表す他に、Wigner関数を用いて$(q, p)$位相平面上の関数としてプロットすることができます。と書いてあります。ここでプロットされた関数は、量子状態を位置$q$, または運動量$p$で測定する確率を表します。とのことです。確率分布をわかりやすく平面上に表記されているようです。

変位ゲートはこの確率分布を平面上で移動させるようです。複素数をパラメータに持ち、実部と虚部の値の設定によって変位量を調整できそうです。 ガウシアンシミュレータを使ってみます。

# mode number = 1
(x, p, W) = pq.Gaussian(1).D(0, 0).run().Wigner(0, plot = 'y', xrange = 5.0, prange = 5.0)
(x, p, W) = pq.Gaussian(1).D(0, 1).run().Wigner(0, plot = 'y', xrange = 5.0, prange = 5.0)
(x, p, W) = pq.Gaussian(1).D(0, 1j).run().Wigner(0, plot = 'y', xrange = 5.0, prange = 5.0)

見ての通り、実数を設定すると左右に。虚数を設定すると上下に移動しますね。

(x, p, W) = pq.Gaussian(1).D(0, 1+1j).run().Wigner(0, plot = 'y', xrange = 5.0, prange = 5.0)

当然ですが斜めに移動させるにはこのような感じです。次にスクイージングゲートです。確率分布の形状をつぶせるようです。

(x, p, W) = pq.Gaussian(1).S(0, 0.5).run().Wigner(0, plot = 'y', xrange = 5.0, prange = 5.0) # plot Wigner function
(x, p, W) = pq.Gaussian(1).S(0, -0.5).run().Wigner(0, plot = 'y', xrange = 5.0, prange = 5.0) # plot Wigner function

プラスを設定すると縦に、マイナスを設定すると横に伸びました。

(x, p, W) = pq.Gaussian(1).S(0, -1).run().Wigner(0, plot = 'y', xrange = 5.0, prange = 5.0) # plot Wigner function

値を強くするとより潰れました。

ビームスプリッタゲートはちょっと飛ばしました、最後にKerrゲートというのがあったので試してみます。

光の媒質の中には屈折率が光の強度に依存するものが存在し、その現象はKerr効果と呼ばれます。 位相平面上では中心からの距離(=強度)によって異なる角度で位相が回転します。

とのことです。距離によって強度が変わる処理のようです。

(x, p, W) = pq.Gaussian(1).D(0, 1+1j).Kerr(0, .2).run().Wigner(0, method = 'clenshaw')
(x, p, W) = pq.Fock(1).D(0, 1+1j).Kerr(0, .2).run().Wigner(0, method = 'clenshaw')

Kerrゲートはガウシアンシミュレータでは実行できませんでした。また、中心からの距離によって強度が変わる処理のようで、中心からいったん変位ゲートで移動させてから適用させないと変化がありませんでした。

(x, p, W) = pq.Fock(1).Kerr(0, .2).run().Wigner(0, method = 'clenshaw')

変位ゲートを適用せずにKerrゲートを適用させた場合には特に変化がありません。

どうでしょう。このようにいろいろ試してみました。複雑な計算を将来的にやるにはフォックシミュレータがよさそうです。ガウシアンシミュレータは複雑なゲートはできませんでした。また、ゲートは当初思ってたよりは理解しやすかったです。今後はこのようなゲートを使ってどんな処理ができるのかアプリケーションが楽しみです。以上です。

Yuichiro Minato
blueqat CEO/CTO 2015年総務省異能vation最終採択 2017年内閣府ImPACTプロジェクトPM補佐 2019年文科省さきがけ量子情報処理領域アドバイザー
Comments
Yuichiro Minato
blueqat CEO/CTO 2015年総務省異能vation最終採択 2017年内閣府ImPACTプロジェクトPM補佐 2019年文科省さきがけ量子情報処理領域アドバイザー
Related posts

blueqat Inc.

Shibuya Scramble Square 39F 2-24-12, Shibuya, Shibuya-ku, Tokyo
Contact: info@blueqat.com