@yuichirominato 2018.11.20更新 91views

Blueqatで位相推定アルゴリズム

Blueqat 位相推定 量子ゲート 量子コンピュータ 量子フーリエ変換

はじめに

量子位相推定は、あるユニタリ変換に対する固有値の位相を求めるためのアルゴリズムです。
U|ψ> = eiφ|ψ>

今回はとある状態ベクトルを入力として位相を小数で求めるアルゴリズムをBlueqatで実装します。

全体構成

位相推定アルゴリズムは2パートからなります。
前半のコントロールユニタリ変換のパートと、後半の逆量子フーリエ変換の部分です。量子フーリエ変換は以前確認をしましたので、
そちらの回路を利用します。


--H----*------F--
--H----|--*---F--
       |  |
--ψ----U--U------

前半回路

今回は2つの例題を取り上げてみたいと思います。

参考:IBMQ
https://quantumexperience.ng.bluemix.net/proxy/tutorial/full-user-guide/004-Quantum_Algorithms/100-Quantum_Phase_Estimation.html

2量子ビットからなる簡単な回路です。


--H--*--H--
--H--X-----

入力は2量子ビット目にあります。
この場合にはHゲートをかけて、[1,1]の状態を用意します。
ユニタリ変換としてCXを用意しました。こちらは、コントロールユニタリ変換として、
X=[[0,1],[1,0]]のユニタリ変換を使います。

求めたいものは、X=[[0,1],[1,0]]のユニタリ変換と[1,1]の固有ベクトルから固有値の位相を求めたいです。
解析的に解くと、固有値は1となりますので、位相は0となるはずです。

重ね合わせを作ってCXを適用し、逆フーリエ変換をかけますが、1量子ビットの場合はアダマールゲートと同じです。

出てくる位相は、

0.φ * 2π

と小数点表記で得られますが、φは0のはずなので最終的に0が出てくるはずです。

こちらを実行すると、


from blueqat import Circuit                                             
c = Circuit().h[:].cx[0,1].h[0].m[:]                                    
c.run()                                                                 
array([0.+0.j, 0.+0.j, 1.+0.j, 0.+0.j])

c.last_result()                                                         
(0, 1)

よって、測定は0をとりますので、位相が正しく取れました。0.0なので0になります。

続いて下記のような回路を見てみます。
下記の回路は、HZによって準備される状態は、
[1,-1]となります。

求めたいものは、X=[[0,1],[1,0]]のユニタリ変換と[1,-1]の固有ベクトルから固有値の位相を求めたいです。
解析的に解くと、固有値は-1となりますので、位相はπとなるはずです。
出てくる位相は、

0.φ * 2π

と小数点表記で得られますが、φは5のはずなので最終的に1が出てくるはずです。


--H-----*--H--
--H--Z--X-----

こちらを実行して、


c = Circuit().h[:].z[1].cx[0,1].h[0].m[:]                               
c.run()                                                                 
array([0.-0.j, 0.-0.j, 0.-0.j, 1.+0.j])

c.last_result()                                                        
(1, 1)

よって、測定は1をとりますので、位相が正しく取れました。0.5なので-1になります。

このように用意された、もしくは作り出した量子状態とユニタリ変換から量子回路で位相を取り出すことができました。
以上です。

あわせて読みたい

SERVICE

汎用量子コンピュータ向けアプリケーション開発SDK

詳しく見る Githubで入手する(無料)

汎用量子コンピュータ向け高速シミュレータ

詳しく見る

量子コンピュータ向けクラウドサービス(準備中)

詳しく見る

イジングマシン向けアプリケーション開発SDK

詳しく見る Githubで入手する(無料)

COMMUNITY

量子コンピュータのことを学びたい、仕事としたいなどの情報交換の場を設け、コミュニティの形成を進めています。オフラインの勉強会と、オンラインのチャットコミュニティの2種類あります。オフラインのConnpassは1400名、オンラインのSlackは880名を超える参加があります。どちらも無料ですのでお気軽にご参加ください。

CONNPASS SLACK

CONTACT

弊社あての連絡はinfo@mdrft.comより用件を明記の上、メールで連絡を頂けますと幸いです。

ブログトップに戻る

Recent Posts