SCS

SCS - the splitting conic solver - for Ruby

:fire: Supports many different problem types

Build Status

Installation

Add this line to your application’s Gemfile:

gem 'scs'

If installation fails, you may need to install dependencies.

Getting Started

Prep the problem

data = {a: [[1], [-1]], b: [1, 0], c: [-1]}
cone = {q: [], l: 2}

And solve it

solver = SCS::Solver.new
solver.solve(data, cone)

Settings

Default values shown

solver.solve(data, cone, {
  normalize: true,            # heuristic data rescaling
  scale: 0.1,                 # if normalized, rescales by this factor
  adaptive_scale: true,       # heuristically adapt dual scale through the solve
  rho_x: 1e-6,                # x equality constraint scaling
  max_iters: 1e5,             # maximum iterations to take
  eps_abs: 1e-4,              # absolute feasibility tolerance
  eps_rel: 1e-4,              # relative feasibility tolerance
  eps_infeas: 1e-7,           # infeasibility tolerance
  alpha: 1.5,                 # relaxation parameter
  time_limit_secs: nil,       # time limit for solve run in seconds
  verbose: true,              # write out progress
  warm_start: false,          # warm start
  acceleration_lookback: 10,  # memory for acceleration
  acceleration_interval: 10,  # iterations to run Anderson acceleration
  write_data_filename: nil,   # filename to write data if set
  log_csv_filename: nil       # write csv logs of various quantities
})

Direct vs Indirect

SCS comes with two solvers: a direct solver which uses a cached LDL factorization and an indirect solver based on conjugate gradients. For the indirect solver, use:

SCS::Solver.new(indirect: true)

Dependencies

BLAS and LAPACK are required for SCS.

sudo apt-get install libblas-dev liblapack-dev

On Heroku, use the heroku-apt-buildpack.

Resources

History

View the changelog

Contributing

Everyone is encouraged to help improve this project. Here are a few ways you can help:

To get started with development:

git clone --recursive https://github.com/ankane/scs.git
cd scs
bundle install
bundle exec rake compile
bundle exec rake test