From aeb74f71f15505b1cfb84027554634adfe286cd5 Mon Sep 17 00:00:00 2001 From: kalmarek Date: Wed, 3 Apr 2019 14:08:43 +0200 Subject: [PATCH] add check_SpNs.jl --- bin/check_SpNs.jl | 91 +++++++++++++++++++++++++++++++++++++++++++++++ src/1712.07167.jl | 0 2 files changed, 91 insertions(+) create mode 100644 bin/check_SpNs.jl create mode 100644 src/1712.07167.jl diff --git a/bin/check_SpNs.jl b/bin/check_SpNs.jl new file mode 100644 index 0000000..7d4f1a5 --- /dev/null +++ b/bin/check_SpNs.jl @@ -0,0 +1,91 @@ +using Pkg +Pkg.activate(".") +using Test + +using PropertyT +using Nemo + +using PropertyT.LinearAlgebra +using PropertyT.SparseArrays +using PropertyT.JuMP + +using PropertyT.AbstractAlgebra +using PropertyT.Groups +using PropertyT.GroupRings + +using PropertyT.JLD + + +# include("../1712.07167/Roots.jl") +include(joinpath("..", "src", "SpNs.jl")) + +using .SpNs +using .SpNs.Roots + +BLAS.set_num_threads(Threads.nthreads()) +ENV["OMP_NUM_THREADS"] = Threads.nthreads() + +const N = 2 +const RADIUS = 3 +const UPPER_BOUND = 0.801 + +root_system = SpNs.gens_roots(N) +S = [g.matrix for g in root_system] +G = parent(S[1]) +autS = WreathProduct(PermGroup(2), PermGroup(N)) + +using SCS +with_SCS = with_optimizer(SCS.Optimizer, linear_solver=SCS.Direct, max_iters=400000, eps=1e-11, alpha=1.95, acceleration_lookback=1, warm_start=true) + +sett = PropertyT.Settings("Sp($(2N),Z)_r$RADIUS", G, S, autS, with_SCS; + radius=RADIUS, upper_bound=UPPER_BOUND, warmstart=true) + +PropertyT.print_summary(sett) + +fp = PropertyT.fullpath(sett) +isdir(fp) || mkpath(fp) + +Δ = PropertyT.Laplacian(S, RADIUS) +RG = parent(Δ) +Δs = SpNs.laplacians(RG, root_system) + +Sq = sum( Δα^2 for (α, Δα) in Δs ); +# Op = sum( Δα * sum(Δβ for (β, Δβ) in Δs if isorthogonal(α, β)) for (α, Δα) in Δs ); +Adj = sum( Δα * sum(Δβ for (β, Δβ) in Δs if !isproportional(α, β)) for (α, Δα) in Δs ); + +const elt = Adj + +solver_logfile(sett) = joinpath(PropertyT.fullpath(sett), "Adj_solver_$(PropertyT.Dates.now()).log") + +λ, P = PropertyT.approximate_by_SOS(sett, elt, Δ, + solverlog=solver_logfile(sett)) + +# save(PropertyT.filename(sett, :solution), "λ", λ, "P", P) +# λ < 0 && @warn "Solver did not produce a valid solution!" + +# Q = real(sqrt(P)); +# certified_λ = PropertyT.certify_SOS_decomposition(elt, Δ, λ, Q, R=RADIUS) + +# @info "The obtained SOS can be use to certify λ ≥" certified_λ + + + + +# +# od = PropertyT.OrbitData(RG, WreathProduct(PermGroup(2), PermGroup(N))) +# orbit_data = PropertyT.decimate(od); +# +# using SCS +# using JuMP +# warmstart = nothing +# +# UB = 0.88 # for elt = Δ²; +# SDP_problem, varP = PropertyT.SOS_problem(elt, Δ, orbit_data, upper_bound=UB); +# # SDP_problem, varP = PropertyT.SOS_problem(elt, Δ, orbit_data); +# +# sett = PropertyT.Settings("Sp($(2N),Z)", G, S, autS, solver(2000, accel=20); +# upper_bound=1.3, warmstart=false) +# +# with_SCS = with_optimizer(SCS.Optimizer, linear_solver=SCS.Direct, max_iters=100000, eps=1e-12, alpha=1.95, acceleration_lookback=1, warm_start=true) +# +# status, warmstart = PropertyT.solve(SDP_problem, with_SCS, warmstart) diff --git a/src/1712.07167.jl b/src/1712.07167.jl new file mode 100644 index 0000000..e69de29