Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "ProxSDP"
uuid = "65e78d25-6039-50a4-9445-38022e3d2eb3"
repo = "https://github.com/mariohsouto/ProxSDP.jl.git"
version = "1.7.0"
version = "1.8.0"

[deps]
Arpack = "7d9fca2a-8960-54d3-9f78-7d1dccf2cb97"
Expand All @@ -15,10 +15,10 @@ SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"

[compat]
julia = "1"
julia = "1.6"
Arpack = "0.3.2, 0.5.1"
KrylovKit = "0.5.2"
MathOptInterface = "0.10.6"
MathOptInterface = "1"
TimerOutputs = "0.5.0"

[extras]
Expand Down
4 changes: 3 additions & 1 deletion src/MOI_wrapper.jl
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ end

MOI.get(::Optimizer, ::MOI.SolverName) = "ProxSDP"

MOI.get(::Optimizer, ::MOI.SolverVersion) = "1.7.0"
MOI.get(::Optimizer, ::MOI.SolverVersion) = "1.8.0"

function MOI.set(optimizer::Optimizer, param::MOI.RawOptimizerAttribute, value)
fields = fieldnames(Options)
Expand Down Expand Up @@ -353,6 +353,8 @@ function MOI.optimize!(dest::Optimizer, src::MOI.ModelLike)
return index_map, false
end

MOI.supports_incremental_interface(::Optimizer) = false

#=
Attributes
=#
Expand Down
4 changes: 2 additions & 2 deletions src/pdhg.jl
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,7 @@ function chambolle_pock(
end

# max_iter or time limit stop condition
if p.iter >= opt.max_iter_local || time() - p.time0 > opt.time_limit
if p.iter >= opt.max_iter_local || time() - p.time0 >= opt.time_limit
if p.iter > opt.min_iter_time_infeas &&
max_abs_diff(residuals.dual_gap) < opt.infeas_stable_gap_tol &&
residuals.dual_gap[k] > opt.infeas_limit_gap_tol # low gap but far from zero, say 10%
Expand Down Expand Up @@ -376,7 +376,7 @@ function chambolle_pock(
println(" WARNING: Time limit hit.")
end
end
if p.iter >= opt.max_iter_local || time() - p.time0 > opt.time_limit
if p.iter >= opt.max_iter_local || time() - p.time0 >= opt.time_limit
break
end
end
Expand Down
58 changes: 33 additions & 25 deletions test/moi_proxsdp_unit.jl
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
function simple_lp(optimizer)
function simple_lp(bridged)

bridged = MOIB.full_bridge_optimizer(optimizer, Float64)
MOI.empty!(bridged)
@test MOI.is_empty(bridged)

Expand Down Expand Up @@ -49,9 +48,8 @@ function simple_lp(optimizer)

end

function simple_lp_2_1d_sdp(optimizer)
function simple_lp_2_1d_sdp(bridged)

bridged = MOIB.full_bridge_optimizer(optimizer, Float64)
MOI.empty!(bridged)
@test MOI.is_empty(bridged)

Expand Down Expand Up @@ -96,9 +94,8 @@ function simple_lp_2_1d_sdp(optimizer)

end

function lp_in_SDP_equality_form(optimizer)
function lp_in_SDP_equality_form(bridged)

bridged = MOIB.full_bridge_optimizer(optimizer, Float64)
MOI.empty!(bridged)
@test MOI.is_empty(bridged)

Expand Down Expand Up @@ -275,17 +272,6 @@ end

function double_sdp_with_duplicates(optimizer)

cache = MOIU.UniversalFallback(MOIU.Model{Float64}());
optimizer0 = ProxSDP.Optimizer(
log_verbose = true,
log_freq = 10,
check_dual_feas = true,
check_dual_feas_freq = 10,
)
MOI.empty!(cache);
optimizer1 = MOIU.CachingOptimizer(cache, optimizer0);
optimizer = MOIB.full_bridge_optimizer(optimizer1, Float64);

MOI.empty!(optimizer)

x = MOI.add_variable(optimizer)
Expand Down Expand Up @@ -352,11 +338,33 @@ function sdp_wiki(optimizer)
end


simple_lp(optimizer)
simple_lp_2_1d_sdp(optimizer)
lp_in_SDP_equality_form(optimizer)
lp_in_SDP_inequality_form(optimizer)
sdp_from_moi(optimizer)
double_sdp_from_moi(optimizer)
double_sdp_with_duplicates(optimizer)
sdp_wiki(optimizer)
simple_lp(optimizer_bridged)
simple_lp_2_1d_sdp(optimizer_bridged)
lp_in_SDP_equality_form(optimizer_bridged)
lp_in_SDP_inequality_form(optimizer_bridged)
sdp_from_moi(optimizer_bridged)
double_sdp_from_moi(optimizer_bridged)
double_sdp_with_duplicates(optimizer_bridged)
sdp_wiki(optimizer_bridged)

# print test
const optimizer_print = MOI.instantiate(
()->ProxSDP.Optimizer(
log_freq = 10, log_verbose = true, timer_verbose = true, extended_log = true, extended_log2 = true,
tol_gap = 1e-4, tol_feasibility = 1e-4),
with_bridge_type = Float64)
sdp_wiki(optimizer_print)

# eig solvers
default_solver = MOI.get(optimizer_bridged, MOI.RawOptimizerAttribute("eigsolver"))
min_size_krylov_eigs = MOI.get(optimizer_bridged, MOI.RawOptimizerAttribute("min_size_krylov_eigs"))
MOI.set(optimizer_bridged, MOI.RawOptimizerAttribute("eigsolver"), 1)
MOI.set(optimizer_bridged, MOI.RawOptimizerAttribute("min_size_krylov_eigs"), 1)
sdp_wiki(optimizer_bridged)
MOI.set(optimizer_bridged, MOI.RawOptimizerAttribute("eigsolver"), 2)
sdp_wiki(optimizer_bridged)
MOI.set(optimizer_bridged, MOI.RawOptimizerAttribute("min_size_krylov_eigs"), min_size_krylov_eigs)
MOI.set(optimizer_bridged, MOI.RawOptimizerAttribute("eigsolver"), default_solver)
MOI.set(optimizer_bridged, MOI.RawOptimizerAttribute("full_eig_decomp"), true)
sdp_wiki(optimizer_bridged)
MOI.set(optimizer_bridged, MOI.RawOptimizerAttribute("full_eig_decomp"), false)
Loading