Class: Opt::Solvers::CbcSolver
- Inherits:
-
AbstractSolver
- Object
- AbstractSolver
- Opt::Solvers::CbcSolver
- Defined in:
- lib/opt/solvers/cbc_solver.rb
Class Method Summary collapse
Instance Method Summary collapse
Methods inherited from AbstractSolver
supports_semi_continuous_variables?, supports_semi_integer_variables?, supports_type?
Class Method Details
.available? ⇒ Boolean
40 41 42 |
# File 'lib/opt/solvers/cbc_solver.rb', line 40 def self.available? defined?(Cbc) end |
.supported_types ⇒ Object
44 45 46 |
# File 'lib/opt/solvers/cbc_solver.rb', line 44 def self.supported_types [:lp, :mip] end |
Instance Method Details
#solve(sense:, start:, index:, value:, col_lower:, col_upper:, obj:, row_lower:, row_upper:, offset:, verbose:, time_limit:, vars:) ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/opt/solvers/cbc_solver.rb', line 4 def solve(sense:, start:, index:, value:, col_lower:, col_upper:, obj:, row_lower:, row_upper:, offset:, verbose:, time_limit:, vars:, **) model = Cbc.load_problem( sense: sense, start: start, index: index, value: value, col_lower: col_lower, col_upper: col_upper, obj: obj, row_lower: row_lower, row_upper: row_upper, col_type: vars.map { |v| v.is_a?(Integer) ? :integer : :continuous } ) # only pass options if set to support Cbc < 2.10.0 = {} [:log_level] = 1 if verbose [:time_limit] = time_limit if time_limit res = model.solve(**) status = case res[:status] when :primal_infeasible :infeasible else res[:status] end { status: status, objective: res[:objective] + offset, x: res[:primal_col] } end |