Build Status |
---|
ProxSDP is an open-source semidefinite programming (SDP) solver based on the paper "Exploiting Low-Rank Structure in Semidefinite Programming by Approximate Operator Splitting". The main advantage of ProxSDP over other state-of-the-art solvers is the ability to exploit the low-rank structure inherent to several SDP problems.
- General conic convex optimization problems with the presence of the positive semidefinite cone, second-order cone and positive orthant;
- Semidefinite relaxation of nonconvex problems, e.g. max-cut, binary MIMO, optimal power flow, sensor localization, sum-of-squares;
- Control theory problems with LMI constraints;
- Nuclear norm minimization problems, e.g. matrix completion;
You can install ProxSDP through the Julia package manager:
] add ProxSDP
For example, consider the semidefinite programming relaxation of the max-cut problem
max 0.25 * W•X
s.t. diag(X) = 1,
X ≽ 0,
This problem can be solved by the following code using ProxSDP and JuMP.
# Load packages
using ProxSDP, JuMP, LinearAlgebra
# Number of vertices
n = 4
# Graph weights
W = [18.0 -5.0 -7.0 -6.0
-5.0 6.0 0.0 -1.0
-7.0 0.0 8.0 -1.0
-6.0 -1.0 -1.0 8.0]
# Build Max-Cut SDP relaxation via JuMP
model = Model(with_optimizer(ProxSDP.Optimizer, log_verbose=true))
@variable(model, X[1:n, 1:n], PSD)
@objective(model, Max, 0.25 * dot(W, X))
@constraint(model, diag(X) .== 1)
# Solve optimization problem with ProxSDP
JuMP.optimize!(model)
# Retrieve solution
Xsol = JuMP.value.(X)
The preprint version of the paper can be found here.
@article{souto2018exploiting,
title={Exploiting Low-Rank Structure in Semidefinite Programming by Approximate Operator Splitting},
author={Souto, Mario and Garcia, Joaquim D and Veiga, {\'A}lvaro},
journal={arXiv preprint arXiv:1810.05231},
year={2018}
}
- Support for exponential and power cones;
- Warm start.