Documentation | Digital Object Identifier |
---|---|
The package SpinGlassPEPS.jl
includes:
-
SpinGlassTensors.jl
- Package containing essential tools for creating and manipulating tensors that constitute the PEPS network, with support for both CPU and GPU utilization. It manages core operations on tensor networks, including contraction, using the boundary Matrix Product State approach. This package primarily functions as a backend, and users generally do not interact with it directly. -
SpinGlassNetworks.jl
- Package facilitating the generation of an Ising graph from a given instance using a set of standard inputs (e.g., instances compatible with the Ocean environment provided by D-Wave) and suports clustering to create effective Potts Hamiltonians. -
SpinGlassEngine.jl
- The main package, consisting of routines for executing the branch-and-bound method (with the ability to leverage the problem’s locality) for a given Potts instance. It also includes capabilities for reconstructing the low-energy spectrum from identified localized excitations and provides a tensor network constructor.
A breakdown of this example can be found in the documentation. To run provided examples, activate and instantiate Project.toml
file in "examples" folder.
using SpinGlassPEPS
function get_instance(topology::NTuple{3, Int})
m, n, t = topology
"$(@__DIR__)/instances/square_diagonal/$(m)x$(n)x$(t).txt"
end
function run_square_diag_bench(::Type{T}; topology::NTuple{3, Int}) where {T}
m, n, _ = topology
instance = get_instance(topology)
lattice = super_square_lattice(topology)
hamming_dist = 5
eng = 10
best_energies = T[]
potts_h = potts_hamiltonian(
ising_graph(instance),
spectrum = full_spectrum,
cluster_assignment_rule = lattice,
)
params = MpsParameters{T}(; bond_dim = 16, num_sweeps = 1)
search_params = SearchParameters(; max_states = 2^8, cut_off_prob = 1E-4)
for transform ∈ all_lattice_transformations
net = PEPSNetwork{KingSingleNode{GaugesEnergy}, Dense, T}(
m, n, potts_h, transform,
)
ctr = MpsContractor(SVDTruncate, net, params;
onGPU = false, beta = T(2), graduate_truncation = true,
)
single = SingleLayerDroplets(eng, hamming_dist, :hamming)
merge_strategy = merge_branches(
ctr; merge_type = :nofit, update_droplets = single,
)
sol, _ = low_energy_spectrum(ctr, search_params, merge_strategy)
push!(best_energies, sol.energies[1])
clear_memoize_cache()
end
ground = best_energies[1]
@assert all(ground .≈ best_energies)
println("Best energy found: $(ground)")
end
T = Float64
@time run_square_diag_bench(T; topology = (3, 3, 2))
Article describing this package and code.
@article{SpinGlassPEPS.jl,
author = {Tomasz \'{S}mierzchalski and Anna Maria Dziubyna and Konrad Ja\l{}owiecki and Zakaria
Mzaouali and {\L}ukasz Pawela and Bart\l{}omiej Gardas and Marek M. Rams},
title = {{SpinGlassPEPS.jl}: low-energy solutions for near-term quantum annealers},
journal = {},
year = {},
}
Article describing in detail used algorithms and containing extensive benchmarks.
@misc{SpinGlassPEPS,
author = {Anna Maria Dziubyna and Tomasz \'{S}mierzchalski and Bart\l{}omiej Gardas and Marek M. Rams and Masoud Mohseni},
title = {Limitations of tensor network approaches for optimization and sampling: A comparison against quantum and classical {Ising} machines},
year = {2024},
eprint={2411.16431},
archivePrefix={arXiv},
primaryClass={cond-mat.dis-nn},
doi = {10.48550/arXiv.2411.16431}
}
Those citations are also in CITATION.bib
.