common.title
Cloud support

TYTAN CLOUD
QUANTUM GAMING

Nobisuke

Dekisugi

RAG


autoQAOA
RAG for dev
DEEPSCORE
Translation

Overview
Service overview
Terms of service

Privacy policy

Contact
Research

Sign in
Sign up
common.title

blueqat cloudから量子ゲートマシンのRigettiにタスクを投げて計算してみた

Yuichiro Minato

2021/04/17 16:28

#量子ゲート

本日は土曜日です。blueqat cloudからIonQに投げてみたかったですが、休みでした。Rigettiは投げられますので、使ってみたいと思います。

APIはblueqat.comから利用できます。今回は事前に、.passに保存して使っています。以前D-Waveはv1のAPIを利用しましたが、今回はv2になっています。

まだツールの検証がまだなので、バックエンドに投げるときのamazon braketそのまま使ってみます。blueqat cloudの無料クレジットを持っている人はぜひ試してみてください。

from braket.circuits import Circuit from braket.device_schema import GateModelParameters from braket.device_schema.rigetti import RigettiDeviceParameters from braket.device_schema.ionq import IonqDeviceParameters import json import urllib.request f = open('../.pass', 'r', encoding='UTF-8') API_KEY = f.read()[:-1] f.close() API_ENDPOINT = "https://cloudapi.blueqat.com/v2/" def post_request(path, body): headers = { "Content-Type": "application/json", "X-Api-Key": API_KEY, } req = urllib.request.Request( API_ENDPOINT + path, json.dumps(body).encode(), headers ) with urllib.request.urlopen(req) as res: body = res.read() return json.loads(body) def get_quantum_tasks(body): path = "quantum-tasks/list" return post_request(path, params) def get_quantum_task_status(id): path = "quantum-tasks/get/status" body = { "id": id, } return post_request(path, body) def get_quantum_task(id): path = "quantum-tasks/get" body = { "id": id, } return post_request(path, body) def create_quantum_task(body): path = "quantum-tasks/create" return post_request(path, body) def get_credit(): path = "credit/get" return post_request(path, {}) #circuit circuit = Circuit().h(0).cnot(0, 1) paradigm_parameters = GateModelParameters( qubitCount=circuit.qubit_count, disableQubitRewiring=False ) # rigetti dprig = RigettiDeviceParameters(paradigmParameters=paradigm_parameters) dprig.json() params = { "action": circuit.to_ir().json(), "device": "aws/rigetti/Aspen-9", "deviceParameters": dprig.json(), "shots": 10, "taskGroup": "bell_rigetti", "sendEmail": True, } rigetti_result = create_quantum_task(params)

これでタスクが作成されますが、いくつかやってみましたが、結構早く解いてくれました。今回は投げたジョブの履歴から一番最新のものをとって、その結果を取得したいと思います。 もっと厳密にはステータスなどをとりながらなのですが、今日は調子が良さそうなので、そのまま結果を取得します。

tid = get_quantum_tasks({"index":0})['tasks'][0]['id'] res = get_quantum_task(tid) res['result']['measurements']
[[0, 0],

 [0, 0],

 [0, 0],

 [0, 0],

 [0, 0],

 [0, 0],

 [1, 1],

 [0, 0],

 [0, 1],

 [1, 1]]

回路は単純なもつれ回路でしたので、きちんと取れました。すごいですね。

もちょっと長い回路でやってみます。こちらはとふぉりゲートです。CCXとも呼ばれますが、最初の回路に011を設定したので、最終的には111が正解になります。まずジョブを投げます。

import numpy as np circuit = Circuit().x(1).x(2).h(0).cnot(1,0).ti(0).cnot(2,0).t(0).cnot(1,0).ti(0).cnot(2,0).t(0).t(1).h(0).swap(1,0).cnot(2,0).ti(0).t(2).cnot(2,0) paradigm_parameters = GateModelParameters( qubitCount=circuit.qubit_count, disableQubitRewiring=False ) # rigetti dprig = RigettiDeviceParameters(paradigmParameters=paradigm_parameters) dprig.json() params = { "action": circuit.to_ir().json(), "device": "aws/rigetti/Aspen-9", "deviceParameters": dprig.json(), "shots": 100, "taskGroup": "bell_rigetti", "sendEmail": False, } rigetti_result = create_quantum_task(params)

結構早く計算が終わるので、タスクのidから結果を取得します。

tid = get_quantum_tasks({"index":0})['tasks'][0]['id'] res = get_quantum_task(tid) a = res['result']['measurements']

取得した結果をカウントしてみます。

b = [] for i in a: b.append("".join(map(str, i))) import collections collections.Counter(b)
Counter({'000': 6,

         '101': 16,

         '001': 8,

         '111': 31,

         '011': 6,

         '100': 14,

         '110': 14,

         '010': 5})

なんとか111が最大ででましたが、101とか100とか110も結構出ています。トフォリ一回くらいで結構間違えるので、本格的な利用は厳しそうですが、お試しでは十分に動きそうです。ぜひやってみてくださいませ。今回は以上です。

© 2024, blueqat Inc. All rights reserved