common.title

Overview
Service overview
Terms of service

Privacy policy

Contact

Sign in
Sign up
common.title

blueqat0.4.6で量子コンピュータの量子回路をJSON化する

Yuichiro Minato

2021/08/06 13:40

#blueqat #json

1

量子コンピュータの量子回路をJSON化する

最近量子回路をウェブのUIで利用する機会が増えてきました。 blueqatの新バージョン0.4.6で量子回路のJSON化できる機能が追加されたみたいなので見てみたいと思います。

まずは、普通に回路を作ってみます。GHZという回路を作ってみます。

from blueqat import Circuit a = Circuit().h[0].cx[0,1].cx[1,2] a.m[:].run(shots=100)
Counter({'111': 56, '000': 44})

このように000と111と答えがでました。これをそのままJSONにしてみます。

from blueqat.circuit_funcs import json_serializer json_serializer.serialize(a)
{'schema': {'name': 'blueqat-circuit', 'version': '1'},

 'n_qubits': 3,

 'ops': [{'name': 'h', 'params': [], 'targets': [0]},

  {'name': 'cx', 'params': [], 'targets': [0, 1]},

  {'name': 'cx', 'params': [], 'targets': [1, 2]},

  {'name': 'measure', 'params': [], 'targets': [0]},

  {'name': 'measure', 'params': [], 'targets': [1]},

  {'name': 'measure', 'params': [], 'targets': [2]}]}

いい感じですね。続いてQAOAもやってみます。

QAOAの量子回路をJSON化する

続いて、QAOAの回路もJSONにしてみます。

