量子コンピュータと量子アニーリングを直感的に図で理解する


はじめに

やっぱり理解しづらいと言われます。量子コンピュータを今のコンピュータの延長線上で考えてみます。


01ビット

私たちのコンピュータはたとえどんな難しい計算でも0と1をぱちぱち切り替えて計算しています。それはそろばんを高速で弾くようなものです。

1.png


量子ビット

一方量子コンピュータは0と1の他に+や-を使えます。

bc2f2e13dabf2f96144cfab196d68fab-1.png


ビットの切り替え

ビットの切り替えには「量子ゲート」と呼ばれるものを使います。今のコンピュータの0と1を切り替えるにはNOTゲートと呼ばれるものがあればできますが、量子コンピュータには、「Hゲート」、「Xゲート(NOTゲートに相当)」、「Zゲート」などがあります。

bc2f2e13dabf2f96144cfab196d68fab-2.png

Hゲートは0と+を、1と-を切り替えます。Xは0と1を切り替え従来のNOTゲートに相当します。Zは+と-を切り替えます。


ビットの切り替えを時系列で表現

よく量子コンピュータの説明で五線譜のような回路が出てきます。これは上記のような切り替えを時間ごとに変えています。最初は0からスタートして次々にゲートを操作して状態を変化させて演算を行います。

0からスタートし、Hゲートを適用して+に、Zゲートを適用して-に、再度Hゲートで1に、そこにXゲートを適用して0に戻るなどです。これらのルールを覚えることでプログラミングができます。

895ab4ae6db7fc4e1f2d007d8c9755ef-1.png


(応用)軸を考えて3次元に

実際には軸を考えます。XゲートやZゲートなどは軸の回転と関係付けられます。

bc2f2e13dabf2f96144cfab196d68fab.png

今回は理解のためにZ軸とX軸だけを取り上げましたが、実際にはさらにY軸が入りより複雑な計算が可能となります。

38cf3416cee1fc13f457d9914bff484e.png

これら3次元でのデータの取り扱いが今のコンピュータと量子コンピュータとの1番の違いでしょう。


量子アニーリング

まずは子供向けの説明が一番良さそうでした。子供は先入観がないのでパズル感覚でスラスラときます。大人は常識にとらわれて大変そうです。

24b0af8d7434b53a222545ca0dd02b9e-1.jpg

まず計算するには「量子(りょうし)ビット」と呼ばれる丸があります。量子アニーリングで計算に使えるのはたった2種類だけです。

・量子ビットにかける値hと、

・量子ビット同士の間にかける値のJij(ジェイアイジェー)です。

この2つをうまく組み合わせて計算を行います。


+1になりやすい。-1になりやすい。

まずhを考えます。hは量子ビット単体にかける値ですが、この値は量子ビットが+1になりやすくなるか、-1になりやすくなるかを決めます。

3442532bd4845fcc1b816bb8db9ba220.png

h=-1を設定すると、量子ビットは+1になりやすくなり、

h=+1を設定すると、量子ビットは-1になりやすくなります。

このようにhを決めることで量子ビットの値の傾向を決めることができます。


同じになりやすい、ちがうのになりやすい

次にJijを考えます。Jijは量子ビットの間にかける値ですが、この値は量子ビット同士が違う値になりやすくなるか、同じ値になりやすくなるかを決めます。

fc191d4037dc23c716f335277b0ebba1.jpg

これら2つのルールだけを使って計算するのが量子アニーリングです。


実際の問題

例えば下記のように繋がっているところにすべて+1のJijをいれると、仲が悪い人を2つに分けて理想的なグループ分けをしてくれるというような決定を計算で行うことができます。

bc2f2e13dabf2f96144cfab196d68fab.jpg


量子アニーリングの原理

量子アニーリングはこのように+1と-1を計算で求めるために自然現象を使います。計算原理を直感的に見てみます。実際の量子ビットはスピンというものを使って表現され、上むき+1、下向き-1とします。

895ab4ae6db7fc4e1f2d007d8c9755ef-1.jpg

それに初期の段階で横磁場というものをかけてスピンを全て倒します。

24b0af8d7434b53a222545ca0dd02b9e-2.jpg

そして、だんだんと横磁場を外すとスピンは本来の安定した形でそれぞれ+1か-1になるように、立ち上がり計算が終了します。先ほど設定した2つの値はこれらの安定な状態をプログラミングしているのに相当します。

fc191d4037dc23c716f335277b0ebba1-1.jpg

安定した状態は量子アニーリングのマシンが自然と探してくれます。

895ab4ae6db7fc4e1f2d007d8c9755ef-1.jpg


プログラミング方法

実際のプログラミングはPythonという言語を使ってプログラミングします。

pip install blueqat

でインストールして、

#モジュール読み込み

from blueqat import opt

#計算準備
a = opt.opt()

#値を設定
a.J = [
[0,1,0,1,0],
[0,0,1,0,0],
[0,0,0,1,1],
[0,0,0,0,1],
[0,0,0,0,0]]

#計算実行
a.sa()

#結果の取り出し
#=> [0, 1, 0, 1, 0]

このように簡単にできます。ぜひやってみてください。以上です。