ProxSDP

Semidefinite programming optimization solver

https://github.com/mariohsouto/proxsdp.jl

Science Score: 67.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 5 DOI reference(s) in README
  • Academic publication links
    Links to: arxiv.org
  • Committers with academic emails
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (13.1%) to scientific vocabulary

Keywords

conic-programs convex-optimization julia optimization sdp semidefinite-programming solver
Last synced: 4 months ago · JSON representation ·

Repository

Semidefinite programming optimization solver

Basic Info
  • Host: GitHub
  • Owner: mariohsouto
  • License: mit
  • Language: Julia
  • Default Branch: master
  • Homepage:
  • Size: 12.1 MB
Statistics
  • Stars: 95
  • Watchers: 10
  • Forks: 13
  • Open Issues: 14
  • Releases: 25
Topics
conic-programs convex-optimization julia optimization sdp semidefinite-programming solver
Created almost 8 years ago · Last pushed 7 months ago
Metadata Files
Readme License Citation

README.md

logo

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.

Overview of problems ProxSDP can solve

License

ProxSDP is licensed under the MIT License.

Installation

Install ProxSDP using Julia package manager: julia import Pkg Pkg.add("ProxSDP")

Documentation

The online documentation is available at https://mariohsouto.github.io/ProxSDP.jl/latest/.

Usage

Consider the semidefinite programming relaxation of the max-cut problem, as in: max 0.25 * W•X s.t. diag(X) = 1, X ≽ 0,

JuMP

This problem can be solved by the following code using ProxSDP and JuMP. ```julia

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(ProxSDP.Optimizer) setoptimizerattribute(model, "logverbose", true) setoptimizerattribute(model, "tolgap", 1e-4) setoptimizerattribute(model, "tol_feasibility", 1e-4) @variable(model, X[1:n, 1:n], PSD) @objective(model, Max, 0.25 * LinearAlgebra.dot(W, X)) @constraint(model, LinearAlgebra.diag(X) .== 1)

Solve optimization problem with ProxSDP

optimize!(model)

Retrieve solution

Xsol = value.(X) ```

Convex.jl

Another alternative is to use ProxSDP via Convex.jl: ```julia

Load packages

using Convex, ProxSDP

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 ]

Define optimization problem

X = Semidefinite(n) problem = maximize(0.25 * dot(W, X), diag(X) == 1)

Solve optimization problem with ProxSDP

solve!(problem, ProxSDP.Optimizer(logverbose=true, tolgap=1e-4, tol_feasibility=1e-4))

Get the objective value

problem.optval

Retrieve solution

evaluate(X) ```

Citing this package

The published version of the paper can be found here and the arXiv version here.

We kindly request that you cite the paper as: bibtex @article{souto2020exploiting, author = {Mario Souto and Joaquim D. Garcia and \'Alvaro Veiga}, title = {Exploiting low-rank structure in semidefinite programming by approximate operator splitting}, journal = {Optimization}, pages = {1-28}, year = {2020}, publisher = {Taylor & Francis}, doi = {10.1080/02331934.2020.1823387}, URL = {https://doi.org/10.1080/02331934.2020.1823387} }

The preprint version of the paper can be found here.

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.
  • There is no continuous development for 32-bit systems, the package should work, but might reach some issues.
  • ProxSDP assumes primal and dual feasibility.

ROAD MAP

  • Support for exponential and power cones
  • Warm start

Owner

  • Name: Mario Souto
  • Login: mariohsouto
  • Kind: user
  • Location: Canada
  • Company: Equilibrium Energy

Optimization and machine learning scientist.

Citation (CITATION.bib)

@article{souto2020exploiting,
  author = {Mario Souto and Joaquim D. Garcia and \'Alvaro Veiga},
  title = {Exploiting low-rank structure in semidefinite programming by approximate operator splitting},
  journal = {Optimization},
  pages = {1-28},
  year  = {2020},
  publisher = {Taylor & Francis},
  doi = {10.1080/02331934.2020.1823387},
  URL = {https://doi.org/10.1080/02331934.2020.1823387}
}

GitHub Events

Total
  • Watch event: 3
  • Issue comment event: 5
  • Push event: 5
  • Pull request event: 7
  • Create event: 2
Last Year
  • Watch event: 3
  • Issue comment event: 5
  • Push event: 5
  • Pull request event: 7
  • Create event: 2

Committers

Last synced: almost 3 years ago

All Time
  • Total Commits: 547
  • Total Committers: 7
  • Avg Commits per committer: 78.143
  • Development Distribution Score (DDS): 0.411
Top Committers
Name Email Commits
Mario Henrique Souto m****o@g****m 322
Joaquim Garcia j****a@p****m 106
joaquimg j****a@g****m 65
Guilherme Bodin g****s@g****m 51
Oscar Dowson o****w@u****m 1
Benoît Legat b****t@g****m 1
Guilherme Bodin 3****n@u****m 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 4 months ago

All Time
  • Total issues: 39
  • Total pull requests: 68
  • Average time to close issues: about 2 months
  • Average time to close pull requests: about 1 month
  • Total issue authors: 11
  • Total pull request authors: 7
  • Average comments per issue: 1.64
  • Average comments per pull request: 1.26
  • Merged pull requests: 60
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 0
  • Pull requests: 4
  • Average time to close issues: N/A
  • Average time to close pull requests: about 5 hours
  • Issue authors: 0
  • Pull request authors: 3
  • Average comments per issue: 0
  • Average comments per pull request: 1.0
  • Merged pull requests: 3
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • joaquimg (22)
  • blegat (5)
  • hankyang94 (2)
  • guilhermebodin (2)
  • ericphanson (2)
  • bcdandurand (1)
  • kalmarek (1)
  • affans (1)
  • nrontsis (1)
  • mariohsouto (1)
  • JuliaTagBot (1)
Pull Request Authors
  • joaquimg (34)
  • guilhermebodin (15)
  • blegat (10)
  • mariohsouto (9)
  • odow (5)
  • projekter (2)
  • JuliaTagBot (1)
Top Labels
Issue Labels
enhancement (6) docs (2) arpack (1) good first issue (1) tests (1)
Pull Request Labels

Packages

  • Total packages: 1
  • Total downloads:
    • julia 25 total
  • Total dependent packages: 0
  • Total dependent repositories: 0
  • Total versions: 22
juliahub.com: ProxSDP

Semidefinite programming optimization solver

  • Versions: 22
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 25 Total
Rankings
Stargazers count: 8.6%
Dependent repos count: 9.9%
Forks count: 11.7%
Average: 17.3%
Dependent packages count: 38.9%
Last synced: 4 months ago

Dependencies

.github/workflows/TagBot.yml actions
  • JuliaRegistries/TagBot v1 composite
.github/workflows/ci.yml actions
  • actions/cache v1 composite
  • actions/checkout v2 composite
  • codecov/codecov-action v1 composite
  • julia-actions/julia-buildpkg v1 composite
  • julia-actions/julia-processcoverage v1 composite
  • julia-actions/julia-runtest v1 composite
  • julia-actions/setup-julia v1 composite