SCS

A fast, reliable, and open-source convex cone solver.

SCS (Splitting Conic Solver) is a numerical optimization package for solving large-scale convex quadratic cone problems. The code is freely available on GitHub. It solves primal-dual problems of the form

minimize(1/2)xPx+cxsubject toAx+s=bsKmaximize(1/2)xPxbysubject toPx+Ay+c=0yK

over variables

xRn

primal variable

yRm

dual variable

sRm

slack variable

with data

ARm×n

sparse data matrix, see Data matrices

PS+n

sparse, symmetric positive semidefinite matrix

cRn

dense primal cost vector

bRm

dense dual cost vector

KRm

nonempty, closed, convex cone, see Cones

KRm

dual cone to K

At termination SCS will either return points (x,y,s) that satisfies the optimality conditions to the desired accuracy, or a certificate of primal or dual infeasibility to the designated infeasibility accuracy.

Features

  • Efficient: Designed to scale to large problems.

  • Flexible: Supports quadratic objectives and a large range of cones.

  • Free and open source: Distributed under the permissive MIT license.

  • Detects infeasibility: Robustly and reliably detects infeasible problems.

  • Interfaces: Bindings for many languages, including C, Python, Julia, R, MATLAB, Ruby, and JavaScript via WebAssembly.

  • Warm starts: Easily warm-started, and the matrix factorization can be cached.

  • Matrix-free: Optionally use an indirect linear system solver, or a GPU version.

  • Supported: A supported solver in CVX, CVXPY, YALMIP, Convex.jl and JuMP.

  • Accelerated: Includes acceleration that can improve convergence to high accuracy.

  • Battle-tested: The first ADMM-based solver available, and in wide usage.

Performance

SCS is a fast and reliable optimization library. For instance, it is one of the most performant solvers as determined by the third-party QP solvers benchmark on the challenging Maros-Meszaros QP test suite. This is despite SCS being a general quadratic conic solver and not specifically tailored for QPs.

map to buried treasure

SCS is faster and more reliable than most other solvers.

Development

SCS is a community project, built from the contributions of many researchers and engineers. The primary maintainer is Brendan O’Donoghue. We appreciate all contributions. To get involved, see our contributing guide.