mirror of
https://github.com/kalmarek/PropertyT.jl.git
synced 2024-12-25 02:15:29 +01:00
add dual version of the naive SOS problem
This commit is contained in:
parent
df8b177ef5
commit
c467a52f83
@ -42,15 +42,41 @@ end
|
|||||||
#
|
#
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
function SOS_problem(X::GroupRingElem, orderunit::GroupRingElem; upper_bound::Float64=Inf)
|
function SOS_problem_dual(elt::GroupRingElem, order_unit::GroupRingElem;
|
||||||
|
upper_bound::Float64=Inf)
|
||||||
|
@assert parent(elt) == parent(order_unit)
|
||||||
|
|
||||||
|
RG = parent(elt)
|
||||||
|
m = Model()
|
||||||
|
|
||||||
|
y = @variable(m, y[1:length(elt.coeffs)])
|
||||||
|
|
||||||
|
@constraint(m, λ_dual, dot(order_unit.coeffs, y) == 1)
|
||||||
|
@constraint(m, psd, [y[i] for i in RG.pm] in PSDCone())
|
||||||
|
|
||||||
|
if !isinf(upper_bound)
|
||||||
|
@variable(m, λ_ub_dual)
|
||||||
|
expr = dot(elt.coeffs, y) + upper_bound*λ_ub_dual
|
||||||
|
@objective m Min expr
|
||||||
|
else
|
||||||
|
@objective m Min dot(elt.coeffs, y)
|
||||||
|
end
|
||||||
|
|
||||||
|
return m
|
||||||
|
end
|
||||||
|
|
||||||
|
function SOS_problem_primal(X::GroupRingElem, orderunit::GroupRingElem;
|
||||||
|
upper_bound::Float64=Inf)
|
||||||
|
|
||||||
N = size(parent(X).pm, 1)
|
N = size(parent(X).pm, 1)
|
||||||
m = JuMP.Model();
|
m = JuMP.Model();
|
||||||
|
|
||||||
JuMP.@variable(m, P[1:N, 1:N])
|
JuMP.@variable(m, P[1:N, 1:N])
|
||||||
# SP = Symmetric(P)
|
# SP = Symmetric(P)
|
||||||
JuMP.@constraint(m, sdp, P in PSDCone())
|
JuMP.@constraint(m, sdp, P in PSDCone())
|
||||||
|
|
||||||
if iszero(aug(X)) && iszero(aug(orderunit))
|
if iszero(aug(X)) && iszero(aug(orderunit))
|
||||||
JuMP.@constraint(m, sum(P) == 0)
|
JuMP.@constraint(m, augmentation, sum(P) == 0)
|
||||||
end
|
end
|
||||||
|
|
||||||
if upper_bound < Inf
|
if upper_bound < Inf
|
||||||
@ -71,6 +97,8 @@ function SOS_problem(X::GroupRingElem, orderunit::GroupRingElem; upper_bound::Fl
|
|||||||
return m
|
return m
|
||||||
end
|
end
|
||||||
|
|
||||||
|
const SOS_problem = SOS_problem_primal
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
#
|
||||||
# Symmetrized SDP
|
# Symmetrized SDP
|
||||||
|
Loading…
Reference in New Issue
Block a user