量子コンピュータ多世界シミュレーション
このプログラムは、量子コンピュータの動作(2量子ビットのグローバーのアルゴリズム)を多世界解釈でシミュレートするものです。 ただし多世界解釈の定義は千差万別なので、ここで紹介するのはその中の一つです。 一般的に量子回路の動作は、コペンハーゲン解釈で説明されています。 コペンハーゲン解釈とは、一つの宇宙の中だけで全ての量子現象を説明するものです。 コペンハーゲン解釈で量子ビットの0状態と1状態の重ね合わせを説明すると次のようになります。 観測するまでは0と1の重ね合わせ状態にある量子ビットは、観測すると瞬時に波束の収縮が起こり0か1に確定します。 コペンハーゲン解釈では一つの宇宙しか考えないので波束の収縮が必要になりますが、波束の収縮速度が光速を超えるという難点があります。 一方、多世界解釈とは、多数の並行宇宙の存在を認めて量子現象を説明するもので、波束の収縮を考えません。 多世界解釈では、波束の収縮をタイムラインの移動と考えます。 量子ビットの0と1の重ね合わせを例にして多世界解釈を説明します。 この量子状態を表現するのに2つの並行宇宙(宇宙Aと宇宙B)を使います。 宇宙Aの中には0状態の量子ビットが存在し、宇宙Bの中には1状態の量子ビットが存在します。 観測すると、観測者のタイムラインがつながっている宇宙が選ばれ、0か1が確定します。 並行宇宙を小さな宇宙をモデルにして説明します。 宇宙は2次元の正方形で2種類の素粒子が2個ずつ存在するとします。 すると、下記の図のように全部で6パターンができます。 ![]() 一つのパターンは一つの並行宇宙を表します。 つまり、この宇宙は6パターンの時間の存在しない並行宇宙として表すことができます。 現実の宇宙では、観測者はタイムラインに沿って並行宇宙間を常に移動しています。 量子回路を観測している人のタイムラインは、量子回路に依存します。 例えば、量子ビットの出力が必ず0になる量子回路を観測している人のタイムラインは、必ずその並行宇宙に行くことになり、出力が1になる並行宇宙には行きません。 当然ですが、観測者の体が無い並行宇宙には観測者のタイムラインはありません。体が無いとその宇宙を観測することは不可能です。 <2量子ビットのグローバーのアルゴリズムのシミュレート> 多世界解釈では、一つの宇宙の中で量子ビットが重なり合うことはありません。 量子ビットは必ず0か1になります。 量子ビットの重なり合いは、2つの並行宇宙の重なり合いを意味します。 2量子ビットの量子回路を多世界解釈で表現するには4つの並行宇宙が必要です。 2量子ビットの量子回路では、次のように量子ビットの組み合わせが4つ作られます。この組み合わせが4つの並行宇宙に対応しています。 (q1=0 q0=0), (q1=0 q0=1), (q1=1 q0=0), (q1=1 q0=1) 量子ビット0をアダマールゲートを通すと0と1の重なり合った状態になります。 この状態をブロッホ球では横向きベクトルで表します。 多世界解釈では、横向きのベクトルを0と1の2つの縦向きベクトルにして別々の並行宇宙に描きます。 つまり、多世界解釈ではアダマールゲートを通るたびに、「量子回路が使う並行宇宙の数」が2倍になります。 ただし、いくら並行宇宙の数が増えると言っても2量子ビットの量子回路では異なる並行宇宙の数は4つだけなので、量子回路は同じ並行宇宙内で増えることになります。 同じ並行宇宙の中で増えた量子回路は、観測時に加算され一つにまとまります。(フーリエ変換と同じ原理です) このプログラムは、量子ビットの重ね合わさった量子回路を、別々の並行宇宙の量子回路として表現し視覚化するものです。 上記したように多世界解釈で量子回路を描くと、並行宇宙の数はアダマールゲートの数に比例して増加します。 (アダマールゲート以外にも、回転ゲートなどを使って量子ビットを0と1の間にすると、並行宇宙の数が多くなります) このプログラムは、2量子ビットのグローバーのアルゴリズムを2通りの方法で描きます。 一つは「制御Z」を使う回路で、もう一つは「制御ノット」を使う量子回路です。 この二つの量子回路では、アダマールゲートの数が違うので並行宇宙の数が違います。(同時に観測不可能な並行宇宙の数は両回路とも4つ) このプログラムを使って、2つの量子回路(「制御Z」と「制御ノット」)が複数の並行宇宙の中で、どのように推移していくのかを確認することができます。 「制御Z」と「制御ノット」量子回路を設計する手順は下記のようにしました。 ●アルゴリズムを行列で書く ●その行列から量子回路を作る --------------------------------------------------------- <ステップ1> アダマールゲートと自作ゲートを使います。 自作ゲートは、q0とq1が0状態のときq1の位相がマイナスになるゲートです。 (自作ゲートを作った理由は、量子回路が最も単純になるからです。) アダマールゲート ![]() 自作ゲート ![]() <量子回路(量子ビットの初期化、重ね合わせ、マーキングの後の回路)> ![]() ●計算 マーキングで並行宇宙(q1=1,q0=0)のq1の符号をマイナスにしました。 ![]() アダマールゲートを通過 ![]() 自作ゲートを通過 ![]() アダマールゲートを通過 ![]() ![]() 入力と出力が一致しているのが分かります。 --------------------------------------------------------- <ステップ2> 量子コンピュータに自作ゲートが用意していないので、自作ゲートを3つに分解します。 ノットゲート、制御Zゲート、ノットゲートに分解します。 ![]() <量子回路(量子ビットの初期化、重ね合わせ、マーキングの後の回路)> ![]() ●計算 マーキングで並行宇宙(q1=1,q0=0)のq1の符号をマイナスにしました。 ![]() アダマールゲートを通過 ![]() ノットゲートを通過 ![]() 制御Zゲートを通過 ![]() ノットゲートを通過 ![]() アダマールゲートを通過 ![]() ![]() 入力と出力が一致しているのが分かります。 --------------------------------------------------------- <ステップ3> 量子コンピュータに「制御Zゲート」が用意してない場合は、「制御Zゲート」を3つに分解します。 アダマールゲート(q1だけ)、制御ノットゲート、アダマールゲート(q1だけ)に分解します。 ![]() <量子回路(量子ビットの初期化、重ね合わせ、マーキングの後の回路)> ![]() ●計算 マーキングで並行宇宙(q1=1,q0=0)のq1の符号をマイナスにしました。 ![]() アダマールゲートを通過 ![]() ノットゲートを通過 ![]() アダマールゲート(q1だけ)を通過 ![]() 制御ノットゲートを通過 ![]() アダマールゲート(q1だけ)を通過 ![]() ノットゲートを通過 ![]() アダマールゲートを通過 ![]() ![]() 入力と出力が一致しているのが分かります。 -------------------------------------------------------------------- ■プログラムの使い方 (注意)このプログラムで表示しているのは、「量子ビットq0,q1の初期化」処理と「アダマールゲートによる量子ビットの重ね合わせ」処理の後の方です。 ボタンの説明 ●「CZ回路 か CX回路 を選択」 最初に、「CZ回路」と「CX回路」のどちらをシミュレートするか選択します。 ●「位相をマイナスにするビットを選択」 検索対象の量子ビットの位相をマイナスにします。 同時に観測できない宇宙の数は4つ [q1=0 q0=0], [q1=1 q0=0], [q1=0 q0=1], [q1=1 q0=1]なので、この中から選択します。 一つの並行宇宙の中で、量子ビットq0とq1のどちらの位相をマイナスにしても結果は同じですが、計算中の動作は違います。 ●「実行」 位相をマイナスにする量子ビットを選択したら、「実行」ボタンを押します。 画面上方に、計算結果が表示されます。 ●「表示する回路を選択」 このソフトは1ページ内に4つの量子回路しか表示できないので、このボタンで次ページを表示させます。 「CZ回路」は全部で16量子回路、「CX回路」は全部で64量子回路があります。 ボタンの横にあるベクトルは、量子回路の左端の量子ビットを表します。 ■量子回路と計算結果の説明 【図1】は「CZ回路を選択」、「並行宇宙[q1=1 q0=0]のq1の位相をマイナス」にした場合の画面の説明です。 【図1】 ![]() ■グローバーのアルゴリズムの原理を、【図2】〜【図9】を使って説明します。 上記の自作ゲートを使った量子回路で説明します。 【図2】は入力された量子ビットの組み合わせの(q1=0,q0=0)回路。 【図3】は入力された量子ビットの組み合わせの(q1=1,q0=0)回路。 【図4】は入力された量子ビットの組み合わせの(q1=0,q0=1)回路。 【図5】は入力された量子ビットの組み合わせの(q1=1,q0=1)回路。 左から入力された量子ビットは、アダマールゲート(Hゲート)、自作ゲート(Jゲート)、アダマールゲート(Hゲート)と通過していきます。 各列を説明するために、列に対応する赤色文字を使いました。 ●A列 入力された量子ビット(量子ビットの初期化、重ね合わせ、マーキング後) ●B列 アダマールゲートを通過して、1つの量子ビットが2つの量子ビットの重ね合わせた状態になる。 ●Cの列 2つの量子ビットの重ね合わせ状態をq0とq1の組み合わせにして表示する。 ●D列 自作ゲートを通過する。q0とq1が共に0状態の場合、q1の位相が反転する。 ●E列 アダマールゲートを通過して、1つの量子ビットが2つの量子ビットの重ね合わせた状態になる。 ●F列 E列の量子ビットを(q1=0,q0=0)、(q1=1,q0=0)、(q1=0,q0=1)、(q1=1,q0=1)に整理して描く。 それぞれ、q1とq0を掛けて表示する。 黒のベクトルは位相が+、青のベクトルは位相がー。 ■マーキングの有無による2つの量子回路を使って、グローバーのアルゴリズムの原理を説明 <マーキング無しで、全ての量子ビットで位相の反転が無い場合> 並行宇宙1(q1=0,q0=0) [量子ビットの初期化、重ね合わせ後] 【図2】 ![]() 並行宇宙2(q1=1,q0=0) [量子ビットの初期化、重ね合わせ後] 【図3】 ![]() 並行宇宙3(q1=0,q0=1) [量子ビットの初期化、重ね合わせ後] 【図4】 ![]() 並行宇宙4(q1=1,q0=1) [量子ビットの初期化、重ね合わせ後] 【図5】 ![]() 最終結果 【図6】 ![]() <並行宇宙2にマーキングをし、q1の位相をマイナスにした場合> (マーキングの有無で図が違うのは【図3】だけなので、【図3】を【図7】と入れ替えて説明します。) 並行宇宙2(q1=-1,q0=0) [量子ビットの初期化、重ね合わせ、マーキング後] 【図7】 ![]() 最終結果 【図8】 ![]() 並行宇宙2の出現確率が高くなります。 並行宇宙2のq1をマイナスにすると、なぜ並行宇宙2の出現確率が最大になるのか調べます。 2つの結果を並べて比較すると、ある規則を見つけることができます。 マーキングすると並行宇宙2の量子ビットだけが全て反転しているのが分かります。 そのため合計した結果に違いが生じます。 【図9】 ![]() グローバーのアルゴリズムはデータベース検索?? グローバーのアルゴリズムはデータベース検索と言われていますが本当でしょうか。 Aを入力するとAを出力、Bを入力するとBを出力、Cを入力するとCを出力するようなもので役に立ちません。 なぜそうなるかを、3量子ビットのグローバーのアルゴリズムを使って説明します。 【図10】の量子回路Aでは、マーキングしたデータと同じデータが測定されます。(この図では111をマーキングしています。) それは、3つの量子ビットにアダマールゲートを作用(量子回路Aの1)させて、入力データ000〜111が同じ確率で測定されるようにしたためです。 この回路では、どのデータをマーキングしてもマーキングしたデータと同じデータが出力されます。 【図10】の量子回路Bでは、q0とq1にアダマールゲートを作用させ、q2にノットゲートを作用(量子回路Bの1)させています。 すると存在するデータは、「100, 101, 110, 111(q2,q1,q0)」の4つになります。 111をマーキングすると、111が測定されます。 【図10】の量子回路Cでは、q0とq1にアダマールゲートを作用(量子回路Cの1)させ、q2には何もしません。 すると存在するデータは、「000, 001, 010, 011(q2,q1,q0)」の4つになります。 111をマーキングしても、111は測定されません。 つまり、入力データの中に探しているデータの有無を調べることができます。 【図10】 ![]() 【図10】の量子回路Bを回路上の番号に沿って計算しました。 【図11】 ![]() 【図10】の量子回路Cを回路上の番号に沿って計算しました。 【図12】 ![]() 【図10】の量子回路BをQiskitを使って確認しました。 【図13】 ![]() 【図10】の量子回路CをQiskitを使って確認しました。 【図14】 ![]() MCS mcs7@mte.biglobe.ne.jp |