2024年1月10日水曜日

スマホのアプリで量子フーリエ変換をデモする

要旨:スマホ1台で稼働する量子回路シミュレータを開発している。現在、3-Qubitまでのアプリを動かすことができる。今回、これを用いて、量子フーリエ変換(QFT)、及びその逆変換(IQFT)の簡単なデモを実現できた。

量子フーリエ変換(隠れた周期性の発見)
 ショアの因数分解アルゴリズムなどで重要な量子フーリエ変換(QFT)は、量子計算の代表例の一つである。QFTは、ある量子状態を入力すると、それに応じた周期性を有する量子状態(位相変化の波)を作り出す。また、逆量子フーリエ変換(IQFT)は、周期性を有する量子状態の隠れた周期を見つけることができる。

 ここでは、既存のシミュレータでQFTとIQFTを試すのではなく、量子回路シミュレータ自体をスマホ上に独自に構築した上で、QFTとIQFTを実験することに意義がある。そのため、以下の図にあるように、かなり多くの量子ゲートを実装することになった。

 IQFTでは、QFTを構成する量子ゲートを逆順に適用して行けば良いのであるが、実はその際、位相の回転方向を逆向き変更する必要があり、これが理由で実装量子ゲートが増えた面もある。

QFTとIQFTの実行例
 詳しいことは略すが、実行例をいくつか示す。図1は、3量子ビットの状態ベクトル|100>を量子フーリエ変換に入力した場合である。

(注)本質的なことではないが、回路図上の量子ビットは上から下へ、q0q1q2と並んでいるが、図の下方にある円盤に付した状態ベクトルでは、慣例上、量子ビットは左から右へ、q2q1q0の順になっている。これ以降、状態ベクトルはこの「慣例」で表現する。

 図1では、(a)に示した量子ビット状態|100>を入力としてQFTを実行すると、(b)に示すような位相の波が得られた。すなわち、基底ベクトル|000>、|001>、... |111>の順に、位相が反時計回りに45度づつ変化し、8個の基底ベクトルで1周期の位相の波となる。
 続けて、IQFTを適用した結果を図2に示す。結果として、確率100%(円盤が全面塗り潰し)で|100>が測定された。これは元の入力そのものであり、回路図に戻って考えると古典ビットで"001"を得たことになる。すなわち、"1"周期の波であることが分かる。
 同様にして、入力量子状態|010>をQFTに与えると、今度は、2周期の位相の波(半時計周りに90度づつ進む)となり、さらにIQFTを実行すると元の入力量子状態が復元された。
 さらにもう一例、入力量子状態|001>をQFTに与えると、今度は、4周期の位相の波(半時計周りに180度づつ進む)となり、さらにIQFTを実行すると元の入力量子状態が復元された。
 図5に、逆量子フーリエ変換で位相の周期が分かる様子を再度掲載した。
感想
 スマホで、電卓みたいな感覚で、簡単な量子回路シミュレータを作ろうとして始めたが、段々膨らんできて、3量子ビットの量子フーリエ変換ができるまでになった。まだまだ、初級レベルに留まるが、ちょっと嬉しくなる。ただ、スマホでは(性能上というよりも、画面設計やコード作成する上で)この位の規模が限界かもしれない。さらに高度なことは、QiskitやIBM Quantumで実行ということになろう。

 本記事内容を何かに生かすとしたら... 簡単なゲームが考えられる。3量子ビットで、何らかの周期性をもつビット列をプレイヤーに与えて、その周期を当ててもらう。あまり面白くないか。でも、量子アプリ作成の練習にはなるだろう。

 本記事内容を、整数の素因数分解に結びつけることは(たとえ15など小さな整数でも)非常に困難です。これを実現する量子回路を構成するには、より多くの知識と技術が必要です。私はまだその域に達していないようだ。特に、モジュラー指数関数を量子回路で実現する部分などです。

0 件のコメント:

コメントを投稿