SCS
SCS - the splitting conic solver - for Ruby
:fire: Supports many different problem types
Installation
Add this line to your application’s Gemfile:
ruby
gem 'scs'
If installation fails, you may need to install dependencies.
Getting Started
Prep the problem
ruby
data = {a: [[1], [-1]], b: [1, 0], c: [-1]}
cone = {q: [], l: 2}
And solve it
ruby
solver = SCS::Solver.new
solver.solve(data, cone)
Settings
Default values shown
ruby
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:
ruby
SCS::Solver.new(indirect: true)
Dependencies
BLAS and LAPACK are required for SCS.
sh
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:
- Report bugs
- Fix bugs and submit pull requests
- Write, clarify, or fix documentation
- Suggest or add new features
To get started with development:
sh
git clone --recursive https://github.com/ankane/scs.git
cd scs
bundle install
bundle exec rake compile
bundle exec rake test