Skip to content

Commit c8e8830

Browse files
committed
Update VQE benchmark
1 parent 216e3bf commit c8e8830

File tree

6 files changed

+475
-1
lines changed

6 files changed

+475
-1
lines changed

perf/vqe/Circuit.jl

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
using Tangles
2+
using Networks
3+
using LinearAlgebra
4+
using YaoBlocks
5+
using DelegatorTraits
6+
import DelegatorTraits: DelegatorTrait
7+
8+
struct Circuit <: Tangles.AbstractTensorNetwork
9+
tn::Tangles.GenericTensorNetwork
10+
end
11+
12+
DelegatorTrait(::Networks.Network, ::Circuit) = DelegateToField{:tn}()
13+
DelegatorTrait(::Networks.Taggable, ::Circuit) = DelegateToField{:tn}()
14+
DelegatorTrait(::Tangles.TensorNetwork, ::Circuit) = DelegateToField{:tn}()
15+
DelegatorTrait(::Tangles.Pluggable, ::Circuit) = DelegateToField{:tn}()
16+
DelegatorTrait(::Tangles.Lattice, ::Circuit) = DelegateToField{:tn}()
17+
18+
Base.copy(circ::Circuit) = Circuit(copy(circ.tn))
19+
20+
function flatten_circuit(x)
21+
if any(i -> i isa ChainBlock, subblocks(x))
22+
flatten_circuit(YaoBlocks.Optimise.eliminate_nested(x))
23+
else
24+
x
25+
end
26+
end
27+
28+
"""
29+
Convert a Yao circuit to a Circuit.
30+
"""
31+
function Base.convert(::Type{Circuit}, yaocirc::AbstractBlock)
32+
tn = GenericTensorNetwork()
33+
circuit = Circuit(tn)
34+
35+
for gate in flatten_circuit(yaocirc)
36+
# if gate isa Swap
37+
# (a, b) = occupied_locs(gate)
38+
# wire[a], wire[b] = wire[b], wire[a]
39+
# continue
40+
# end
41+
42+
gatesites = CartesianSite.(occupied_locs(gate))
43+
gateinds = Index.([Plug.(gatesites)..., Plug.(gatesites; isdual=true)...])
44+
45+
# NOTE `YaoBlocks.mat` on m-site qubits still returns the operator on the full Hilbert space
46+
m = length(occupied_locs(gate))
47+
operator = if gate isa YaoBlocks.ControlBlock
48+
control((1:(m-1))..., m => content(gate))(m)
49+
else
50+
content(gate)
51+
end
52+
53+
array = reshape(collect(mat(operator)), fill(nlevel(operator), length(gateinds))...)
54+
55+
addtensor!(circuit, Tensor(array, gateinds))
56+
end
57+
58+
return circuit
59+
end
60+
61+
function Tangles.addtensor!(circuit::Circuit, tensor::Tensor)
62+
target_plugs = plugs(tensor)
63+
64+
for plug in filter(isdual, target_plugs) .|> adjoint
65+
if !hasplug(circuit, plug)
66+
input, out = Index(gensym(:tmp)), Index(gensym(:tmp))
67+
addtensor!(circuit.tn, Tensor([1 0; 0 1], [input, out]))
68+
setplug!(circuit, input, plug')
69+
setplug!(circuit, out, plug)
70+
end
71+
end
72+
73+
tensor = replace(tensor, [Index(plug"i'") => ind_at(circuit, plug"i") for i in unique(site.(plugs(tensor)))]...)
74+
# for all the normal plugs in the operator
75+
# new_ind = Index(gensym(:tmp)) # Index((; layer=..., site=...))
76+
new_inds = Dict(plug"i" => Index(gensym(:tmp)) for i in unique(site.(plugs(tensor))))
77+
tensor = replace(tensor, [Index(k) => v for (k, v) in new_inds]...)
78+
79+
addtensor!(circuit.tn, tensor)
80+
81+
for (plug, new_ind) in new_inds
82+
unsetplug!(circuit, plug)
83+
setplug!(circuit, new_ind, plug)
84+
end
85+
86+
return circuit
87+
end
88+
89+
"""
90+
Create an observable type Circuit.
91+
"""
92+
function create_observable(N)
93+
observable = chain(N, [put(i => Z) for i in 1:N]...) # Observable to measure: Z gate on each qubit
94+
95+
# convert observable to circuit
96+
observable = convert(Circuit, observable)
97+
for tensor in tensors(observable)
98+
replace!(observable, tensor => Tensor(real(collect(parent(tensor))), inds(tensor)))
99+
end
100+
return observable
101+
end

perf/vqe/Project.toml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,19 @@
11
[deps]
2+
Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"
3+
BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf"
4+
CliqueTrees = "60701a23-6482-424a-84db-faee86b9b1f8"
5+
DelegatorTraits = "d83dbd90-3e00-4b33-84f1-398adcf3b35e"
26
EinExprs = "b1794770-133b-4de1-afb4-526377e9f4c5"
37
Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9"
8+
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
9+
Metis = "2679e427-3c69-5b7f-982b-ece356f1e94b"
10+
Networks = "634dcf3f-6aa7-47ba-9e85-1fb329c9ebfe"
11+
PrettyTables = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d"
412
Reactant = "3c362404-f566-11ee-1572-e11a4b42c853"
13+
Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
14+
Tangles = "d2150e0e-da4c-4196-bcf0-8e0aeaf6db16"
515
Tenet = "85d41934-b9cd-44e1-8730-56d86f15f3ec"
16+
Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d"
617
YaoBlocks = "418bc28f-b43b-5e0b-a6e7-61bbc1a2c1df"
718

819
[compat]

perf/vqe/README.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
# Variational Quantum Eigensolver (VQE)
22

3+
A simple VQE training through exact tensor network contraction and backpropagation.
4+
Because it uses exact tensor network contraction, it cannot scale to large number of layers but it should be able to scale to mid-range number of qubits (around 50) and shallow circuits.
5+
6+
It uses a [Efficient SU(2)](https://) circuit ansatz for the VQE.
7+
38
## Setup
49

5-
Tenet.jl is not registered in the General registry of packages.
10+
Tenet.jl and Tangles.jl are not registered in the General registry of packages.
11+
You need to add the Quantic registry of packages for Julia to find them:
612

713
````julia
814
]registry add https://github.com/bsc-quantic/Registry.git

perf/vqe/hamiltonian-terms-n20.txt

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
-20.02329899902102 [X0 Y1 X8 Z9 Z10 Z11 Z12 Z13 Z14 Y15]
2+
0.10767345306547756 []
3+
8.80734867719193e-5 [X0 Y1 X2 Y3]
4+
-0.00031909186414867024 [X0 Y1 Y12 Z13 Z14 Z15 Z16 Z17 Z18 X19]
5+
0.0004996872413672634 [X0 Y1 Y5 Z6 Z7 Z8 Z9 Z10 Z11 X12]
6+
0.016657629396396256 [X0 X1 X8 Z9 Z10 Z11 Z12 Z13 Z14 X15]
7+
-2.509112878277348e-5 [X0 X1 Y5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Y18]
8+
-7.526057730086852e-5 [X0 Y1 X3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Y12]
9+
0.00016804175381690398 [X0 Z1 X2 X5 Z6 Z7 Z8 Z9 Z10 X11]
10+
-3.2989480400377e-5 [X0 X1 Y8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Y17]
11+
-4.2292656360584896e-5 [X0 Z1 X2 Y7 Z8 Y9]
12+
0.00019801033544939237 [X0 Z1 X2 X7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 X17]
13+
0.00012335352619074634 [X0 Y1 Y15 X16]
14+
-0.00031653544691587204 [X0 X1 Y14 Y15]
15+
0.0004572073593218358 [X0 Y1 Y3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 X12]
16+
0.02768448501770293 [X0 X1 Y9 Z10 Z11 Z12 Z13 Y14]
17+
-0.0009252706068446522 [X0 Y1 X6 Y7]
18+
0.0049072637209679314 [X0 Y1 X13 Z14 Z15 Z16 Z17 Y18]
19+
0.12811100236340767 [X0 X1 X6 X7]
20+
-0.0010270313650730257 [X0 X1 X14 X15]
21+
0.0027427495558326985 [X0 Y1 Y16 X17]
22+
-0.0013614634317282404 [X0 X1 Y6 Y7]
23+
0.0010176818550736016 [X0 Z1 X2 X7 Z8 X9]
24+
-0.0003828743465888113 [X0 X1 Y12 Y13]
25+
0.0032512111489067467 [X0 X1 Y18 Y19]
26+
0.08411434541978045 [X0 X1 Y14 Z15 Z16 Y17]
27+
0.05855039299635987 [X0 Z1 X2 Y4 Z5 Z6 Z7 Z8 Z9 Y10]
28+
0.09095271633361096 [X0 X1 X4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Z18 X19]
29+
-0.001343764804653726 [X0 Z1 X2 Y7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Y17]
30+
-0.001784854131285513 [X0 Y1 Y4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Z18 X19]
31+
0.06648285866273813 [X0 X1 X2 Z3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 X13]
32+
-0.002471090646759579 [X0 X1 Y3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Y18]
33+
-0.002646396087864506 [X0 X1 X4 X5]
34+
-0.0006516063459811195 [X0 Y1 Y8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 X17]
35+
-0.0007257668661868602 [X0 Z1 X2 Y6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Y16]
36+
-0.00022707152770222623 [X0 Y1 Y14 X15]
37+
-0.0012325380495824597 [X0 Y1 Y2 Z3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 X13]
38+
0.06331251922594161 [X0 Z1 X2 Y6 Z7 Y8]
39+
0.028867052831104578 [X0 X1 Y2 Z3 Z4 Y5]
40+
0.06542879037731869 [X0 X1 X8 X9]
41+
-0.00014533380020575353 [X0 X1 Y13 Z14 Z15 Z16 Z17 Y18]
42+
0.07232772561954542 [X0 X1 X14 Z15 Z16 X17]
43+
-1.4357805341064722e-5 [X0 X1 X10 X11]
44+
-0.00013807133519685261 [X0 Y1 X9 Z10 Z11 Z12 Z13 Z14 Z15 Y16]
45+
-0.0005050059022825259 [X0 X1 X2 Z3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Z18 X19]
46+
0.06137357140003864 [X0 X1 Y4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Y13]
47+
0.0034881204936011937 [X0 Y1 Y4 X5]
48+
0.029955230601382776 [X0 Y1 X14 Z15 Z16 Y17]
49+
0.014847441760803421 [X0 Y1 X3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Y18]
50+
0.002125311725514915 [X0 Z1 X2 X3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 X11]
51+
0.001564691392240837 [X0 Y1 X15 Y16]
52+
0.019178836293542154 [X0 Y1 Y4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 X13]
53+
0.02542595818030917 [X0 Z1 X2 X6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 X16]
54+
0.010018665280409095 [X0 X1 Y16 Y17]
55+
0.05703094103843582 [X0 Z1 X2 X6 Z7 X8]
56+
0.022700074315972207 [X0 X1 Y10 Y11]
57+
2.7688129380049205e-5 [X0 Y1 Y6 X7]
58+
-9.886346204475988e-5 [X0 X1 Y4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Z18 Y19]
59+
0.00039034474838729196 [X0 X1 Y3 Y4]
60+
-0.0277167485222872 [X0 X1 Y2 Z3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Z18 Y19]
61+
6.242787825755139e-6 [X0 X1 X18 X19]
62+
0.0002855444044645041 [X0 Y1 Y2 Z3 Z4 X5]
63+
-0.0001040459934573164 [X0 X1 Y12 Z13 Z14 Z15 Z16 Z17 Z18 Y19]
64+
-9.000790603273486e-5 [X0 Y1 X4 Y5]
65+
0.00022974417125316116 [X0 X1 X13 Z14 Z15 Z16 Z17 X18]
66+
-0.00014812821038365177 [X0 X1 Y8 Z9 Z10 Z11 Z12 Z13 Z14 Y15]
67+
-2.0221779377688277e-5 [X0 Y1 X12 Z13 Z14 Z15 Z16 Z17 Z18 Y19]
68+
-5.1452044053781085e-5 [X0 Y1 X2 Z3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Y13]
69+
7.86548453763452e-5 [X0 X1 X2 Z3 Z4 X5]
70+
0.13540765122361054 [X0 Z1 X2 X10 Z11 X12]
71+
-0.001179016832287718 [X0 Y1 Y8 X9]
72+
0.007367320617259539 [X0 X1 X12 Z13 Z14 Z15 Z16 Z17 Z18 X19]
73+
-0.07350243538294754 [X0 X1 X9 Z10 Z11 Z12 Z13 X14]
74+
0.0012763873888146974 [X0 X1 Y4 Y5]
75+
-0.0024253471132371623 [X0 X1 Y9 Z10 Z11 Z12 Z13 Z14 Z15 Y16]
76+
0.0004825269432643367 [X0 Y1 Y9 Z10 Z11 Z12 Z13 Z14 Z15 X16]
77+
-0.003339862159534003 [X0 Y1 X2 Z3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Z18 Y19]
78+
-6.280756169407885e-5 [X0 X1 X3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 X12]
79+
0.008304253322401048 [X0 Y1 X4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Y13]
80+
0.04417469435125109 [X0 Y1 Y9 Z10 Z11 Z12 Z13 X14]
81+
-0.04542961161142746 [X0 Y1 Y8 Z9 Z10 Z11 Z12 Z13 Z14 X15]
82+
0.00889488443332749 [X0 X1 X12 X13]
83+
-0.0021101166617534307 [X0 Y1 Y12 X13]
84+
-0.0016956381013258253 [X0 Z1 X2 X6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 X14]
85+
-0.0654742474046646 [X0 Y1 Y13 Z14 Z15 Z16 Z17 X18]
86+
0.0031562305123940793 [X0 Z1 X2 Y7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Y15]
87+
0.00187745121935422 [X0 Y1 X4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Z18 Y19]
88+
0.0002771421459178943 [X0 X1 Y2 Y3]
89+
0.0007977013979872697 [X0 Y1 Y14 Z15 Z16 X17]
90+
-0.0009970033920598462 [X0 Y1 X8 Y9]
91+
-0.001556263334000379 [X0 Z1 X2 X4 Z5 Z6 Z7 Z8 Z9 X10]
92+
0.08169718548652216 [X0 Y1 Y18 X19]
93+
-0.0602534590081775 [X0 X1 Y5 Z6 Z7 Z8 Z9 Z10 Z11 Y12]
94+
0.05894421697511449 [X0 Y1 X16 Y17]
95+
-0.00010671533930654679 [X0 Y1 X18 Y19]
96+
-0.09636936857412182 [X0 Y1 Y10 X11]
97+
0.0003218263773590805 [X0 X1 X5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 X18]
98+
0.0001883154879879538 [X0 X1 X8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 X17]
99+
-0.0002071683425504752 [X0 X1 X16 X17]
100+
0.008552681875402257 [X0 Y1 X2 Z3 Z4 Y5]
101+
0.010430073279025544 [X0 X1 X9 Z10 Z11 Z12 Z13 Z14 Z15 X16]
102+
-0.005621787748994994 [X0 X1 X15 X16]
103+
-0.014632424919220887 [X0 Y1 X5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Y18]
104+
-0.003438351538167895 [X0 Z1 X2 X7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 X15]
105+
0.0015260649862089606 [X0 X1 X2 X3]
106+
0.036188529251918955 [X0 Z1 X2 Y3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Y11]
107+
-0.10295717032794717 [X0 X1 Y3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Y12]
108+
0.01258641195127333 [X0 X1 X5 Z6 Z7 Z8 Z9 Z10 Z11 X12]
109+
-0.07944403824155766 [X0 Z1 X2 Y6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Y14]
110+
5.092602816399091e-5 [X0 Y1 X14 Y15]
111+
5.524983047072962e-5 [X0 Y1 Y3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 X18]
112+
9.072130446166333e-5 [X0 X1 Y8 Y9]
113+
-3.958328345307478e-5 [X0 Y1 X10 Y11]
114+
-9.92325667558302e-7 [X0 X1 X3 X4]
115+
-3.716513732689877e-7 [X0 Y1 Y2 Z3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 Z18 X19]
116+
9.169893538395603e-6 [X0 X1 X3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 X18]
117+
-5.356347396773038e-6 [X0 X1 X4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 X13]
118+
2.0502317101097673e-6 [X0 Y1 X5 Z6 Z7 Z8 Z9 Z10 Z11 Y12]
119+
-0.0023500087935177803 [X0 X1 Y15 Y16]
120+
3.755602289555965e-5 [X0 Y1 X3 Y4]
121+
-4.860586735184505e-5 [X0 X1 Y2 Z3 Z4 Z5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Y13]
122+
-0.0012573532197818287 [X0 Y1 Y5 Z6 Z7 Z8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Z17 X18]
123+
9.063813115828972e-6 [X0 Y1 X8 Z9 Z10 Z11 Z12 Z13 Z14 Z15 Z16 Y17]
124+
-2.6142212088227807e-5 [X0 Y1 Y3 X4]
125+
-0.0011022929384773205 [X0 Y1 Y2 X3]
126+
1.6494258663913302e-5 [X0 Y1 X9 Z10 Z11 Z12 Z13 Y14]
127+
-9.597455750374637e-6 [X0 Y1 X12 Y13]
128+
0.00015234277868995082 [X0 Z1 X2 Y5 Z6 Z7 Z8 Z9 Z10 Y11]

0 commit comments

Comments
 (0)