Skip to content

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

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: zero/linear (LP), box, second-order (SOCP), semidefinite (SDP), complex semidefinite, exponential, power, and spectral cones (log-determinant, nuclear norm, ell1-norm, sum-of-largest eigenvalues).

Features

  • Multiple linear solver backends: sparse direct (QDLDL), dense direct (LAPACK), iterative (CG), Intel MKL Pardiso, Apple Accelerate (macOS), NVIDIA cuDSS, GPU
  • Anderson acceleration for faster convergence, including solve diagnostics
  • Problem data normalization/equilibration for numerical stability
  • Adaptive dual scaling, with per-row diagonal rescaling driven by residual profiles (adaptive_diag_scale, on by default)
  • 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

Note that the spectral-cone tests are skipped unless SCS is built with USE_SPECTRAL_CONES=1 (see the flag table below); a default make test run reports them as skipped.

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:

In CVXPY, SCS is the default solver for semidefinite, exponential-cone and power-cone problems (Clarabel handles LPs and SOCPs, OSQP handles QPs).

Project Structure

include/        Public API and internal headers
src/            Core solver implementation
linsys/         Linear solver backends (pluggable architecture)
  cpu/direct/     Sparse LDLt (AMD ordering + QDLDL, default)
  cpu/indirect/   Conjugate gradient
  cpu/dense/      Dense Cholesky on the Gram reduction (LAPACK dpotrf)
  mkl/direct/     Intel MKL Pardiso
  accelerate/direct/  Apple Accelerate sparse LDLt (macOS)
  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.