JSONizing Quantum Circuits for Quantum Computers
Recently, I've had more and more opportunities to use quantum circuits in web UI. It seems that the new version 0.4.6 of blueqat has added the ability to convert quantum circuits into JSON, so I'd like to take a look.
First of all, let's make a normal circuit, let's say GHZ.
from blueqat import Circuit
a = Circuit().h[0].cx[0,1].cx[1,2]
a.m[:].run(shots=100)
Counter({'000': 47, '111': 53})
This is how we got the answers 000 and 111. Let's convert this directly into 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]}]}
It looks good. I'll try QAOA next.
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, 0, 0, 0, 0), 0.08285479666861541), ((0, 1, 0, 1, 0), 0.07087886886976061), ((1, 0, 0, 0, 1), 0.07087886886976061), ((0, 1, 0, 0, 1), 0.07087886886976061), ((0, 0, 1, 1, 0), 0.0708788688697606), ((1, 1, 0, 0, 0), 0.07087886886976058), ((0, 1, 1, 0, 0), 0.07087886886976058), ((1, 0, 1, 0, 0), 0.07087886886976057), ((0, 0, 1, 0, 1), 0.07087886886976055), ((1, 0, 0, 1, 0), 0.07087886886976053), ((0, 0, 0, 1, 1), 0.07087886886976053), ((1, 1, 1, 1, 1), 0.029673060877846758))
JSONize the quantum circuit of QAOA
Next, let's make the circuit of QAOA into JSON as well.
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': [-15.89041983321199], 'targets': [1]},
{'name': 'cx', 'params': [], 'targets': [0, 1]},
{'name': 'cx', 'params': [], 'targets': [0, 2]},
{'name': 'rz', 'params': [-15.89041983321199], 'targets': [2]},
{'name': 'cx', 'params': [], 'targets': [0, 2]},
{'name': 'cx', 'params': [], 'targets': [0, 3]},
{'name': 'rz', 'params': [-15.89041983321199], 'targets': [3]},
{'name': 'cx', 'params': [], 'targets': [0, 3]},
{'name': 'cx', 'params': [], 'targets': [0, 4]},
{'name': 'rz', 'params': [-15.89041983321199], 'targets': [4]},
{'name': 'cx', 'params': [], 'targets': [0, 4]},
{'name': 'rz', 'params': [15.89041983321199], 'targets': [0]},
{'name': 'cx', 'params': [], 'targets': [1, 2]},
{'name': 'rz', 'params': [-15.89041983321199], 'targets': [2]},
{'name': 'cx', 'params': [], 'targets': [1, 2]},
{'name': 'cx', 'params': [], 'targets': [1, 3]},
{'name': 'rz', 'params': [-15.89041983321199], 'targets': [3]},
{'name': 'cx', 'params': [], 'targets': [1, 3]},
{'name': 'cx', 'params': [], 'targets': [1, 4]},
{'name': 'rz', 'params': [-15.89041983321199], 'targets': [4]},
{'name': 'cx', 'params': [], 'targets': [1, 4]},
{'name': 'rz', 'params': [15.89041983321199], 'targets': [1]},
{'name': 'cx', 'params': [], 'targets': [2, 3]},
{'name': 'rz', 'params': [-15.89041983321199], 'targets': [3]},
{'name': 'cx', 'params': [], 'targets': [2, 3]},
{'name': 'cx', 'params': [], 'targets': [2, 4]},
{'name': 'rz', 'params': [-15.89041983321199], 'targets': [4]},
{'name': 'cx', 'params': [], 'targets': [2, 4]},
{'name': 'rz', 'params': [15.89041983321199], 'targets': [2]},
{'name': 'cx', 'params': [], 'targets': [3, 4]},
{'name': 'rz', 'params': [-15.89041983321199], 'targets': [4]},
{'name': 'cx', 'params': [], 'targets': [3, 4]},
{'name': 'rz', 'params': [15.89041983321199], 'targets': [3]},
{'name': 'rz', 'params': [15.89041983321199], 'targets': [4]},
{'name': 'rx', 'params': [5.011955775269625], 'targets': [0]},
{'name': 'rx', 'params': [5.011955775269625], 'targets': [1]},
{'name': 'rx', 'params': [5.011955775269625], 'targets': [2]},
{'name': 'rx', 'params': [5.011955775269625], 'targets': [3]},
{'name': 'rx', 'params': [5.011955775269625], 'targets': [4]},
{'name': 'cx', 'params': [], 'targets': [0, 1]},
{'name': 'rz', 'params': [-17.04304145585135], 'targets': [1]},
{'name': 'cx', 'params': [], 'targets': [0, 1]},
{'name': 'cx', 'params': [], 'targets': [0, 2]},
{'name': 'rz', 'params': [-17.04304145585135], 'targets': [2]},
{'name': 'cx', 'params': [], 'targets': [0, 2]},
{'name': 'cx', 'params': [], 'targets': [0, 3]},
{'name': 'rz', 'params': [-17.04304145585135], 'targets': [3]},
{'name': 'cx', 'params': [], 'targets': [0, 3]},
{'name': 'cx', 'params': [], 'targets': [0, 4]},
{'name': 'rz', 'params': [-17.04304145585135], 'targets': [4]},
{'name': 'cx', 'params': [], 'targets': [0, 4]},
{'name': 'rz', 'params': [17.04304145585135], 'targets': [0]},
{'name': 'cx', 'params': [], 'targets': [1, 2]},
{'name': 'rz', 'params': [-17.04304145585135], 'targets': [2]},
{'name': 'cx', 'params': [], 'targets': [1, 2]},
{'name': 'cx', 'params': [], 'targets': [1, 3]},
{'name': 'rz', 'params': [-17.04304145585135], 'targets': [3]},
{'name': 'cx', 'params': [], 'targets': [1, 3]},
{'name': 'cx', 'params': [], 'targets': [1, 4]},
{'name': 'rz', 'params': [-17.04304145585135], 'targets': [4]},
{'name': 'cx', 'params': [], 'targets': [1, 4]},
{'name': 'rz', 'params': [17.04304145585135], 'targets': [1]},
{'name': 'cx', 'params': [], 'targets': [2, 3]},
{'name': 'rz', 'params': [-17.04304145585135], 'targets': [3]},
{'name': 'cx', 'params': [], 'targets': [2, 3]},
{'name': 'cx', 'params': [], 'targets': [2, 4]},
{'name': 'rz', 'params': [-17.04304145585135], 'targets': [4]},
{'name': 'cx', 'params': [], 'targets': [2, 4]},
{'name': 'rz', 'params': [17.04304145585135], 'targets': [2]},
{'name': 'cx', 'params': [], 'targets': [3, 4]},
{'name': 'rz', 'params': [-17.04304145585135], 'targets': [4]},
{'name': 'cx', 'params': [], 'targets': [3, 4]},
{'name': 'rz', 'params': [17.04304145585135], 'targets': [3]},
{'name': 'rz', 'params': [17.04304145585135], 'targets': [4]},
{'name': 'rx', 'params': [0.2557628957745187], 'targets': [0]},
{'name': 'rx', 'params': [0.2557628957745187], 'targets': [1]},
{'name': 'rx', 'params': [0.2557628957745187], 'targets': [2]},
{'name': 'rx', 'params': [0.2557628957745187], 'targets': [3]},
{'name': 'rx', 'params': [0.2557628957745187], 'targets': [4]}]}
In this way, a variational quantum circuit with parameters could be JSONized.