or-tools 0.3.2 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,29 +3,26 @@ require "fileutils"
3
3
  require "net/http"
4
4
  require "tmpdir"
5
5
 
6
- version = "7.8.7959"
6
+ version = "8.2.8710"
7
7
 
8
8
  if RbConfig::CONFIG["host_os"] =~ /darwin/i
9
- filename = "or-tools_MacOsX-10.15.6_v#{version}.tar.gz"
10
- checksum = "8d1d92105e962fab2fd7bde5843b711334a9f246dc22c51d41281898dbc1f69d"
9
+ filename = "or-tools_MacOsX-11.2.1_v#{version}.tar.gz"
10
+ checksum = "1c3bd45ab10677aa96d404cb837067e786a6d98123d8b556cf29d6994aa43b3b"
11
11
  else
12
12
  os = %x[lsb_release -is].chomp rescue nil
13
13
  os_version = %x[lsb_release -rs].chomp rescue nil
14
14
  if os == "Ubuntu" && os_version == "20.04"
15
15
  filename = "or-tools_ubuntu-20.04_v#{version}.tar.gz"
16
- checksum = "40018cd573305cec76e12ff87e84d4ec18ce0823f265e4d75625bf3aefdea7c9"
16
+ checksum = "ab3b3051b10a4bbe8d080857f3c4ef3cfe9c10896ff94f352bb779e993756dd7"
17
17
  elsif os == "Ubuntu" && os_version == "18.04"
18
18
  filename = "or-tools_ubuntu-18.04_v#{version}.tar.gz"
19
- checksum = "6e53e1a7b82b65b928617b9dce663778c5200de9366ad948948597dc763b1943"
20
- elsif os == "Ubuntu" && os_version == "16.04"
21
- filename = "or-tools_ubuntu-16.04_v#{version}.tar.gz"
22
- checksum = "182cd4e2a1d2f29a9a81f2f90cb3e05cf1c0731c1a1e94c471d79a74dc09fff0"
19
+ checksum = "0d052deb2ba4491c29e86242fb5d61d0fe14bac847c2feaa35fbeff925ea40a0"
23
20
  elsif os == "Debian" && os_version == "10"
24
21
  filename = "or-tools_debian-10_v#{version}.tar.gz "
25
- checksum = "87dd294237095a7fea466c47789802b0a66c664fa1f79e6bbb2cd36323b409ca"
22
+ checksum = "1f2ec99181c92859ab46e68a6231babce92ded949fd1d08ee31afa4db04c43b3"
26
23
  elsif os == "CentOS" && os_version == "8"
27
24
  filename = "or-tools_centos-8_v#{version}.tar.gz"
28
- checksum = "4e61bf2994fc767da1b4fd073f554c944d2c811609df4bc1afa6a2d876c05bb4"
25
+ checksum = "be638a20b36f6da81aa29fd24c69c4a66afc980b8a221b1cbabb3910b9827718"
29
26
  else
30
27
  # there is a binary download for Windows
31
28
  # however, it's compiled with Visual Studio rather than MinGW (which RubyInstaller uses)
data/lib/or-tools.rb CHANGED
@@ -11,12 +11,18 @@ require "or_tools/cp_solver_solution_callback"
11
11
  require "or_tools/int_var"
12
12
  require "or_tools/knapsack_solver"
13
13
  require "or_tools/linear_expr"
14
+ require "or_tools/routing_index_manager"
14
15
  require "or_tools/routing_model"
15
16
  require "or_tools/sat_linear_expr"
16
17
  require "or_tools/sat_int_var"
17
18
  require "or_tools/solver"
18
19
  require "or_tools/version"
19
20
 
21
+ # solution printers
22
+ require "or_tools/objective_solution_printer"
23
+ require "or_tools/var_array_solution_printer"
24
+ require "or_tools/var_array_and_objective_solution_printer"
25
+
20
26
  # higher level interfaces
21
27
  require "or_tools/basic_scheduler"
22
28
  require "or_tools/seating"
