59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
# File 'lib/cbc/model.rb', line 59
def solve(log_level: nil, time_limit: nil)
with_options(log_level: log_level, time_limit: time_limit) do
FFI.Cbc_solve(model)
end
num_cols = FFI.Cbc_getNumCols(model)
status = FFI::STATUS[FFI.Cbc_status(model)]
secondary_status = FFI::SECONDARY_STATUS[FFI.Cbc_secondaryStatus(model)]
ret_status =
case status
when :not_started
if FFI.Cbc_isInitialSolveProvenOptimal(model) != 0
:optimal
elsif FFI.Cbc_isInitialSolveProvenPrimalInfeasible(model) != 0
:primal_infeasible
else
secondary_status
end
when :finished
if FFI.Cbc_isProvenOptimal(model) != 0
:optimal
elsif FFI.Cbc_isProvenInfeasible(model) != 0
:infeasible
else
secondary_status
end
else
secondary_status
end
{
status: ret_status,
objective: FFI.Cbc_getObjValue(model),
primal_col: read_double_array(FFI.Cbc_getColSolution(model), num_cols)
}
end
|