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 }
)
options = {}
options[:log_level] = 1 if verbose
options[:time_limit] = time_limit if time_limit
res = model.solve(**options)
status =
case res[:status]
when :primal_infeasible
:infeasible
else
res[:status]
end
{
status: status,
objective: res[:objective] + offset,
x: res[:primal_col]
}
end
|