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:
- Report bugs
- Fix bugs and submit pull requests
- Write, clarify, or fix documentation
- Suggest or add new features
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