SDPA

Build StatusReferences to cite
Build StatusDOI
Codecov branch

Julia wrapper to SDPA semidefinite programming solver in double precision floating point arithmetics (i.e. Float64); see SDPAFamily for the other solvers SDPA-GMP, SDPA-DD, and SDPA-QD of the family. Write SDPA.Optimizer to use this solver with JuMP, Convex or any other package using the MathOptInterface interface.

Parameters

SDPA has 10 parameters that can be set separately using, e.g. SDPASolver(MaxIteration=100) to set the parameter with name MaxIteration at the value 100. SDPA has 3 modes that give values to all 10 parameters. By default, we put SDPA in the PARAMETER_DEFAULT mode. The three modes are as follow:

ModeName
DefaultPARAMETER_DEFAULT
FastPARAMETER_UNSTABLE_BUT_FAST
SlowPARAMETER_STABLE_BUT_SLOW

To set the SDPA solver in a mode you do, e.g. SDPASolver(Mode=PARAMETER_UNSTABLE_BUT_FAST). Note that the parameters are set in the order they are given so you can set it in a mode and then modify one parameter from this mode, e.g. SDPASolver(Mode=PARAMETER_UNSTABLE_BUT_FAST, MaxIteration=1000).

Note that PARAMETER_UNSTABLE_BUT_FAST appears to be the most reliable of the three modes, at least in some cases; e.g. it gives the fewest failures on Convex.jl's tests (see #17).

The following table gives the default value for each parameter.

Parameter nameDefaultFastSlow
MaxIteration1001001000
EpsilonStar1.0e-71.0e-71.0e-7
LambdaStar1.0e+21.0e+21.0e+4
OmegaStar2.02.02.0
LowerBound1.0e+51.0e+51.0e+5
UpperBound1.0e+51.0e+51.0e+5
BetaStar0.10.010.1
BetaBar0.20.020.3
GammaStar0.90.950.8
EpsilonDash1.0e-71.0e-71.0e-7

Installation

The package is registered in METADATA.jl and so can be installed with Pkg.add.

julia> import Pkg; Pkg.add("SDPA")

SDPA.jl will use BinaryProvider.jl to automatically install the SDPA binaries for Linux and OS X. This should work for both the official Julia binaries from https://julialang.org/downloads/ and source-builds that used gcc versions 7 or 8.

NOTE: If you see an error similar to

INFO: Precompiling module GZip.
ERROR: LoadError: LoadError: error compiling anonymous: could not load library "libz"

please see GZip.jl#54 or Flux.jl#343. In particular, in Ubuntu this issue may be resolved by running

sudo apt-get install zlib1g-dev

Custom Installation

To install custom built SDPA binaries set the environmental variable JULIA_SDPA_LIBRARY_PATH and call import Pkg; Pkg.build("SDPA"). For instance, if the libraries are installed in /opt/lib, then call

ENV["JULIA_SDPA_LIBRARY_PATH"] = "/opt/lib"
import Pkg; Pkg.build("SDPA")

If you do not want BinaryProvider to download the default binaries on install, set JULIA_SDPA_LIBRARY_PATH before calling import Pkg; Pkg.add("SDPA").

To switch back to the default binaries clear JULIA_SDPA_LIBRARY_PATH and call import Pkg; Pkg.build("SDPA").