class RAMS::Solvers::CLP

Interface to COIN-OR Linear Programming

Public Instance Methods

solver_command(model_path, solution_path, args) click to toggle source
# File lib/rams/solvers/clp.rb, line 7
def solver_command(model_path, solution_path, args)
  ['clp', 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/clp.rb, line 36
def parse_dual(model, lines)
  lines[2, 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/clp.rb, line 23
def parse_objective(model, lines)
  return nil if lines.count < 2
  objective = lines[1].split[-1].to_f
  model.sense == :max ? -objective : objective
end
parse_primal(model, lines) click to toggle source
# File lib/rams/solvers/clp.rb, line 29
def parse_primal(model, lines)
  lines[model.constraints.count + 2, 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/clp.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