use SOS_problem-style "interface" for Symmetrized version as well

This commit is contained in:
kalmarek 2018-08-20 03:59:39 +02:00
parent 9c674ec284
commit 9cdcf27215
1 changed files with 13 additions and 22 deletions

View File

@ -116,41 +116,32 @@ function addconstraints!(m::JuMP.Model, data::OrbitData, l::Int=length(data.lapl
println("") println("")
end end
function init_model(n, sizes) function init_model(m, sizes)
m = JuMP.Model(); P = Vector{Array{JuMP.Variable,2}}(length(sizes))
P = Vector{Array{JuMP.Variable,2}}(n)
for (k,s) in enumerate(sizes) for (k,s) in enumerate(sizes)
P[k] = JuMP.@variable(m, [i=1:s, j=1:s]) P[k] = JuMP.@variable(m, [i=1:s, j=1:s])
JuMP.@SDconstraint(m, P[k] >= 0.0) JuMP.@SDconstraint(m, P[k] >= 0.0)
end end
JuMP.@variable(m, λ >= 0.0) return P
JuMP.@objective(m, Max, λ)
return m, P
end end
function create_SDP_problem(sett::Settings) function SOS_problem(X::GroupRingElem, orderunit::GroupRingElem, data::OrbitData; upper_bound=Inf)
info("Loading orbit data....") m = JuMP.Model();
@time SDP_problem, orb_data = OrbitData(sett); P = init_model(m, size.(data.Uπs,2))
if sett.upper_bound < Inf λ = JuMP.@variable(m, λ)
λ = JuMP.getvariable(SDP_problem, ) if upper_bound < Inf
JuMP.@constraint(SDP_problem, λ <= sett.upper_bound) JuMP.@constraint(SDP_problem, λ <= upper_bound)
end end
t = length(orb_data.laplacian) info("Adding $(length(data.orbits)) constraints... ")
info("Adding $t constraints ... ")
@time addconstraints!(SDP_problem, orb_data)
return SDP_problem, orb_data @time addconstraints!(m, X, orderunit, λ, P, data)
end
function λandP(m::JuMP.Model, data::OrbitData, warmstart=true) JuMP.@objective(m, Max, λ)
varλ = m[] return m, λ, P
varP = data.Ps
λ, Ps = PropertyT.λandP(data.name, m, varλ, varP, warmstart)
return λ, Ps
end end
function λandP(m::JuMP.Model, data::OrbitData, sett::Settings) function λandP(m::JuMP.Model, data::OrbitData, sett::Settings)