from blueqat import vqe from blueqat.pauli import qubo_bit as q hamiltonian = -3*q(0)-3*q(1)-3*q(2)-3*q(3)-3*q(4)+2*q(0)*q(1)+2*q(0)*q(2)+2*q(0)*q(3)+2*q(0)*q(4)+2*q(1)*q(2)+2*q(1)*q(3)+2*q(1)*q(4)+2*q(2)*q(3)+2*q(2)*q(4)+2*q(3)*q(4) step = 2 result = vqe.Vqe(vqe.QaoaAnsatz(hamiltonian, step)).run() print(result.most_common(12))
(((0, 1, 0, 0, 1), 0.0731599141347431), ((1, 0, 0, 0, 1), 0.07315991413474307), ((0, 1, 1, 0, 0), 0.07315991413474306), ((0, 1, 0, 1, 0), 0.07315991413474306), ((0, 0, 1, 1, 0), 0.07315991413474306), ((0, 0, 1, 0, 1), 0.07315991413474306), ((0, 0, 0, 1, 1), 0.07315991413474306), ((1, 0, 1, 0, 0), 0.07315991413474303), ((1, 0, 0, 1, 0), 0.07315991413474303), ((1, 1, 0, 0, 0), 0.07315991413474299), ((1, 1, 0, 0, 1), 0.016525308363087545), ((0, 1, 1, 1, 0), 0.01652530836308754))
json_serializer.serialize(result.circuit)
{'schema': {'name': 'blueqat-circuit', 'version': '1'},

 'n_qubits': 5,

 'ops': [{'name': 'h', 'params': [], 'targets': [0]},

  {'name': 'h', 'params': [], 'targets': [1]},

  {'name': 'h', 'params': [], 'targets': [2]},

  {'name': 'h', 'params': [], 'targets': [3]},

  {'name': 'h', 'params': [], 'targets': [4]},

  {'name': 'cx', 'params': [], 'targets': [0, 1]},

  {'name': 'rz', 'params': [-6.051465271712881], 'targets': [1]},

  {'name': 'cx', 'params': [], 'targets': [0, 1]},

  {'name': 'cx', 'params': [], 'targets': [0, 2]},

  {'name': 'rz', 'params': [-6.051465271712881], 'targets': [2]},

  {'name': 'cx', 'params': [], 'targets': [0, 2]},

  {'name': 'cx', 'params': [], 'targets': [0, 3]},

  {'name': 'rz', 'params': [-6.051465271712881], 'targets': [3]},

  {'name': 'cx', 'params': [], 'targets': [0, 3]},

  {'name': 'cx', 'params': [], 'targets': [0, 4]},

  {'name': 'rz', 'params': [-6.051465271712881], 'targets': [4]},

  {'name': 'cx', 'params': [], 'targets': [0, 4]},

  {'name': 'rz', 'params': [6.051465271712881], 'targets': [0]},

  {'name': 'cx', 'params': [], 'targets': [1, 2]},

  {'name': 'rz', 'params': [-6.051465271712881], 'targets': [2]},

  {'name': 'cx', 'params': [], 'targets': [1, 2]},

  {'name': 'cx', 'params': [], 'targets': [1, 3]},

  {'name': 'rz', 'params': [-6.051465271712881], 'targets': [3]},

  {'name': 'cx', 'params': [], 'targets': [1, 3]},

  {'name': 'cx', 'params': [], 'targets': [1, 4]},

  {'name': 'rz', 'params': [-6.051465271712881], 'targets': [4]},

  {'name': 'cx', 'params': [], 'targets': [1, 4]},

  {'name': 'rz', 'params': [6.051465271712881], 'targets': [1]},

  {'name': 'cx', 'params': [], 'targets': [2, 3]},

  {'name': 'rz', 'params': [-6.051465271712881], 'targets': [3]},

  {'name': 'cx', 'params': [], 'targets': [2, 3]},

  {'name': 'cx', 'params': [], 'targets': [2, 4]},

  {'name': 'rz', 'params': [-6.051465271712881], 'targets': [4]},

  {'name': 'cx', 'params': [], 'targets': [2, 4]},

  {'name': 'rz', 'params': [6.051465271712881], 'targets': [2]},

  {'name': 'cx', 'params': [], 'targets': [3, 4]},

  {'name': 'rz', 'params': [-6.051465271712881], 'targets': [4]},

  {'name': 'cx', 'params': [], 'targets': [3, 4]},

  {'name': 'rz', 'params': [6.051465271712881], 'targets': [3]},

  {'name': 'rz', 'params': [6.051465271712881], 'targets': [4]},

  {'name': 'rx', 'params': [5.043183193995812], 'targets': [0]},

  {'name': 'rx', 'params': [5.043183193995812], 'targets': [1]},

  {'name': 'rx', 'params': [5.043183193995812], 'targets': [2]},

  {'name': 'rx', 'params': [5.043183193995812], 'targets': [3]},

  {'name': 'rx', 'params': [5.043183193995812], 'targets': [4]},

  {'name': 'cx', 'params': [], 'targets': [0, 1]},

  {'name': 'rz', 'params': [-12.818051168284407], 'targets': [1]},

  {'name': 'cx', 'params': [], 'targets': [0, 1]},

  {'name': 'cx', 'params': [], 'targets': [0, 2]},

  {'name': 'rz', 'params': [-12.818051168284407], 'targets': [2]},

  {'name': 'cx', 'params': [], 'targets': [0, 2]},

  {'name': 'cx', 'params': [], 'targets': [0, 3]},

  {'name': 'rz', 'params': [-12.818051168284407], 'targets': [3]},

  {'name': 'cx', 'params': [], 'targets': [0, 3]},

  {'name': 'cx', 'params': [], 'targets': [0, 4]},

  {'name': 'rz', 'params': [-12.818051168284407], 'targets': [4]},

  {'name': 'cx', 'params': [], 'targets': [0, 4]},

  {'name': 'rz', 'params': [12.818051168284407], 'targets': [0]},

  {'name': 'cx', 'params': [], 'targets': [1, 2]},

  {'name': 'rz', 'params': [-12.818051168284407], 'targets': [2]},

  {'name': 'cx', 'params': [], 'targets': [1, 2]},

  {'name': 'cx', 'params': [], 'targets': [1, 3]},

  {'name': 'rz', 'params': [-12.818051168284407], 'targets': [3]},

  {'name': 'cx', 'params': [], 'targets': [1, 3]},

  {'name': 'cx', 'params': [], 'targets': [1, 4]},

  {'name': 'rz', 'params': [-12.818051168284407], 'targets': [4]},

  {'name': 'cx', 'params': [], 'targets': [1, 4]},

  {'name': 'rz', 'params': [12.818051168284407], 'targets': [1]},

  {'name': 'cx', 'params': [], 'targets': [2, 3]},

  {'name': 'rz', 'params': [-12.818051168284407], 'targets': [3]},

  {'name': 'cx', 'params': [], 'targets': [2, 3]},

  {'name': 'cx', 'params': [], 'targets': [2, 4]},

  {'name': 'rz', 'params': [-12.818051168284407], 'targets': [4]},

  {'name': 'cx', 'params': [], 'targets': [2, 4]},

  {'name': 'rz', 'params': [12.818051168284407], 'targets': [2]},

  {'name': 'cx', 'params': [], 'targets': [3, 4]},

  {'name': 'rz', 'params': [-12.818051168284407], 'targets': [4]},

  {'name': 'cx', 'params': [], 'targets': [3, 4]},

  {'name': 'rz', 'params': [12.818051168284407], 'targets': [3]},

  {'name': 'rz', 'params': [12.818051168284407], 'targets': [4]},

  {'name': 'rx', 'params': [0.4581402395326511], 'targets': [0]},

  {'name': 'rx', 'params': [0.4581402395326511], 'targets': [1]},

  {'name': 'rx', 'params': [0.4581402395326511], 'targets': [2]},

  {'name': 'rx', 'params': [0.4581402395326511], 'targets': [3]},

  {'name': 'rx', 'params': [0.4581402395326511], 'targets': [4]}]}

このようにパラメータ付きで変分量子回路がJSON化できました。

© 2024, blueqat Inc. All rights reserved