-
Notifications
You must be signed in to change notification settings - Fork 9
Open
Labels
Description
This is a copy of this issue.
original
optimizer = TreeSA(ntrials=10, niters=20, sc_target=52)
time_elapsed = @elapsed net = yao2einsum(c; initial_state=Dict(zip(1:nqubits(c), zeros(Int,nqubits(c)))), final_state=Dict(zip(1:nqubits(c), zeros(Int,nqubits(c)))), optimizer)
@info "contraction complexity: $(contraction_complexity(net)), time cost: $(time_elapsed)s"The output is
┌ Info: contraction complexity: Time complexity: 2^67.01176482416963
│ Space complexity: 2^52.0
└ Read-write complexity: 2^58.43881862537142, time cost: 52.74190275simproved
using AbstractTrees, CliqueTrees, Graphs, OMEinsumContractionOrders, OMEinsum
struct TestAlg{A} <: CliqueTrees.EliminationAlgorithm
alg::A
end
function eincode2order(code::NestedEinsum{L}) where {L}
elimination_order = Vector{L}()
OMEinsum.isleaf(code) && return elimination_order
for node in PostOrderDFS(code)
(node isa OMEinsum.LeafString) && continue
for id in setdiff(vcat(getixsv(node.eins)...), getiyv(node.eins))
push!(elimination_order, id)
end
end
return elimination_order
end
function CliqueTrees.permutation(weights::AbstractVector, graph, alg::TestAlg)
# reduce graph
kernel, stack, label, width = CliqueTrees.pr4(graph, lowerbound(graph))
# feed reduced graph back to OMEinsumContractionOrders
code = EinCode(maximal_cliques(kernel), Int[])
sizes = Dict{Int, Int}(v => round(Int, 2^weights[label[v]]) for v in vertices(kernel))
opt = optimize_code(code, sizes, alg.alg).eins
# compute ordering
append!(stack, label[eincode2order(opt)])
return stack, invperm(stack)
end
optimizer = Treewidth(; alg=TestAlg(TreeSA(ntrials=10, niters=20, sc_target=52)))
time_elapsed = @elapsed net = yao2einsum(c; initial_state=Dict(zip(1:nqubits(c), zeros(Int,nqubits(c)))), final_state=Dict(zip(1:nqubits(c), zeros(Int,nqubits(c)))), optimizer)
@info "contraction complexity: $(contraction_complexity(net)), time cost: $(time_elapsed)s"The output is
┌ Info: contraction complexity: Time complexity: 2^60.20080142774071
│ Space complexity: 2^52.0
└ Read-write complexity: 2^58.2827569012071, time cost: 27.224232333s