最先端技術即席実装(SSJ)

最先端技術即席実装(SSJ)

いかに時間をかけないで、最新技術を使いこなすかを目標にした活動記録

量子コンピュータ入門 | IBM Q experience でグローバーのアルゴリズム実装してみた

f:id:tetsuyaimagawa:20180101163040j:plain

これまでのあらすじ

物理学科を卒業したのに、井戸型ポテンシャルも解けない私は、どこかのタイミングで「物理わかってる感」を体得したかった。

意識高いマウンティング・エバンジェリストたちが
「まだ仮想通貨で消耗してるの?」

量子コンピュータできたら、ブロックチェーン終わりだから…」
とマウン散らす中、私はそこから逃げるように、ひたすら地底でビットコインを堀り続けた…


今回のあらすじ

量子コンピュータの最低限を理解したい。
仮想通貨もそう、最低限わかっていれば世界は変わった。

どさくさに紛れて8日まで会社を休み、量子コンピュータ・エバジェリストになり、人々をマウンティングするのだ…



やること

IBM Q experience を利用し、これが出来なかったら量子コンピュータは無理、と言われる最も簡単なアルゴリズムグローバーalgo” を実装する。


環境設定

アカウントを作成して(中略)

はい、UI↓


f:id:tetsuyaimagawa:20180101164038p:plain



この怪しい五線譜に、謎の♫たちをプロットしていくようだ。

GarageBandと何ら変わらない、得意分野だ。


演算子(パウリ)

とりあえず、タコメーターっぽいやつは計測するやつ。
Xは0を1に、1を0に変えるパウリゲートらしい。

f:id:tetsuyaimagawa:20180101164638p:plain


ぱ・・・ぱうり・・・


なんか絶対習った気がするが、思い出そうとすると頭痛に襲われる。
これが大学時代酒ばかり飲んでいた者の代償・・・


とりあえずWiki引いたら、

パウリ行列はエルミート行列であり、ユニタリー行列でもある

とある。









f:id:tetsuyaimagawa:20180101165138p:plain









・・・御託はよい。
こいつは0を1に変えるだけの、何ら変哲のない、どこにでもいるピーターティールだ。



ちなみに↑の画像の演算では q[0] だけ反転するので、下記の操作に等しい。
|00000〉→ |00001〉


演算子アダマール

踏み潰されたら全滅しそうな名前だが、こいつは結構肝である。

(言うまでもなく習った記憶はない)



f:id:tetsuyaimagawa:20180101173625p:plain

↑図のHがアダマールゲートだ。



はてぶTexまだ習得してないので、I○Mの公式からパクってきたが、要はこうだ↓
f:id:tetsuyaimagawa:20180101170029g:plain


|0>か|1>の状態を、重ね合わせ状態にするのだ。
|0>は 100%ゼロの状態。
|1>は 100%イチの状態。
はっきりしてたものを、モヤッとしたものに変換したのだ。








・・・








f:id:tetsuyaimagawa:20180101165138p:plain






少しマジレスすると、↑の図ではインプットが |00>(100% 00の状態)だが、それぞれにHを作用させたことにより
1/2 (|00> + |01> + |10> + |11>)
という4つの状態の重ね合わせ状態になったのだ。




余談だが、→のような記法をブラケットと呼び ⟨α|β⟩
<α| がブラベクトル
|β> がケットベクトルなのだが

ブラベクトルに初めて触れる物理学科は、意味もなくドキドキする。



グローバーアルゴリズムを組む

N桁の数列を検索するとき、皆さんがお使いの旧態依然の2進数PCだと、総当り(1個1個調べていく)せざるを得ないかと思うが、量子コンピュータは1回の演算でこれを当てる。

今回は2桁でやる。
|11>を答えとする。




〜5時間後〜





f:id:tetsuyaimagawa:20180101175002p:plain





…はい、グローバーアルゴリズム2桁版です。

+マークは、制御NOTゲートで、点がついてるところが1なら+がついてるところをNOT(1を-1に)し、0なら何もしないもの。
|11>だけが -|11>になる。






実行すると100% |11>が出てくる。

f:id:tetsuyaimagawa:20180101175113p:plain




アダマールの項でご説明したように、最初のステップで4つの状態の重ね合わせにして
その後 |11>だけNOTして、それ以外を消していく。


…気になる方は、シンプルな分数の計算なのでやってみてください。




ちなみにスクリプトエディタ的なものもある。
f:id:tetsuyaimagawa:20180101180858p:plain



まとめ

シンプルな計算はわかった。
しかし今何ができて、課題が何なのかなどはまだ良くわからない。

量子コンピュータで既存の暗号システム破壊したら、億るどころではない。
私のビットコインが危ない・・・