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.Optimizer
Clarabel.MOIwrapper.Optimizer

We 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.8031077005710117

We can see that the moment matrix uses all monomials:

ν.basis.monomials
7-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.8031077007260203

But 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.8705831380256306

But 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.152440484668909

We can see that the moment matrix uses all monomials:

ν.basis.monomials
13-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.152440492472815

But 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.465903547590753

But 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.