class RAMS::Solvers::CBC
Interface to COIN-OR Branch-and-Cut
Public Instance Methods
solver_command(model_path, solution_path, args)
click to toggle source
# File lib/rams/solvers/cbc.rb, line 7 def solver_command(model_path, solution_path, args) ['cbc', model_path] + args + ['printingOptions', 'all', 'solve', 'solution', solution_path] end
Private Instance Methods
parse_dual(model, lines)
click to toggle source
# File lib/rams/solvers/cbc.rb, line 36 def parse_dual(model, lines) lines[1, model.constraints.count].map do |l| comps = l.split dual = model.sense == :max ? -comps[3].to_f : comps[3].to_f [model.constraints[comps[1]], dual] end.to_h end
parse_objective(model, lines)
click to toggle source
# File lib/rams/solvers/cbc.rb, line 23 def parse_objective(model, lines) return nil if lines.count < 1 objective = lines.first.split[-1].to_f model.sense == :max ? -objective : objective end
parse_primal(model, lines)
click to toggle source
# File lib/rams/solvers/cbc.rb, line 29 def parse_primal(model, lines) lines[model.constraints.count + 1, model.variables.count].map do |l| comps = l.split [model.variables[comps[1]], comps[2].to_f] end.to_h end
parse_status(_model, lines)
click to toggle source
# File lib/rams/solvers/cbc.rb, line 13 def parse_status(_model, lines) return :undefined if lines.count < 1 status = lines.first return :optimal if status =~ /optimal/i return :feasible if status =~ /stopped/i return :infeasible if status =~ /infeasible/i return :unbounded if status =~ /unbounded/i :undefined end