はじめに
(注)
私は量子情報の専門家でも、情報の専門家でもありません。ただいま勉強中です。誤りがありましたらご指摘いただけると幸いです。
世の中すごい人がいるもので、上のような文言で始まる方が猛烈な勢いで量子コンピュータの記事を書かれているので触発されて私も量子コンピュータを使ったプログラム作ってみました。上記のとおり私も専門家ではありません。
作ったものは電卓です。
量子コンピュータで電卓を作る
今回の元になった記事は@converghubさんの記事です。
記事の中では。3 Qubits同士の足し算回路の説明がされています。入力状態はXゲート(制御NOTゲート)を最初に挿入することで変えられるようです。
ということはこれをプログラムからいじれば、任意の数字を足すことができる電卓が可能ということになります。任意と言っても、3 Qubitsなので表現できるのは0から7の8種類の自然数となります。電卓としては、かなりの低性能ですが、何はともあれとりあえず作って見ました。
環境
QISKitを使うには、Pythonが3.5以上でないといけないので、これをインストール。その試練を乗り越えれば
import qiskit
としてqiskitがインポートできます。
そして、GUIにはwxPythonを使っているので
import wx
が可能となれば、電卓が起動可能です。
といっても、これが厄介で、python3.5のパッケージはpip経由では入りませんでした。
そういうわけで、数日前からwxPythonと格闘していました。その結果たどり着いた結論が次のとおりです。
ubuntu16.04のpython3にwxpythonをインストールする
ビルドするとややこしい問題がいろいろ出てくるので、ビルド済みをインストールして解決するのが早いと思います。
ちなみに、私の非力なノートパソコン(Panasonic CF-R5)ではビルドするのに約半日かかりました。
使い方
環境が揃っていれば起動するはずです。
python3 qc.py
ご覧の通り、8と9のボタンは使わないので最初から無効化されています。さらに引き算の演算もまだ作ってないため無効化されています。
出来ることは3 Qubitsで表すことが出来る、0から7の数字を入力して足すことのみとなっています。ちなみに、結果も3 Qubitsで表される必要があるので、オーバーレンジとなった場合はOR表示になります。
実際に計算してみる
1 + 1 = 2
当たり前です。
1 + 7 = OR
仕方ありません。(3 Qubitsでは7より大きい数を表せない。)
1 + H = 4,3,6,OR,1,5,7,2
これがこの電卓の唯一の意義です。
Hはアダマールゲートを3 Qubits分作用させたものになっています。
その時入力ゲートは0と1の混ざった状態になっていますから、並列に計算ができるというわけです。
数字の順序は観測された状態のカウント順です。
現状
実際に計算してみると、相当時間がかかります。約30秒〜、デフォルトではlocal_qasm_simulatorを使うようになっていますが、これはIBM Q experienceのAPItokenをQconfig.pyに設定すればIBM Qのibmq_qasm_simulator上でも実行できます。(約10秒程度)
まとめ
量子アルゴリズムを使った簡単な電卓を作ってみました。自由にゲートが配置できればいいのですが、実際の量子チップはまだ10 Qubits以上で自由にゲートを配置できるものがないので、シミュレータ上の動作になります。これは現状ではデバイスに合わせて量子回路を組まなければならないということなのでしょうか。この辺がもっと簡単になればいいなと思います。
追記
そうこうしてるうちに@converghubさんの新しい記事が!
追記2 2018/03/03
・3 Qubits以上にも対応したため、8キーと9キーを有効化しました。
・任意のビット長(n Qubits)の足し算と引き算にも対応しました。
・任意の長さの計算(1+1+1等)の場合にも量子回路をつなげて足すことで計算できるようになりました。