量子コンピュータを使ってみる(2)


前回の記事では量子コンピュータを利用するためのアカウントを作成しました。今回はいよいよ量子コンピュータを動かしてみます。量子コンピュータの ’Hello world!’です。

まずは量子コンピュータを動かすコードを編集する画面に前回作成したアカウントでサインインします。
URLはこちら:https://quantumexperience.ng.bluemix.net/qx/editor

以下のような画面が表示されます。(赤下線と赤丸は筆者追加)
下線部を見てほしいのですが、2台のコンピュータがあります。両方とも5量子ビット(5 Qubits)です。量子ビットとはなんぞや?という疑問はいったん横に置いておきましょう。「普通のPC(古典コンピュータと言います)のCPUのレジスタが5ビットある」くらいに思っておきましょう。(今回はその程度で大丈夫です。)
右肩の赤丸のところを見てください。2台とも’Active’になっていますが、時々赤字で’Maintainance’になっていることがあります。その時はメンテ中なので利用できません。
回路図とその右の〇印と矢印が気になりますが、、今は置いておきます。(別途説明する予定)

下にスクロールするとこのような画面が表示されます。この画面で量子コンピュータの操作を記述し、処理を実行します。音楽の譜面みたいですね。実際に英語でもScoreと書かれています。そしてこの画面をComposerと呼びます。五線譜の左端のq[0],q[1],…,q[4]が量子ビットです。全部で5つあります(5量子ビットなので。)右側のXとかYとかSとか+が量子ビットに対する操作の記号です。

では、操作してみましょう、、、と、その前に量子ビットがどういう状態をとるか説明します。普通のPCのビットは0または1を取りますが、量子ビットは |0> または |1> という状態をとります。(正確には二つの重ね合わせですが、、ここをいきなり理解しようとすると挫折するので、今のところは |0> or |1> だと思ってください。)
 |0> は 「|」+「0」+「>」 ではなく、|0> でひとまとまりです。|1> も同様です。ピンとこないと思いますが(普通はピンと来ないです)、理由はさておきそういうもんだと思って覚えましょう。
さて、初めての量子ビット操作として「X」を使います。これは |0> |1> にする操作の演算子です。同様に |1> |0> にする操作でもあります。つまり量子ビットを反転させる演算子です。一つ目の量子ビットq[0]に操作Xを行ってみましょう。右側のXをドラッグしてq[0]の線の上にドロップします。

こんな感じになれば成功です。

ここでXをクリックしてみましょう。(ダブルクリックではありません。ダブルクリックすると消えますw)
右側に説明が出てきました。「このXはPauli X ゲートと呼ばれ、X軸を中心に半回転させるもので、X軸は変えずにZ軸を反対にする(つまりマイナス方向に反転させる)ものです。ビットフリップ(bit-flipといいます。」といったことが書かれています。

五線譜左端のq[0]の右に|0>と書かれています。これは初期状態が|0>である事を示しています。これにX演算子で操作しました。これにより|1>になります。実際に|1>になっているか見てみましょう。演算後の量子ビットの状態を見るには赤丸の演算子を配置します。メーターみたいなやつの針の先辺りによーく見ると「Z」と書いてあるのが分かります。地味にこれがミソです。これは「Z軸で観測する」という意味です。「X軸やY軸での観察もあるのか?」という疑問はいったん脇に置いて進みましょう。

配置するとこんな感じになります。

観測マークをクリックすると右側に説明が表示されます。「標準のz基底で測定する」といったことが書いてありますが、いまは放置して先に進みます。

さて、五線譜上に演算子を配置しました。これが最も簡単な?量子プログラムです。実行してみましょう。右側の「Simulate」ボタンをクリックします。 実験名をつけろ、と言われます。デフォルトでタイムスタンプ入りの名前が提案されますので、そのまま「OK」ボタンを押せば大丈夫です。 

実行しています。。

結果が出ました。この結果をどう見れば良いか??
縦棒の下の「00001」が量子ビットの状態を示しています。一番左がq[4]、一番右がq[0]のビット状態を表しています。q[4]~q[1]が’0’で、q[0]が’1’であることを表しています。
0,1ではなく|0>、|1>で表すべきでは?という疑問はもっともです。本当は|0>|0>|0>|0>|1>ないし、|00001>が正しいと思われます。縦棒の上の1.000は「確率100%」を表します。つまり「00001」という状態を100%とる、という事が示されています。
ビットの状態が確率で表される??それが量子コンピュータの特徴です。ビットの状態が ’0’ なのか ’1’ なのか白黒はっきりしないのにコンピュータとして計算できるのか?という疑問も生じますが、これも一旦ペンディング事項として頭の隅において進めます。

下の方にスクロールすると五線譜とその下にソースコードっぽいものが表示されます。これは五線譜で表現した操作をコードに置き換えたものです。
・3行目:量子ビットのレジスタを5個用意する。
・4行目:古典ビット(従来コンピュータのビット)のレジスタを5個用意する。
・6行目:q[0]という量子ビットにXという操作を施す。
・7行目:q[0]の量子ビットを観測し、結果を古典ビットのc[0]に格納する。
そんな感じです。

さて、ここまでの操作で量子コンピュータを動かしたでしょうか?
答えはNoです。先ほど押したボタンは’Simulate’です。このボタンを押して動くのは量子コンピュータのシミュレータです。(実は先ほどの確率が100%なのもシミュレータだからです。)
本当に動かすのであれば’Run’ボタンを押します。
キャッシュから結果を持ってくるか、新しく実行するかを聞かれます。まずはキャッシュから取ってきましょう。これは同じコードを過去に誰かが実行していた場合にその結果が保存されており、それを表示させるということです。’Result from Cache’を選択した状態で右下の’OK’を押します。

キャッシュに保管されている過去の誰かの実験を選択します。今回は一番上のを選びましょう。選んだら右下の’OK’を押します。

キャッシュから結果を読みだしています。

表示されました。先ほどとは異なり確率は100%ではなく、わずかな確率ですが’00000’も取りうる、と言っています。

下にスクロールすると色々と情報が出てきます。

結果データをダウンロードすることもできます。

勘のいい方はお気づきかと思いますが、まだ量子コンピュータを自分の手で動かしていませんw
今度はキャッシュではなく自分で動かした結果を見てみましょう。せっかくなので自分で五線譜に色々と配置してみましょう。そしてRun。

実行中です。

どうやら同じことをやった人がいなかったようで、キャッシュは存在しませんでした。そして実行が計画されました。(ジョブがキューされたようなイメージです。)
量子コンピュータは2台しかないので、順番待ちになります。

順番が回ってきて実行されると結果がメールで帰ってきます。

メールのリンク先URLをブラウザで見てみましょう。色々な状態で色々な確率で存在することが分かります。棒グラフは右側にスクロールできます。

まだ右に続きます。

一通り見ることができました。確率は低いながら、色々な状態で撮りうることが分かったかと思います。

下の方に行くとコードが表示されます。

これで初めての量子コンピュータの操作は完了です。

’Hello world!’と言いつつ、ビット操作だけでしたが、、これが量子コンピュータ操作の現状です。アセンブラの1ステップかそれ以下、下手するとトランジスタの回路に電源をON/OFFするようなものかもしれません。ですが、現在のコンピュータ(古典コンピュータ)の初期の頃もこんな感じだったのではないかと思います。ビット操作から始まり、アセンブラでライブラリが作られ、高級言語が作られてしまいにはERPとかのパッケージが作られる。。

何はともあれ量子コンピュータを動かすことができました。これは大きな一歩です。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です