4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

gyu-donAdvent Calendar 2019

Day 5

BlueqatでIBMの実機を使う

Last updated at Posted at 2019-12-04

簡単に量子プログラミングが始められるBlueqatライブラリ

を開発しています。
https://github.com/Blueqat/Blueqat

今回、Blueqat経由でIBMの実機を動かします。

Qiskit? Blueqat?

IBMも量子プログラミング用ライブラリのQiskitを提供しています。
QiskitからIBMの実機を動かすことができます。

Blueqatは、IBMの実機を直接動かす機能は実装していませんが、
BlueqatからQiskitを呼び出すことで、IBMの実機を動かすことができます。

では、Blueqatを使う意義とは?

一言でいうと、手軽だからに尽きます。
Blueqatは、できるだけ記述量を少なく量子回路を動かせるよう、開発しています。

使う準備

使うための準備をしていきます。
既に済んでいる場合は、この手順は飛ばすことができます。

BlueqatとQiskitをインストールします

pip install blueqat qiskit

IBM Qのアカウントを作成、ログイン

https://quantum-computing.ibm.com/ にアクセスし、アカウントを作成(既に持っていればログイン)します

APIキーの取得と保存

https://quantum-computing.ibm.com/account にアクセスし、APIキーを取得します

続いて、次のPythonスクリプトを打ち込みます。

from qiskit import IBMQ
IBMQ.save_account('MY_API_TOKEN') # 'MY_API_TOKEN'は、取得したAPIキーに変える

昔、save_accounts()したことあるよって人は

save_account()じゃなく、save_accounts()だった頃にやったことある人は、Qiskitのバージョンアップに伴い、以前のは、使えない可能性が高いです。以下の方法で、新バージョン用に変換できます。

from qiskit import IBMQ
IBMQ.update_account()

やっていきましょう

from pprint import pprint
from qiskit import IBMQ

IBMQ.load_account() # saveしたAPIキーを読み込みます
pprint(IBMQ.get_provider().backends()) # どんな実機が使えるのかリストアップします

試しに、Melbourneを動かしてみます。

なお、IBM Qは世界中の人が使う人気サービスのため、結構順番待ちがあります。
https://quantum-computing.ibm.com/ の右側を確認しながら、できるだけ順番待ちが少ないものを選ぶのがいいでしょう。

from pprint import pprint
from qiskit import IBMQ
from blueqat import Circuit

IBMQ.load_account()
# MelbourneのQiskitバックエンドを取得します
backend = IBMQ.get_provider().get_backend('ibmq_16_melbourne')

# |000> + |111> を作って動かします
pprint(Circuit().h[0].cx[0, 1].cx[1, 2].m[:].run_with_ibmq(backend))

大切なことは全部1行に収まってる
これがBlueqatの魅力です。Hゲートと、CNOTを2つかけて、3量子ビットをもつれさせています。
他社製ライブラリだと、これらは、回路にひとつずつかけていかないといけないことが多いですが、Blueqatでは、メソッドチェーンでつなげて書けます。
また、普段はrun()で実行するところをrun_with_ibmq(Qiskitのバックエンド)のように指定すると、指定したQiskitバックエンドで回路を動かして、Blueqatの他のバックエンドと同じ形式で結果を返します。

さて、どうなったかといいますと。

Counter({'000': 472,
         '111': 362,
         '010': 51,
         '110': 46,
         '101': 36,
         '011': 33,
         '100': 19,
         '001': 5})

量子コンピュータでの計算は、一度だけではなく何度も動かすことが多いですが、BlueqatがIBM Qを呼び出す際は、特に指定しなければ1024回計算を回すよう指示しています。
'000'とかは、量子ビットの測定結果で、横の数字は、それが出た回数です。

理想的には、'000'が50%, '111'が50%で出て、それ以外は出ません。
ちょうど半分の512回ずつ出るかについては、コイン投げと同じで、大抵ちょうどにはならないのですが、それ以外が出るのは理想的な動きではありません。

ご存知のとおり、量子コンピュータにはエラーがあり、とくにCNOTゲートや測定で、よくて数パーセント、悪いとそれ以上の誤りを生じます。

こんなに短い単純な回路でも、それなりに誤りが目立つというのは、今の量子コンピュータを使う上で知っておきたいことです。

まとめ

Blueqatから、Qiskitを経由してIBMの実機を呼び出す方法を見ていきました。
QiskitだけでもIBM実機を使うことはできますが、それよりももっと手軽に使えるライブラリをBlueqatは目指しています。

また、実機を動かしてみたところ、非常に単純な回路にも関わらず、結構エラーが目立つことが分かりました。
実際にこれを体験することは、量子コンピュータの現状を知る上でかなり重要です。

将来、「わしの若い頃の量子コンピュータはエラーばっかりで」とドヤるためにも、ぜひ、試してみてください。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?