@yuichirominato 2019.01.29更新 346views

【新機能】Blueqatに作った回路のユニタリ行列が確認できる機能が追加


はじめに

こんにちは。量子コンピュータってなんかよくわからないよねっていう人多いですよね。しかしツールがどんどん進化して少しずつ誰でも使える環境ができてきてます。

今回はまだちょっと難しいですが、作った量子回路のユニタリ行列と呼ばれる、全体回路の数学的な表現を取れる機能が量子コンピュータソフトウェア開発キットのBlueqatに搭載されました。これによってデバッグが楽になります。

早速使ってみましょう。

インストールとアップデート

まだ使ったことない人は新規インストールをして、

pip install blueqat

使ったことある人はアップデートをしましょう。

pip install -U blueqat

numpy, scipy, sympy (こちらはoptional)も入ってない方はいれてみてください。

pip install numpy scipy sympy

早速例題

早速sympyを読み込み、やってみます。

from sympy import pi
from blueqat import Circuit

Circuit().rx(pi / 2)[0].cx[0, 1].run(backend="sympy_unitary")

⎡  √2    -√2⋅ⅈ                 ⎤
⎢  ──    ──────    0       0   ⎥
⎢  2       2                   ⎥
⎢                              ⎥
⎢-√2⋅ⅈ     √2                  ⎥
⎢──────    ──      0       0   ⎥
⎢  2       2                   ⎥
⎢                              ⎥
⎢                -√2⋅ⅈ     √2  ⎥
⎢  0       0     ──────    ──  ⎥
⎢                  2       2   ⎥
⎢                              ⎥
⎢                  √2    -√2⋅ⅈ ⎥
⎢  0       0       ──    ──────⎥
⎣                  2       2   ⎦

できました。行列表現で自分の作った回路が確認できます。こちらはみんなのお力添えで早速できました。

JupyternotebookやGoogle colabだとさらに便利に

jupyternotebookだとlatex形式で数式出力ができます。

素敵ですね。

from sympy import *
from blueqat import Circuit
init_printing()

Circuit().rx(pi / 2)[0].cx[0, 1].run(backend="sympy_unitary")

基本はこんな感じです。

GoogleColabの場合には、!マークをつけて

!pip install blueqat

してからの、まずは出力結果をmathjaxで出力できるように設定します。

from google.colab.output._publish import javascript
javascript(url="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=default")

それから、

from sympy import *
from blueqat import Circuit
init_printing()

Circuit().rx(pi / 2)[0].cx[0, 1].run(backend="sympy_unitary")

こんな形で行間に数式が出ます。とても便利です。

量子フーリエ変換やってみる

N=4の量子フーリエ変換を見てみます。

--H--Rz2--Rz3--Rz4--------------------------
-----*----|----|----H--Rz2--Rz3-------------
----------*----|-------*----|----H--Rz2-----
---------------*------------*-------*----H--

こんな回路です。

from sympy import *
from blueqat import Circuit
init_printing()

Circuit().x[:].h[0].rz(pi/4)[0].cx[1,0].rz(-pi/4)[0].cx[1,0].rz(pi/8)[0].cx[2,0].rz(-pi/8)[0].cx[2,0].rz(pi/16)[0].cx[3,0].rz(-pi/16)[0].cx[3,0].h[1].rz(pi/4)[1].cx[2,1].rz(-pi/4)[1].cx[2,1].rz(pi/8)[1].cx[3,1].rz(-pi/8)[1].cx[3,1].h[2].rz(pi/4)[2].cx[3,2].rz(-pi/4)[2].cx[3,2].h[3].run(backend="sympy_unitary")                                                                    

なんかうまく出力されないのでコピペでgoogle colabのテキスト欄に張り付けましたら、、、

でました!中は大変なことになってたんですね。。。勉強になりました!みなさんもつかってみてくださいませ。以上です。

Recommended


Wikiへ移動