diverge methods at the level of computeλandP

This commit is contained in:
kalmarek 2018-09-16 18:19:04 +02:00
parent 0ccc782d2f
commit 6b886d35b9
1 changed files with 21 additions and 33 deletions

View File

@ -68,23 +68,23 @@ end
# #
############################################################################### ###############################################################################
function computeλandP(sett::Settings{Naive}, function computeλandP(sett::Settings{Naive}, Δ::GroupRingElem;
Δ::GroupRingElem, ws=nothing; solverlog=tempname()*".log") solverlog=tempname()*".log")
info("Creating SDP problem...") info("Creating SDP problem...")
SDP_problem, varλ, varP = SOS_problem(Δ^2, Δ, upper_bound=sett.upper_bound) SDP_problem, varλ, varP = SOS_problem(Δ^2, Δ, upper_bound=sett.upper_bound)
JuMP.setsolver(SDP_problem, sett.solver) JuMP.setsolver(SDP_problem, sett.solver)
info(Base.repr(SDP_problem)) info(Base.repr(SDP_problem))
ws = warmstart(sett)
@time λ, P, ws = PropertyT.solve(solverlog, SDP_problem, varλ, varP, ws) @time λ, P, ws = PropertyT.solve(solverlog, SDP_problem, varλ, varP, ws)
save(filename(sett, :warmstart), "warmstart", ws)
return λ, P, ws return λ, P
end end
function computeλandP(sett::Settings{Symmetrize}, function computeλandP(sett::Settings{Symmetrize}, Δ::GroupRingElem;
Δ::GroupRingElem, ws=nothing; solverlog=tempname()*".log") solverlog=tempname()*".log")
pdir = prepath(sett)
files_exist = exists(filename(pdir,:Uπs)) && exists(filename(pdir,:orbits)) && exists(filename(pdir,:preps))
if isfile(filename(sett, :OrbitData)) if isfile(filename(sett, :OrbitData))
orbit_data = load(filename(sett, :OrbitData), "OrbitData") orbit_data = load(filename(sett, :OrbitData), "OrbitData")
@ -101,33 +101,21 @@ function computeλandP(sett::Settings{Symmetrize},
JuMP.setsolver(SDP_problem, sett.solver) JuMP.setsolver(SDP_problem, sett.solver)
info(Base.repr(SDP_problem)) info(Base.repr(SDP_problem))
@time λ, P, ws = PropertyT.solve(solverlog, SDP_problem, varλ, varP, ws) ws = warmstart(sett)
@time λ, Ps, ws = PropertyT.solve(solverlog, SDP_problem, varλ, varP, ws)
fname = filename(fullpath(sett), :P) save(filename(sett, :warmstart), "warmstart", ws, "Ps", Ps, "λ", λ)
save(joinpath(dirname(fname), "orig_"*basename(fname)), "origP", P)
info("Reconstructing P...") info("Reconstructing P...")
@time recP = reconstruct(P, orbit_data) @time P = reconstruct(Ps, orbit_data)
return λ, recP, ws
end
function saveλandP(name, λ, P, ws)
save(filename(name, ), "λ", λ)
save(filename(name, :P), "P", P)
save(filename(name, :warm), "warmstart", ws)
end
function loadλandP(name::String)
λ_fname = filename(name, )
P_fname = filename(name, :P)
if exists(λ_fname) && exists(P_fname)
info("Loading precomputed λ, P...")
λ = load(λ_fname, "λ")
P = load(P_fname, "P")
else
throw("You need to precompute $λ_fname and $P_fname to load it!")
end
return λ, P return λ, P
end end
function warmstart(sett::Settings)
if sett.warmstart && isfile(filename(sett, :warmstart))
ws = load(filename(sett, :warmstart), "warmstart")
else
ws = nothing
end
return ws
end