Nobisuke
Dekisugi
RAG
Privacy policy
2021/01/28 21:06
今回は量子コンピュータのプログラミングを始めるにあたって一番簡単であろう、blueqat(ブルーキャット)を使って行ってみたいと思います。
クラウド上で、blueqatSDKというpythonベースの量子コンピュータ向けのソフトウェア開発キットが利用できます。通常blueqatSDKはインストールが必要ですが、クラウドですとインストール不要で、無料登録ですぐ使えます。
量子コンピュータのプログラミングは3ステップで行います。
1、初期化
2、ゲート操作
3、測定
になります。初期化は自動で行われます。ゲート操作が実質的にプログラミングに当たります。そして最後に測定を通じて計算結果を取り出します。量子コンピュータでは毎回解が異なることがありますので、それを確認していきます。
まずはblueqatを読み込んで初期化します。
Copy from blueqat import Circuit Circuit()
Circuit(0).
ツールの読み込みは1行。初期化はわずかで終わります。量子ビットは初期化されると全て0になります。今回は0から計算がスタートします。次に、このCircuit()に続いて回路を書いていきます。
回路はメソッドチェーンという方式でつないで書きます。.x[0]のように点でつないでゲートの種類を書き、[]のなかにこのゲートをかけたい量子ビットの番号を書きます。
Copy Circuit().x[0]
Circuit(1).x[0]
これは、0番目の量子ビットにXゲートをかけるという意味です。量子ビットは通し番号で0から順番に数えます。これで0番目にXゲートがかかり、Xゲートをかけることは0を1にする、もしくは1を0にすることに対応します。今回は0から1になります。
測定は.m[]を使います。:の記号は全ての量子ビットに測定をするという意味なので、このまま使います。そしてこの回路を実行します。.run(shots=1)で1回だけ計算をします。やってみましょう。
Copy Circuit().x[0].m[:].run(shots=1)
Counter({'1': 1})
これを実行すると、
Counter({'1': 1})
このようになりました。これは1回計算をして1がでました。
量子コンピュータではシミュレータの専用機能として状態ベクトルというのを取得することができます。これをみることでどの答えが何%で出るのかがわかります。ただ、これは量子ビット数が少ない時だけです。やり方は簡単です。測定をせずに、runでもshotsを指定しないで実行します。
Copy Circuit().h[0].run()
array([0.70710678+0.j, 0.70710678+0.j])
これをやってみると、、、上記はまだ習っていませんが、0と1を半々の確率で出す回路です。
array([0.70710678+0.j, 0.70710678+0.j])
こうなりました。これは、配列になっていて、0と1が出る確率の平方根を表しています。0が出る確率が、0.707*0.707=0.5となります。つまりこれをみることで0と1が50%ずつ出ることがわかります。
上記を応用して100回計算してみましょう。
Copy Circuit().x[0].m[:].run(shots=100)
Counter({'1': 100})
今度は1が100回出ました。
Counter({'1': 100})
今後は計算するごとに答えが変わる場合が多いので、複数回計算して確認をしてみます。
今回は以上ですが、より応用にも踏み込んで進めていきたいと思います。
© 2024, blueqat Inc. All rights reserved