SDPSL
Semidefinite Programming Specification Library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends Pages
SDPSL: A Semidefinite Programming Specification Library

In many applications of semidefinite programming, creating the input for the solver and analyzing the solver's output are the two main steps involved. SDPSL is a C++ library that can be used to specify a semidefinite programming problem and create the input for the solver. It also provides tools to analyze solver output.

SDPSL is written in C++11, allowing for fast, compiled code, a necessity in the generation of large-scale SDPs. It provides an intuitive syntax for the specification of SDPs, preventing many mistakes that can occur in problem specification, and allows for the parallelization of constraint generation. Designed with sums-of-squares problems in mind, it provides tools to specify such problems and analyze the results of solvers.

SDPSL also comes with a SAGE wrapper, allowing you to use the library inside of SAGE in a convenient way. To learn more about it, check out the website of the SAGE version of SDPSL.

License and distribution

To download SDPSL and to see installation instructions, go here.

SDPSL is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

SDPSL is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

Go to the FSF's licenses page for more information.

Linking with the library

Programs that use SDPSL have to be linked with the C math library, with the GMP library and the GMPXX library, and with LAPACK and BLAS.

If you wrote a program called myprog.cpp and wish to compile it using GCC, then you would use a command like:

$ g++ -std=c++11 myprog.cpp -lsdpsl -lgmpxx -lgmp -llapack -lblas -lm

This, that is, if you are using the double-precision version of the library. If you use the arbitrary-precision version, then the line would be:

$ g++ -std=c++11 myprog.cpp -lmpfsdpsl -lgmpxx -lgmp -llapack -lblas -lm

Tutorial

Here are some documents you can read to learn how SDPSL works and how to use it.

  1. Semidefinite programs in SDPSL : the standard format for the problems we deal with.

  2. SDPSL basics : introduction to how the library works, with examples: computing the Lovász theta number of the pentagon and using Fan's theorem to compute the sum of the \(k\) largest eigenvalues of a symmetric matrix.

  3. Polynomials and polynomial constraints : basics about polynomials and polynomial constraints in SDPSL, with one example: computing the global minimum of a univariate polynomial via sums-of-squares.

Bugs and comments

Bug reports as well as general comments are welcome at:

fmario (AT SYMBOL) gmail.com