or-tools 0.3.1 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []