Skip to content

cvxgrp/scs

Repository files navigation

Intersection of a cone and a polyhedron

Build Status Documentation PyPI Downloads Conda Downloads

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.

Overview

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).

Features

  • 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/c updates via scs_update
  • Ctrl-C signal handling for graceful interruption
  • Configurable precision (float/double) and index type (int/long long)
  • MIT licensed

Building from Source

Make (default)

make                    # Build direct + indirect solvers with BLAS/LAPACK
make test               # Build test binaries
./out/run_tests_direct  # Run direct solver tests
./out/run_tests_indirect

CMake

mkdir build && cd build
cmake -DBUILD_TESTING=ON -DUSE_LAPACK=ON ..
cmake --build .
ctest

Common Build Flags

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

Language Interfaces

SCS has interfaces for several languages:

SCS is the default solver in CVXPY.

Project Structure

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

License

MIT License. See LICENSE.txt.