Sha256: 7fcc4ba69a5b157cc177689a5457714776de20ef864664b3a87079263552a17c

Contents?: true

Size: 842 Bytes

Versions: 10

Compression:

Stored size: 842 Bytes

Contents

require 'tempfile'
require 'open3'

module Ravensat
  class Solver
    attr_accessor :name
    def initialize( default_solver_name = "arcteryx" )
      @name = default_solver_name
    end

    def solve( cnf , solver_log: false)
      encoder = DimacsEncoder.new
      @input_file = Tempfile.open(["ravensat",".cnf"])
      @output_file = Tempfile.open(["ravensat",".mdl"])

      @input_file.write encoder.to_dimacs(cnf)
      @input_file.flush

      case @name
      when "arcteryx"
        Arcteryx.solve(@input_file.to_path, @output_file.to_path)
      else
        result, err, status = Open3.capture3("#{@name} #{@input_file.to_path} #{@output_file.to_path}")
        puts result if solver_log
      end

      decoder = DimacsDecoder.new
      model = @output_file.read.split("\n")
      decoder.decode(model, cnf)
    end

  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
ravensat-1.1.1 lib/ravensat/solver.rb
ravensat-1.1.0 lib/ravensat/solver.rb
ravensat-1.0.9 lib/ravensat/solver.rb
ravensat-1.0.8 lib/ravensat/solver.rb
ravensat-1.0.7 lib/ravensat/solver.rb
ravensat-1.0.6 lib/ravensat/solver.rb
ravensat-1.0.5 lib/ravensat/solver.rb
ravensat-1.0.4 lib/ravensat/solver.rb
ravensat-1.0.3 lib/ravensat/solver.rb
ravensat-1.0.2 lib/ravensat/solver.rb