簡単に量子プログラミングが始められる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は目指しています。
また、実機を動かしてみたところ、非常に単純な回路にも関わらず、結構エラーが目立つことが分かりました。
実際にこれを体験することは、量子コンピュータの現状を知る上でかなり重要です。
将来、「わしの若い頃の量子コンピュータはエラーばっかりで」とドヤるためにも、ぜひ、試してみてください。