@yuichirominato 2019.02.01更新 221views

【初心者】量子アニーリングを直感的に理解する


はじめに

毎日がんばって量子コンピュータのユーザーを増やそうと思ってますが、なかなか無意識におごりがあるのか、うまく伝わらなくて困っています。毎日電車の中でどのようにすれば簡単に量子コンピュータを理解できるかを考えています。

子供向け量子ビット

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

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

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

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

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

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

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

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

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

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

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

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

実際の問題

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

量子アニーリングの原理

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

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

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

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

プログラミング方法

実際のプログラミングは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]

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

Recommended


CONTACT

info@mdrft.com

ブログトップへ Wikiへ移動

量子コンピュータ一般

量子ゲートアルゴリズム

量子アニーリング一般

量子アニーリングアルゴリズム

BlueqatSDKの使い方