rulp 0.0.9 → 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- N2VlZmMyNTdmZDIxNThjYWJkMjYyZjBjZGI0Yjc3NWY4NjgwODBmMw==
4
+ ZTI0NWU3NTcxYTg3MzczYWE4MzI0NDRkNTNlMWQ3NTllNGU4ZjdkYg==
5
5
  data.tar.gz: !binary |-
6
- ZjkxM2RmYTc0ZThjZjNhOTcxZjMxYzU0ZmY5OTBlOTcyNzhkOWIyOQ==
6
+ MWYzNDhlYzI1MTM2ZjM1M2E0NTcyMGY4YmE2Y2E4MzM1YTRkZmZmZQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- OWY0YWFkNmVmN2E1NGRiMzg1NmExYWJkZGRiNDc5ZDBjNzMyNDMwYjdjYTAw
10
- NzFmN2RlNjY4OGY5ZjgyMTZmY2Q4Nzk3NmM3Zjg3YmVmOGUwOWUxMTk2Mzhi
11
- NWJhNzk2ZWM3ZDdkYTZjY2JmODBkMzg5N2JkYjk2YzE1MDMxZGE=
9
+ ZjMzMGVjNWI5YWJmNWQxY2Q2MjZkYTMzZmQ2NWJjZmJlMmMyODA0N2ZiYTQz
10
+ MjRlYzY1MmY4NTQxNWU0OWRkNGNkZTU1ODQ0YjU3NGRhMWJkMTIzM2U5Y2Zj
11
+ NDU4YWY5YTViNDQ1NTNiNGVmZTYyNjlkZDhiYzA0ZDM2YTA2ZmM=
12
12
  data.tar.gz: !binary |-
13
- MDY2ZGRjNDExYjk2MmQyMzNjNjI3NjA3MWY1NjRmMWUxMTE3ODM1NDFlODhi
14
- NjRhYWNkN2Y4MjY5ZDllZmQ0YmQ2NjVjOTRjNjkyMDhhNTZmZGRiY2M4MzJm
15
- YTBiMDQyYjVlNjA1OTY5ODBhOWYxOWMzZTFhYzNiNGFmY2NiYjQ=
13
+ ZjY2NjJiNDgzNWUzYzk1MmJlMGYyZTUxMGYxOTVlMDdhNjVkYzM3OWYzMjcz
14
+ OWU0ZDQ0MmU3Y2QyMjdmMTYyNzQ2MmVkMzAxZjEzNWJlOGMwZWIxMDRlYTNk
15
+ OGI5MGJlN2NiZjkzMjQ5NjA1OGIwMGQyMDdjZDA5ODY3YmFhMGI=
data/lib/rulp/rulp.rb CHANGED
@@ -13,6 +13,8 @@ require 'set'
13
13
  GLPK = "glpsol"
14
14
  SCIP = "scip"
15
15
  CBC = "cbc"
16
+ PSCIP = "pscip"
17
+ PCBC = "pcbc"
16
18
 
17
19
  module Rulp
18
20
  attr_accessor :expressions
@@ -22,11 +24,15 @@ module Rulp
22
24
  GLPK = ::GLPK
23
25
  SCIP = ::SCIP
24
26
  CBC = ::CBC
27
+ PSCIP = ::PSCIP
28
+ PCBC = ::PCBC
25
29
 
26
30
  SOLVERS = {
27
- GLPK => Glpk,
28
- SCIP => Scip,
29
- CBC => Cbc
31
+ GLPK => Glpk,
32
+ SCIP => Scip,
33
+ PSCIP => PScip,
34
+ PCBC => PCbc,
35
+ CBC => Cbc
30
36
  }
31
37
 
32
38
  def self.Glpk(lp)
@@ -41,6 +47,14 @@ module Rulp
41
47
  lp.solve_with(SCIP) rescue nil
42
48
  end
43
49
 
50
+ def self.Pcbc(lp)
51
+ lp.solve_with(PCBC) rescue nil
52
+ end
53
+
54
+ def self.Pscip(lp)
55
+ lp.solve_with(PSCIP) rescue nil
56
+ end
57
+
44
58
  def self.Max(objective_expression)
45
59
  "Creating maximization problem".log :info
46
60
  Problem.new(Rulp::MAX, objective_expression)
@@ -0,0 +1,24 @@
1
+ class PCbc < Solver
2
+ def solve(open_solution=false)
3
+ system("#{executable} #{@filename} threads 8 branch solution #{@outfile}")
4
+ `open #{@outfile}` if open_solution
5
+ end
6
+
7
+ def self.executable
8
+ :cbc
9
+ end
10
+
11
+ def store_results(variables)
12
+ rows = IO.read(@outfile).split("\n")
13
+ objective = rows[0].split(/\s+/)[-1].to_f
14
+ vars_by_name = {}
15
+ rows[1..-1].each do |row|
16
+ cols = row.strip.split(/\s+/)
17
+ vars_by_name[cols[1].to_s] = cols[2].to_f
18
+ end
19
+ variables.each do |var|
20
+ var.value = vars_by_name[var.to_s].to_f
21
+ end
22
+ return objective
23
+ end
24
+ end
@@ -0,0 +1,31 @@
1
+ class PScip < Solver
2
+
3
+ def self.executable
4
+ :fscip
5
+ end
6
+
7
+ def solve(open_solution=false)
8
+ command = "touch /tmp/fscip_params; rm #{@outfile}; #{executable} /tmp/fscip_params #{@filename} -fsol #{@outfile}"
9
+ command += " -s ./scip.set" if File.exists?("./scip.set")
10
+ system(command)
11
+ `open #{@outfile}` if open_solution
12
+ end
13
+
14
+ def store_results(variables)
15
+ results = IO.read(@outfile)
16
+ rows = results.split("\n")
17
+
18
+ objective = rows[1].split(/\s+/)[-1].to_f
19
+
20
+ vars_by_name = {}
21
+ rows[1..-1].each do |row|
22
+ cols = row.strip.split(/\s+/)
23
+ vars_by_name[cols[0].to_s] = cols[1].to_f
24
+ end
25
+ variables.each do |var|
26
+ var.value = vars_by_name[var.to_s].to_f
27
+ end
28
+
29
+ return objective
30
+ end
31
+ end
@@ -26,3 +26,5 @@ end
26
26
  require_relative 'cbc'
27
27
  require_relative 'scip'
28
28
  require_relative 'glpk'
29
+ require_relative 'pscip'
30
+ require_relative 'pcbc'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rulp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wouter Coppieters
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-24 00:00:00.000000000 Z
11
+ date: 2015-03-27 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A simple Ruby LP description DSL
14
14
  email: wc@pico.net.nz
@@ -34,6 +34,8 @@ files:
34
34
  - lib/rulp/rulp_initializers.rb
35
35
  - lib/solvers/cbc.rb
36
36
  - lib/solvers/glpk.rb
37
+ - lib/solvers/pcbc.rb
38
+ - lib/solvers/pscip.rb
37
39
  - lib/solvers/scip.rb
38
40
  - lib/solvers/solvers.rb
39
41
  - test/test_basic_suite.rb