common.title
Cloud support

Nobisuke

Dekisugi

RAG


autoQAOA
RAG for dev
Fortune telling app
Annealing
DEEPSCORE
Translation

Overview
Service overview
Terms of service

Privacy policy

Contact
Research

Sign in
Sign up
common.title

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

Yuichiro Minato

2021/04/17 16:46

#量子ゲート #IonQ

1

土曜日でストップしているはずのIonQからの計算結果が戻ってきたので、もしかしたら計算できるのでは?ということでチャレンジしてみました。

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 ) #ionq dprig = IonqDeviceParameters(paradigmParameters=paradigm_parameters) params = { "action": circuit.to_ir().json(), "device": "aws/ionq/ionQdevice", "deviceParameters": dprig.json(), "shots": 10, "taskGroup": "bell_ionq", "sendEmail": True, } ionq_result = create_quantum_task(params)
tid = get_quantum_tasks({"index":0})['tasks'][0]['id'] res = get_quantum_task(tid) res['result']['measurementProbabilities']
{'00': 0.4, '11': 0.6}

なんと時間外でも解けました。以外と動いてるんですね。土日はねらい目かもしれません。回路は単純なもつれ回路でしたので、きちんと取れました。

もちょっと長い回路でやってみます。こちらはトフォリゲートです。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 ) #ionq dprig = IonqDeviceParameters(paradigmParameters=paradigm_parameters) params = { "action": circuit.to_ir().json(), "device": "aws/ionq/ionQdevice", "deviceParameters": dprig.json(), "shots": 100, "taskGroup": "bell_ionq", "sendEmail": False, } ionq_result = create_quantum_task(params)

結構早く計算が終わるので、タスクのidから結果を取得して、取得した結果をカウントしてみます

tid = get_quantum_tasks({"index":0})['tasks'][0]['id'] res = get_quantum_task(tid) res['result']['measurementProbabilities']
{'010': 0.01, '110': 0.04, '001': 0.02, '101': 0.09, '011': 0.06, '111': 0.78}

IonQはRigettiとカウントの仕方が違っていますね。IonQは111の出る確率が明らかに大きいので、精度が高い気がします。値段は高いですが、たくさん稼いでマシンがたくさん使えるといいですね。以上です。

© 2024, blueqat Inc. All rights reserved