SCS

SCS - the splitting conic solver - for Ruby

:fire: Supports many different problem types

Installation

Add this line to your application’s Gemfile:

gem 'scs'

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
result = solver.solve(data, cone)

Settings

Default values shown

solver.solve(data, cone, {
  normalize: true,            # heuristic data rescaling
  scale: 1.0,                 # if normalized, rescales by this factor
  rho_x: 1e-3,                # x equality constraint scaling
  max_iters: 5000,            # maximum iterations to take
  eps: 1e-5,                  # convergence tolerance
  alpha: 1.5,                 # relaxation parameter
  cg_rate: 2.0,               # for indirect, tolerance goes down like (1/iter)^cg_rate
  verbose: true,              # write out progress
  warm_start: false,          # warm start
  acceleration_lookback: 10,  # memory for acceleration
  write_data_filename: nil    # filename to write data if set
})

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)

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 and testing:

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