Nobisuke
Dekisugi
RAG
Privacy policy
2021/08/06 13:40
1
最近量子回路をウェブのUIで利用する機会が増えてきました。 blueqatの新バージョン0.4.6で量子回路のJSON化できる機能が追加されたみたいなので見てみたいと思います。
まずは、普通に回路を作ってみます。GHZという回路を作ってみます。
Copy 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にしてみます。
Copy 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にしてみます。
Copy 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))
Copy 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