今回はRigettiで振幅増幅回路を実行してみます。
from blueqat import Circuit
from bqcloud import load_api, Device
#キーの読み込み
api = load_api()
今回は、こちらの回路を利用し、10のデータを増幅するような回路を作ります。下記はマーキング回路です。
'''
#marking on |01>
----S--*--S---
-------Z-------
'''
Circuit(2).s[0].cz[0,1].s[0].run_with_sympy_unitary()
Matrix([
[1, 0, 0, 0],
[0, -1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]])
こちらの回路に下記のような増幅反転回路を実行します。
'''
--H-X-*-X-H--
--H-X-Z-X-H--
'''
Circuit(2).h[:].x[:].cz[0,1].x[:].h[:].run_with_sympy_unitary()
Matrix([
[ 1/2, -1/2, -1/2, -1/2],
[-1/2, 1/2, -1/2, -1/2],
[-1/2, -1/2, 1/2, -1/2],
[-1/2, -1/2, -1/2, 1/2]])
a = Circuit(2).h[:].x[:].cz[0,1].x[:].h[:]
こちらをまとめて実行です。
task = api.execute(Circuit(2).h[:].s[0].cz[0,1].s[0] + a, Device.Aspen9, 100)
result = task.wait(timeout=100)
if result:
print(result.shots())
else:
print("timeout")
Counter({'10': 94, '11': 5, '00': 1})
今回はうまい感じに振幅増幅できました。10のビット列が増幅されて出てきています。以上です。