Manual

Building problems with JuMP.jl

Currently the easiest ways to pass problems to ProxSDP is through JuMP or MathOptInterface.

In the test folder one can find MOI implementations of some problems: MIMO, Sensor Localization, Random SDPs and sdplib problems.

Solver arguments

ArgumentDescriptionTypeValues (default)
log_verboseprint evolution of the processBoolfalse
log_freqprint evoluition of the process every n iterationsInt100
timer_verboseOutputs a time loggerBoolfalse
time_limitMaximum time the algorithm can try to solve in secondsFloat64360000.0
max_iterMaximum number of iterationsInt1000000
tol_primalPrimal error toleranceFloat641e-3
tol_dualDual error toleranceFloat641e-3
tol_psdTolerance associated with PSD coneFloat641e-15
tol_socTolerance associated with SOC coneFloat641e-15
initial_thetaInitial over relaxation parameterFloat641.0
initial_betaInitial primal/dual step ratioFloat641.0
min_betaMinimum primal/dual step ratioFloat641e-4
max_betaMaximum primal/dual step ratioFloat641e+4
convergence_windowMinimum number of iterations to update target rankInt200
max_linsearch_stepsMaximum number of iterations for linesearchInt1000
full_eig_decompFlag for using full eigenvalue decompositionBoolfalse

JuMP example

A quick JuMP example:

using ProxSDP, JuMP

# Create a JuMP model using ProxSDP as the solver
model = Model(with_optimizer(ProxSDP.Optimizer, log_verbose=true))

# Create a Positive Semidefinite variable
@variable(model, X[1:2,1:2], PSD)

x = X[1,1]
y = X[2,2]

@constraint(model, ub_x, x <= 2)
@constraint(model, ub_y, y <= 30)
@constraint(model, con, 1x + 5y <= 3)

# ProxSDP supports maximization or minimization
# of linear functions
@objective(model, Max, 5x + 3 * y)

# Then we can solve the model
JuMP.optimize!(model)

# And ask for results!
JuMP.objective_value(model)

JuMP.value(x)
JuMP.value(y)

Referencing

The first 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}
}

Disclaimer

  • ProxSDP is a research software, therefore it should not be used in production.
  • Please open an issue if you find any problems, developers will try to fix and find alternatives.
  • ProxSDP assumes primal and dual feasibility. Currently, it is not able to reliably identify infeasibility and unboundedness.