Class: Opt::Solvers::ClpSolver

Inherits:
AbstractSolver show all
Defined in:
lib/opt/solvers/clp_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



37
38
39
# File 'lib/opt/solvers/clp_solver.rb', line 37

def self.available?
  defined?(Clp)
end

.supported_typesObject



41
42
43
# File 'lib/opt/solvers/clp_solver.rb', line 41

def self.supported_types
  [:lp]
end

Instance Method Details

#solve(sense:, start:, index:, value:, col_lower:, col_upper:, obj:, row_lower:, row_upper:, offset:, verbose:, time_limit:) ⇒ 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
# File 'lib/opt/solvers/clp_solver.rb', line 4

def solve(sense:, start:, index:, value:, col_lower:, col_upper:, obj:, row_lower:, row_upper:, offset:, verbose:, time_limit:, **)
  model =
    Clp.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,
      offset: -offset
    )
  res = model.solve(log_level: verbose ? 4 : nil, time_limit: time_limit)

  status =
    case res[:status]
    when :primal_infeasible
      :infeasible
    when :dual_infeasible
      :unbounded
    else
      res[:status]
    end

  {
    status: status,
    objective: res[:objective],
    x: res[:primal_col]
  }
end