Help us understand the problem. What is going on with this article?

Google ColaboratoryとBlueqatで始める量子コンピュータプログラミング01(1量子ビット)

はじめに

今回は量子コンピュータのプログラミングを始めるにあたって一番簡単であろう、Blueqat(ブルーキャット)を使って行ってみたいと思います。また、この記事はyoutube動画とも連動していますので、移動中やどこでもいつでも学ぶことができます。

youtube動画
https://www.youtube.com/watch?v=yf9EcwWnSwk&feature=youtu.be

Google Colaboratory

Google Colaboratory(グーグルコラボラトリー)はオンラインで簡単にpythonの実行と学習ができるものです。

https://colab.research.google.com

からアクセスし、ログインをします。そしてpython3のノートブックというものを作ると、早速pythonを実行できます。今回はもっと簡単にできるように、リンクを準備しました。

https://colab.research.google.com/github/Blueqat/Blueqat-tutorials/blob/master/tutorial-ja/001_basic_one_qubit.ipynb

下記をクリックすることで簡単にGoogle Colabを実行できます。実行方法はpythonコードの左側にある矢印(見当たらないときは[]記号)をクリックすると実行してくれます。

スクリーンショット 2019-08-20 21.40.16.png

インストール

インストールは簡単です。そしてpipというパッケージ管理ツールを使ってインストールします。Google Colabでは!をつけて実行します。

!pip install blueqat

量子コンピュータプログラミング

量子コンピュータのプログラミングは3ステップで行います。

1、初期化
2、ゲート操作
3、測定

になります。初期化は自動で行われます。ゲート操作が実質的にプログラミングに当たります。そして最後に測定を通じて計算結果を取り出します。量子コンピュータでは毎回解が異なることがありますので、それを確認していきます。

早速実行

まずはblueqatを読み込んで初期化します。

from blueqat import Circuit

Circuit()

ツールの読み込みは1行。初期化はわずかで終わります。量子ビットは初期化されると全て0になります。今回は0から計算がスタートします。次に、このCircuit()に続いて回路を書いていきます。

回路の記述

回路はメソッドチェーンという方式でつないで書きます。.x[0]のように点でつないでゲートの種類を書き、[]のなかにこのゲートをかけたい量子ビットの番号を書きます。

Circuit().x[0]

これは、0番目の量子ビットにXゲートをかけるという意味です。量子ビットは通し番号で0から順番に数えます。これで0番目にXゲートがかかり、Xゲートをかけることは0を1にする、もしくは1を0にすることに対応します。今回は0から1になります。

そして最後に測定をします。

測定は.m[]を使います。:の記号は全ての量子ビットに測定をするという意味なので、このまま使います。そしてこの回路を実行します。.run(shots=1)で1回だけ計算をします。やってみましょう。

Circuit().x[0].m[:].run(shots=1)

これを実行すると、

Counter({'1': 1})

このようになりました。これは1回計算をして1がでました。

(応用)状態ベクトル

量子コンピュータではシミュレータの専用機能として状態ベクトルというのを取得することができます。これをみることでどの答えが何%で出るのかがわかります。ただ、これは量子ビット数が少ない時だけです。やり方は簡単です。測定をせずに、runでもshotsを指定しないで実行します。

Circuit().h[0].run()

これをやってみると、、、上記はまだ習っていませんが、0と1を半々の確率で出す回路です。

array([0.70710678+0.j, 0.70710678+0.j])

こうなりました。これは、配列になっていて、0と1が出る確率の平方根を表しています。0が出る確率が、0.707*0.707=0.5となります。つまりこれをみることで0と1が50%ずつ出ることがわかります。

100回計算してみると??(上記リンクにはないので追加してやってみましょう)

上記を応用して100回計算してみましょう。

Circuit().x[0].m[:].run(shots=100)

今度は1が100回出ました。

Counter({'1': 100})

今後は計算するごとに答えが変わる場合が多いので、複数回計算して確認をしてみます。

今回は以上

今回は以上ですが、より応用にも踏み込んで進めていきたいと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away