@@ -25,5 +25,9 @@ module ORTools
25
25
  def sum(arr)
26
26
  arr.sum(SatLinearExpr.new)
27
27
  end
28
+
29
+ def inspect
30
+ to_s
31
+ end
28
32
  end
29
33
  end
@@ -7,7 +7,7 @@ module ORTools
7
7
  def_delegators :@response, :objective_value, :num_conflicts, :num_branches, :wall_time
8
8
 
9
9
  def solve(model)
10
- @response = _solve(model)
10
+ @response = _solve(model, parameters)
11
11
  @response.status
12
12
  end
13
13
 
@@ -20,13 +20,17 @@ module ORTools
20
20
  end
21
21
 
22
22
  def solve_with_solution_callback(model, observer)
23
- @response = _solve_with_observer(model, observer, false)
23
+ @response = _solve_with_observer(model, parameters, observer, false)
24
24
  @response.status
25
25
  end
26
26
 
27
27
  def search_for_all_solutions(model, observer)
28
- @response = _solve_with_observer(model, observer, true)
28
+ @response = _solve_with_observer(model, parameters, observer, true)
29
29
  @response.status
30
30
  end
31
+
32
+ def parameters
33
+ @parameters ||= SatParameters.new
34
+ end
31
35
  end
32
36
  end
@@ -9,7 +9,7 @@ module ORTools
9
9
  when BoolVar
10
10
  @response.solution_boolean_value(expr)
11
11
  else
12
- raise "Unsupported type"
12
+ raise "Unsupported type: #{expr.class.name}"
13
13
  end
14
14
  end
15
15
 
@@ -0,0 +1,18 @@
1
+ module ORTools
2
+ class ObjectiveSolutionPrinter < CpSolverSolutionCallback
3
+ attr_reader :solution_count
4
+
5
+ def initialize
6
+ super
7
+ @solution_count = 0
8
+ @start_time = Time.now
9
+ end
10
+
11
+ def on_solution_callback
12
+ current_time = Time.now
13
+ obj = objective_value
14
+ puts "Solution %i, time = %0.2f s, objective = %i" % [@solution_count, current_time - @start_time, obj]
15
+ @solution_count += 1
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,11 @@
1
+ module ORTools
2
+ class RoutingIndexManager
3
+ def self.new(num_nodes, num_vehicles, starts, ends = nil)
4
+ if ends
5
+ _new_starts_ends(num_nodes, num_vehicles, starts, ends)
6
+ else
7
+ _new_depot(num_nodes, num_vehicles, starts)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -14,6 +14,10 @@ module ORTools
14
14
  SatLinearExpr.new([[self, 1], [-other, 1]])
15
15
  end
16
16
 
17
+ def -@
18
+ SatLinearExpr.new([[self, -1]])
19
+ end
20
+
17
21
  # for now
18
22
  def inspect
19
23
  name
@@ -43,10 +43,10 @@ module ORTools
43
43
  case other
44
44
  when SatLinearExpr
45
45
  other.vars
46
- when BoolVar, SatIntVar
46
+ when BoolVar, SatIntVar, Integer
47
47
  [[other, 1]]
48
48
  else
49
- raise ArgumentError, "Unsupported type"
49
+ raise ArgumentError, "Unsupported type: #{other.class.name}"
50
50
  end
51
51
 
52
52
  self.class.new(vars + other_vars.map { |a, b| [a, sign * b] })
