SCS (splitting conic solver) is a numerical optimization package for solving
large-scale convex cone problems. The current version is 3.2.11.
The full documentation is available here.
If you wish to cite SCS please cite the papers listed here.
SCS solves convex cone programs of the form:
minimize (1/2) x'Px + c'x
subject to Ax + s = b, s in K
where K is a product of convex cones. It uses an operator-splitting method
(ADMM) with Anderson acceleration to achieve fast convergence.
Supported cones: linear (LP), second-order (SOCP), semidefinite (SDP), exponential, power, complex semidefinite, and spectral cones (log-determinant, nuclear norm, sum-of-largest eigenvalues).
- Multiple linear solver backends: sparse direct (QDLDL), dense direct (LAPACK), iterative (CG), Intel MKL Pardiso, NVIDIA cuDSS, GPU
- Anderson acceleration for faster convergence
- Problem data normalization/equilibration for numerical stability
- Warm-starting and incremental
b/cupdates viascs_update - Ctrl-C signal handling for graceful interruption
- Configurable precision (
float/double) and index type (int/long long) - MIT licensed
make # Build direct + indirect solvers with BLAS/LAPACK
make test # Build test binaries
./out/run_tests_direct # Run direct solver tests
./out/run_tests_indirectmkdir build && cd build
cmake -DBUILD_TESTING=ON -DUSE_LAPACK=ON ..
cmake --build .
ctest| Flag | Default | Description |
|---|---|---|
USE_LAPACK |
1 |
Enable BLAS/LAPACK (required for SDP support) |
DLONG |
0 |
Use 64-bit integer indexing |
SFLOAT |
0 |
Use single-precision floats |
USE_SPECTRAL_CONES |
0 |
Enable spectral cone support (requires LAPACK) |
USE_OPENMP |
0 |
Enable OpenMP parallelization |
Example: make DLONG=1 USE_LAPACK=1
SCS has interfaces for several languages:
- Python:
pip install scs(PyPI) - Julia: SCS.jl
- R: scs
- MATLAB: See the documentation
- Ruby: scs-ruby
SCS is the default solver in CVXPY.
include/ Public API and internal headers
src/ Core solver implementation
linsys/ Linear solver backends (pluggable architecture)
cpu/direct/ Sparse Cholesky (QDLDL, default)
cpu/indirect/ Conjugate gradient
cpu/dense/ Dense LU (LAPACK dgetrf, for small problems)
mkl/direct/ Intel MKL Pardiso
cudss/direct/ NVIDIA cuDSS
gpu/indirect/ GPU iterative solver
external/ Vendored dependencies (AMD, QDLDL)
test/ Test suite (minunit framework)
docs/src/ Sphinx documentation source
MIT License. See LICENSE.txt.
