量子コンピュータ入門 | IBM Q experience でグローバーのアルゴリズム実装してみた
これまでのあらすじ
物理学科を卒業したのに、井戸型ポテンシャルも解けない私は、どこかのタイミングで「物理わかってる感」を体得したかった。
意識高いマウンティング・エバンジェリストたちが
「まだ仮想通貨で消耗してるの?」
「量子コンピュータできたら、ブロックチェーン終わりだから…」
とマウン散らす中、私はそこから逃げるように、ひたすら地底でビットコインを堀り続けた…
今回のあらすじ
量子コンピュータの最低限を理解したい。
仮想通貨もそう、最低限わかっていれば世界は変わった。
どさくさに紛れて8日まで会社を休み、量子コンピュータ・エバジェリストになり、人々をマウンティングするのだ…
やること
IBM Q experience を利用し、これが出来なかったら量子コンピュータは無理、と言われる最も簡単なアルゴリズム ”グローバーalgo” を実装する。
演算子(パウリ)
とりあえず、タコメーターっぽいやつは計測するやつ。
Xは0を1に、1を0に変えるパウリゲートらしい。
ぱ・・・ぱうり・・・
なんか絶対習った気がするが、思い出そうとすると頭痛に襲われる。
これが大学時代酒ばかり飲んでいた者の代償・・・
とりあえずWiki引いたら、
パウリ行列はエルミート行列であり、ユニタリー行列でもある
とある。
・・・御託はよい。
こいつは0を1に変えるだけの、何ら変哲のない、どこにでもいるピーターティールだ。
ちなみに↑の画像の演算では q[0] だけ反転するので、下記の操作に等しい。
|00000〉→ |00001〉
演算子(アダマール)
踏み潰されたら全滅しそうな名前だが、こいつは結構肝である。
(言うまでもなく習った記憶はない)
↑図のHがアダマールゲートだ。
はてぶTexまだ習得してないので、I○Mの公式からパクってきたが、要はこうだ↓
|0>か|1>の状態を、重ね合わせ状態にするのだ。
|0>は 100%ゼロの状態。
|1>は 100%イチの状態。
はっきりしてたものを、モヤッとしたものに変換したのだ。
・・・
少しマジレスすると、↑の図ではインプットが |00>(100% 00の状態)だが、それぞれにHを作用させたことにより
1/2 (|00> + |01> + |10> + |11>)
という4つの状態の重ね合わせ状態になったのだ。
余談だが、→のような記法をブラケットと呼び ⟨α|β⟩
<α| がブラベクトル
|β> がケットベクトルなのだが
ブラベクトルに初めて触れる物理学科は、意味もなくドキドキする。
グローバーのアルゴリズムを組む
N桁の数列を検索するとき、皆さんがお使いの旧態依然の2進数PCだと、総当り(1個1個調べていく)せざるを得ないかと思うが、量子コンピュータは1回の演算でこれを当てる。
今回は2桁でやる。
|11>を答えとする。
〜5時間後〜
+マークは、制御NOTゲートで、点がついてるところが1なら+がついてるところをNOT(1を-1に)し、0なら何もしないもの。
|11>だけが -|11>になる。
実行すると100% |11>が出てくる。
アダマールの項でご説明したように、最初のステップで4つの状態の重ね合わせにして
その後 |11>だけNOTして、それ以外を消していく。
…気になる方は、シンプルな分数の計算なのでやってみてください。
ちなみにスクリプトエディタ的なものもある。