Ising spin glass model
1D
We study the Hamiltonian of the transverse-field Ising spin glass model without periodic boundary conditions and transverse field g set to 0.4.
import Random
using CondensedMatterSOS
@spin σ[1:2]
function hamiltonian(σ)
Random.seed!(1) # We set the seed so that the results of this example are reproducible.
return ising_glass_hamiltonian(σ, 0.4, false)
end
hamiltonian(σ)\[ (-0.4 + 0.0im)σᶻ_{2} + (-0.4 + 0.0im)σᶻ_{1} + (-0.07058313895389791 - 0.0im)σˣ_{1}σˣ_{2} \]
Let's pick a solver from this list.
import Clarabel
solver = Clarabel.OptimizerClarabel.MOIwrapper.OptimizerWe can compute a lower bound -0.8031 to the ground state energy as follow:
function hamiltonian_energy(N, maxdegree, solver; kws...)
@spin σ[1:N]
H = hamiltonian(σ)
energy(H, maxdegree, solver; kws...)
end
bound, gram, ν = hamiltonian_energy(2, 2, solver, sparsity = NoSparsity())
bound-0.8031077005710117We can see that the moment matrix uses all monomials:
ν.basis.monomials7-element Vector{CondensedMatterSOS.SpinMonomial}:
1
σᶻ₂
σʸ₂
σˣ₂
σᶻ₁
σʸ₁
σˣ₁Using term sparsity with block/cluster completion, we get the same bound:
bound, gram, ν = hamiltonian_energy(2, 2, solver)
bound-0.8031077007260203But with a smaller basis:
[M.basis.monomials for M in ν.blocks]2-element Vector{Vector{CondensedMatterSOS.SpinMonomial}}:
[1, σᶻ₂, σᶻ₁]
[σʸ₂, σˣ₂, σʸ₁, σˣ₁]Using term sparsity with chordal completion, we get a smaller bound:
bound, gram, ν = hamiltonian_energy(2, 2, solver, sparsity = MonomialSparsity(ChordalCompletion()))
bound-0.8705831380256306But with an even smaller basis:
[M.basis.monomials for M in ν.blocks]5-element Vector{Vector{CondensedMatterSOS.SpinMonomial}}:
[σʸ₁, σˣ₁]
[σˣ₂, σˣ₁]
[σʸ₂, σˣ₂]
[1, σᶻ₁]
[1, σᶻ₂]2D
We now study the same model but on a square lattice.
@spin σ[1:2, 1:2]
hamiltonian(σ)\[ (-0.4 + 0.0im)σᶻ_{2,2} + (-0.4 + 0.0im)σᶻ_{1,2} + (-0.4 + 0.0im)σᶻ_{2,1} + (-0.4 + 0.0im)σᶻ_{1,1} + (0.5314767537831963 + 0.0im)σˣ_{1,2}σˣ_{2,2} + (2.456991333983293 + 0.0im)σˣ_{2,1}σˣ_{2,2} + (-0.806852326006714 - 0.0im)σˣ_{1,1}σˣ_{1,2} + (-0.07058313895389791 - 0.0im)σˣ_{1,1}σˣ_{2,1} \]
We can compute a lower bound -4.15244 to the ground state energy as follow:
function hamiltonian_energy(N, M, maxdegree, solver; kws...)
@spin σ[1:N, 1:M]
H = hamiltonian(σ)
energy(H, maxdegree, solver; kws...)
end
bound, gram, ν = hamiltonian_energy(2, 2, 2, solver, sparsity = NoSparsity())
bound-4.152440484668909We can see that the moment matrix uses all monomials:
ν.basis.monomials13-element Vector{CondensedMatterSOS.SpinMonomial}:
1
σᶻ₂₋₂
σʸ₂₋₂
σˣ₂₋₂
σᶻ₁₋₂
σʸ₁₋₂
σˣ₁₋₂
σᶻ₂₋₁
σʸ₂₋₁
σˣ₂₋₁
σᶻ₁₋₁
σʸ₁₋₁
σˣ₁₋₁Using term sparsity with block/cluster completion, we get the same bound:
bound, gram, ν = hamiltonian_energy(2, 2, 2, solver)
bound-4.152440492472815But with a smaller basis:
[M.basis.monomials for M in ν.blocks]2-element Vector{Vector{CondensedMatterSOS.SpinMonomial}}:
[1, σᶻ₂₋₂, σᶻ₁₋₂, σᶻ₂₋₁, σᶻ₁₋₁]
[σʸ₂₋₂, σˣ₂₋₂, σʸ₁₋₂, σˣ₁₋₂, σʸ₂₋₁, σˣ₂₋₁, σʸ₁₋₁, σˣ₁₋₁]Using term sparsity with chordal completion, we get a smaller bound:
bound, gram, ν = hamiltonian_energy(2, 2, 2, solver, sparsity = MonomialSparsity(ChordalCompletion()))
bound-5.465903547590753But with an even smaller basis:
[M.basis.monomials for M in ν.blocks]9-element Vector{Vector{CondensedMatterSOS.SpinMonomial}}:
[σˣ₁₋₂, σˣ₂₋₁, σˣ₁₋₁]
[1, σᶻ₂₋₁, σᶻ₁₋₁]
[σˣ₂₋₂, σˣ₁₋₂, σˣ₂₋₁]
[σʸ₁₋₁, σˣ₁₋₁]
[σʸ₂₋₁, σˣ₂₋₁]
[σʸ₁₋₂, σˣ₁₋₂]
[1, σᶻ₁₋₂]
[σʸ₂₋₂, σˣ₂₋₂]
[1, σᶻ₂₋₂]This page was generated using Literate.jl.