or-tools 0.3.1 → 0.4.1

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.
@@ -3,26 +3,26 @@ require "fileutils"
3
3
  require "net/http"
4
4
  require "tmpdir"
5
5
 
6
- version = "7.7.7810"
6
+ version = "8.1.8487"
7
7
 
8
8
  if RbConfig::CONFIG["host_os"] =~ /darwin/i
9
- filename = "or-tools_MacOsX-10.15.5_v#{version}.tar.gz"
10
- checksum = "764f290f6d916bc366913a37d93e6f83bd7969ad33515ccc1ca390f544d65721"
9
+ filename = "or-tools_MacOsX-10.15.7_v#{version}.tar.gz"
10
+ checksum = "cdf5d5c4dd10ddfa39eb951e6b8122b2a48c7d1dbd87bb5f792a7596aea8b8bb"
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
- if os == "Ubuntu" && os_version == "18.04"
14
+ if os == "Ubuntu" && os_version == "20.04"
15
+ filename = "or-tools_ubuntu-20.04_v#{version}.tar.gz"
16
+ checksum = "2de596d649d9a0f0dfec8007d6e1018d8fdddced7aa340b4e68d02e61df89a2e"
17
+ elsif os == "Ubuntu" && os_version == "18.04"
15
18
  filename = "or-tools_ubuntu-18.04_v#{version}.tar.gz"
16
- checksum = "12bdac29144b077b3f9ba602f947e4b9b9ce63ed3df4e325cda1333827edbcf8"
17
- elsif os == "Ubuntu" && os_version == "16.04"
18
- filename = "or-tools_ubuntu-16.04_v#{version}.tar.gz"
19
- checksum = "cc696d342b97aa6cf7c62b6ae2cae95dfc665f2483d147c4117fdba434b13a53"
19
+ checksum = "201cf1d17379240311208f4c641bb5263ae19d8c4c1a6091d2778948fd375f48"
20
20
  elsif os == "Debian" && os_version == "10"
21
21
  filename = "or-tools_debian-10_v#{version}.tar.gz "
22
- checksum = "3dd0299e9ad8d12fe6d186bfd59e63080c8e9f3c6b0489af9900c389cf7e4224"
22
+ checksum = "18028ef7287cd83eed3dafeae1243a9adb445675f45984e8d3c60ab9e2aa75bd"
23
23
  elsif os == "CentOS" && os_version == "8"
24
24
  filename = "or-tools_centos-8_v#{version}.tar.gz"
25
- checksum = "1f7d8bce56807c4283374e05024ffac8afd81ff99063217418d02d626cf03088"
25
+ checksum = "e26229320f9b78315f0122b55d16093c79e2dc6c95d591f4788f323f27cfd3bf"
26
26
  else
27
27
  # there is a binary download for Windows
28
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.1"
2
+ VERSION = "0.4.1"
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.1
4
+ version: 0.4.1
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-07-21 00:00:00.000000000 Z
11
+ date: 2021-02-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rice
@@ -16,14 +16,14 @@ 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'
26
+ version: '3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -80,7 +80,7 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '5'
83
- description:
83
+ description:
84
84
  email: andrew@chartkick.com
85
85
  executables: []
86
86
  extensions:
@@ -91,8 +91,14 @@ files:
91
91
  - LICENSE.txt
92
92
  - NOTICE.txt
93
93
  - README.md
94
+ - ext/or-tools/assignment.cpp
95
+ - ext/or-tools/bin_packing.cpp
96
+ - ext/or-tools/constraint.cpp
94
97
  - ext/or-tools/ext.cpp
95
98
  - ext/or-tools/extconf.rb
99
+ - ext/or-tools/linear.cpp
100
+ - ext/or-tools/network_flows.cpp
101
+ - ext/or-tools/routing.cpp
96
102
  - ext/or-tools/vendor.rb
97
103
  - lib/or-tools.rb
98
104
  - lib/or_tools/basic_scheduler.rb
@@ -105,6 +111,8 @@ files:
105
111
  - lib/or_tools/int_var.rb
106
112
  - lib/or_tools/knapsack_solver.rb
107
113
  - lib/or_tools/linear_expr.rb
114
+ - lib/or_tools/objective_solution_printer.rb
115
+ - lib/or_tools/routing_index_manager.rb
108
116
  - lib/or_tools/routing_model.rb
109
117
  - lib/or_tools/sat_int_var.rb
110
118
  - lib/or_tools/sat_linear_expr.rb
@@ -112,12 +120,14 @@ files:
112
120
  - lib/or_tools/solver.rb
113
121
  - lib/or_tools/sudoku.rb
114
122
  - lib/or_tools/tsp.rb
123
+ - lib/or_tools/var_array_and_objective_solution_printer.rb
124
+ - lib/or_tools/var_array_solution_printer.rb
115
125
  - lib/or_tools/version.rb
116
126
  homepage: https://github.com/ankane/or-tools
117
127
  licenses:
118
128
  - MIT
119
129
  metadata: {}
120
- post_install_message:
130
+ post_install_message:
121
131
  rdoc_options: []
122
132
  require_paths:
123
133
  - lib
@@ -125,15 +135,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
125
135
  requirements:
126
136
  - - ">="
127
137
  - !ruby/object:Gem::Version
128
- version: '2.4'
138
+ version: '2.6'
129
139
  required_rubygems_version: !ruby/object:Gem::Requirement
130
140
  requirements:
131
141
  - - ">="
132
142
  - !ruby/object:Gem::Version
133
143
  version: '0'
134
144
  requirements: []
135
- rubygems_version: 3.1.2
136
- signing_key:
145
+ rubygems_version: 3.2.3
146
+ signing_key:
137
147
  specification_version: 4
138
148
  summary: Operations research tools for Ruby
139
149
  test_files: []