@@ -0,0 +1,20 @@
1
+ module ORTools
2
+ class VarArrayAndObjectiveSolutionPrinter < CpSolverSolutionCallback
3
+ attr_reader :solution_count
4
+
5
+ def initialize(variables)
6
+ super()
7
+ @variables = variables
8
+ @solution_count = 0
9
+ @start_time = Time.now
10
+ end
11
+
12
+ def on_solution_callback
13
+ current_time = Time.now
14
+ obj = objective_value
15
+ puts "Solution %i, time = %0.2f s, objective = %i" % [@solution_count, current_time - @start_time, obj]
16
+ puts @variables.map { |v| " %s = %i" % [v.name, value(v)] }.join(" ")
17
+ @solution_count += 1
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ module ORTools
2
+ class VarArraySolutionPrinter < CpSolverSolutionCallback
3
+ attr_reader :solution_count
4
+
5
+ def initialize(variables)
6
+ super()
7
+ @variables = variables
8
+ @solution_count = 0
9
+ @start_time = Time.now
10
+ end
11
+
12
+ def on_solution_callback
13
+ current_time = Time.now
14
+ puts "Solution %i, time = %0.2f s" % [@solution_count, current_time - @start_time]
15
+ puts @variables.map { |v| " %s = %i" % [v.name, value(v)] }.join(" ")
16
+ @solution_count += 1
17
+ end
18
+ end
19
+ end
@@ -1,3 +1,3 @@
1
1
  module ORTools
2
- VERSION = "0.3.2"
2
+ VERSION = "0.4.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: or-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-04 00:00:00.000000000 Z
11
+ date: 2021-03-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rice
@@ -16,72 +16,16 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '2.2'
19
+ version: '3'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '2.2'
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: rake
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: rake-compiler
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: minitest
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '5'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '5'
83
- description:
84
- email: andrew@chartkick.com
26
+ version: '3'
27
+ description:
28
+ email: andrew@ankane.org
85
29
  executables: []
86
30
  extensions:
87
31
  - ext/or-tools/extconf.rb
@@ -91,8 +35,14 @@ files:
91
35
  - LICENSE.txt
92
36
  - NOTICE.txt
93
37
  - README.md
38
+ - ext/or-tools/assignment.cpp
39
+ - ext/or-tools/bin_packing.cpp
40
+ - ext/or-tools/constraint.cpp
94
41
  - ext/or-tools/ext.cpp
95
42
  - ext/or-tools/extconf.rb
43
+ - ext/or-tools/linear.cpp
44
+ - ext/or-tools/network_flows.cpp
45
+ - ext/or-tools/routing.cpp
96
46
  - ext/or-tools/vendor.rb
97
47
  - lib/or-tools.rb
98
48
  - lib/or_tools/basic_scheduler.rb
@@ -105,6 +55,8 @@ files:
105
55
  - lib/or_tools/int_var.rb
106
56
  - lib/or_tools/knapsack_solver.rb
107
57
  - lib/or_tools/linear_expr.rb
58
+ - lib/or_tools/objective_solution_printer.rb
59
+ - lib/or_tools/routing_index_manager.rb
108
60
  - lib/or_tools/routing_model.rb
109
61
  - lib/or_tools/sat_int_var.rb
110
62
  - lib/or_tools/sat_linear_expr.rb
@@ -112,12 +64,14 @@ files:
112
64
  - lib/or_tools/solver.rb
113
65
  - lib/or_tools/sudoku.rb
114
66
  - lib/or_tools/tsp.rb
67
+ - lib/or_tools/var_array_and_objective_solution_printer.rb
68
+ - lib/or_tools/var_array_solution_printer.rb
115
69
  - lib/or_tools/version.rb
116
70
  homepage: https://github.com/ankane/or-tools
117
71
  licenses:
118
72
  - MIT
119
73
  metadata: {}
120
- post_install_message:
74
+ post_install_message:
121
75
  rdoc_options: []
122
76
  require_paths:
123
77
  - lib
@@ -125,15 +79,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
125
79
  requirements:
126
80
  - - ">="
127
81
  - !ruby/object:Gem::Version
128
- version: '2.4'
82
+ version: '2.6'
129
83
  required_rubygems_version: !ruby/object:Gem::Requirement
130
84
  requirements:
131
85
  - - ">="
132
86
  - !ruby/object:Gem::Version
133
87
  version: '0'
134
88
  requirements: []
135
- rubygems_version: 3.1.2
136
- signing_key:
89
+ rubygems_version: 3.2.3
90
+ signing_key:
137
91
  specification_version: 4
138
92
  summary: Operations research tools for Ruby
139
93
  test_files: []