or-tools 0.14.0 → 0.14.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +7 -7
- data/ext/or-tools/constraint.cpp +1 -0
- data/ext/or-tools/linear.cpp +90 -3
- data/ext/or-tools/math_opt.cpp +1 -0
- data/lib/or_tools/solver.rb +5 -0
- data/lib/or_tools/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5803be6e2ff6de980c6f1a89ab9ccda1e2ee264139229bca865103c8379dc4a2
|
4
|
+
data.tar.gz: 323fda85d36cc8dadb6720a23ac3e9eaa881e3618e74044c8b04773bb979c16e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 48c9eba03b16bb2ce63edf62d52f33fc88595e691543f68dd1a2090adb7212958331534a97b801c7f54acce6626461bc0e268ac312ea34c1c50045dedcfbb3b4
|
7
|
+
data.tar.gz: 8d91150d41201f8e47129ef3b48cfb4b63b5cb91c09c87d7ef01f87de4b82ff6d287fb2ca5e3b5a4984152bdb2e5a33f4c5b8fe9495d6a9e89ab81b31c1674ac
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -93,15 +93,15 @@ Specify people and their availabililty
|
|
93
93
|
people = [
|
94
94
|
{
|
95
95
|
availability: [
|
96
|
-
{starts_at: Time.parse("
|
97
|
-
{starts_at: Time.parse("
|
96
|
+
{starts_at: Time.parse("2025-01-01 08:00:00"), ends_at: Time.parse("2025-01-01 16:00:00")},
|
97
|
+
{starts_at: Time.parse("2025-01-02 08:00:00"), ends_at: Time.parse("2025-01-02 16:00:00")}
|
98
98
|
],
|
99
99
|
max_hours: 40 # optional, applies to entire scheduling period
|
100
100
|
},
|
101
101
|
{
|
102
102
|
availability: [
|
103
|
-
{starts_at: Time.parse("
|
104
|
-
{starts_at: Time.parse("
|
103
|
+
{starts_at: Time.parse("2025-01-01 08:00:00"), ends_at: Time.parse("2025-01-01 16:00:00")},
|
104
|
+
{starts_at: Time.parse("2025-01-03 08:00:00"), ends_at: Time.parse("2025-01-03 16:00:00")}
|
105
105
|
],
|
106
106
|
max_hours: 20
|
107
107
|
}
|
@@ -112,9 +112,9 @@ Specify shifts
|
|
112
112
|
|
113
113
|
```ruby
|
114
114
|
shifts = [
|
115
|
-
{starts_at: Time.parse("
|
116
|
-
{starts_at: Time.parse("
|
117
|
-
{starts_at: Time.parse("
|
115
|
+
{starts_at: Time.parse("2025-01-01 08:00:00"), ends_at: Time.parse("2025-01-01 16:00:00")},
|
116
|
+
{starts_at: Time.parse("2025-01-02 08:00:00"), ends_at: Time.parse("2025-01-02 16:00:00")},
|
117
|
+
{starts_at: Time.parse("2025-01-03 08:00:00"), ends_at: Time.parse("2025-01-03 16:00:00")}
|
118
118
|
]
|
119
119
|
```
|
120
120
|
|
data/ext/or-tools/constraint.cpp
CHANGED
@@ -70,6 +70,7 @@ namespace Rice::detail
|
|
70
70
|
void init_constraint(Rice::Module& m) {
|
71
71
|
Rice::define_class_under<Domain>(m, "Domain")
|
72
72
|
.define_constructor(Rice::Constructor<Domain, int64_t, int64_t>())
|
73
|
+
.define_singleton_function("from_values", &Domain::FromValues)
|
73
74
|
.define_method("min", &Domain::Min)
|
74
75
|
.define_method("max", &Domain::Max);
|
75
76
|
|
data/ext/or-tools/linear.cpp
CHANGED
@@ -4,6 +4,7 @@
|
|
4
4
|
|
5
5
|
using operations_research::MPConstraint;
|
6
6
|
using operations_research::MPObjective;
|
7
|
+
using operations_research::MPSolverParameters;
|
7
8
|
using operations_research::MPSolver;
|
8
9
|
using operations_research::MPVariable;
|
9
10
|
|
@@ -56,8 +57,94 @@ void init_linear(Rice::Module& m) {
|
|
56
57
|
.define_method("set_coefficient", &MPObjective::SetCoefficient)
|
57
58
|
.define_method("set_offset", &MPObjective::SetOffset)
|
58
59
|
.define_method("set_maximization", &MPObjective::SetMaximization)
|
60
|
+
.define_method("best_bound", &MPObjective::BestBound)
|
59
61
|
.define_method("set_minimization", &MPObjective::SetMinimization);
|
60
62
|
|
63
|
+
Rice::define_class_under<MPSolverParameters>(m, "MPSolverParameters")
|
64
|
+
.define_constructor(Rice::Constructor<MPSolverParameters>())
|
65
|
+
.define_method("reset", &MPSolverParameters::Reset)
|
66
|
+
.define_method(
|
67
|
+
"relative_mip_gap=",
|
68
|
+
[](MPSolverParameters& self, double relative_mip_gap) {
|
69
|
+
self.SetDoubleParam(MPSolverParameters::DoubleParam::RELATIVE_MIP_GAP, relative_mip_gap);
|
70
|
+
})
|
71
|
+
.define_method(
|
72
|
+
"relative_mip_gap",
|
73
|
+
[](MPSolverParameters& self) {
|
74
|
+
return self.GetDoubleParam(MPSolverParameters::DoubleParam::RELATIVE_MIP_GAP);
|
75
|
+
})
|
76
|
+
.define_method(
|
77
|
+
"primal_tolerance=",
|
78
|
+
[](MPSolverParameters& self, double primal_tolerance) {
|
79
|
+
self.SetDoubleParam(MPSolverParameters::DoubleParam::PRIMAL_TOLERANCE, primal_tolerance);
|
80
|
+
})
|
81
|
+
.define_method(
|
82
|
+
"primal_tolerance",
|
83
|
+
[](MPSolverParameters& self) {
|
84
|
+
return self.GetDoubleParam(MPSolverParameters::DoubleParam::PRIMAL_TOLERANCE);
|
85
|
+
})
|
86
|
+
.define_method(
|
87
|
+
"dual_tolerance=",
|
88
|
+
[](MPSolverParameters& self, double dual_tolerance) {
|
89
|
+
self.SetDoubleParam(MPSolverParameters::DoubleParam::DUAL_TOLERANCE, dual_tolerance);
|
90
|
+
})
|
91
|
+
.define_method(
|
92
|
+
"dual_tolerance",
|
93
|
+
[](MPSolverParameters& self) {
|
94
|
+
return self.GetDoubleParam(MPSolverParameters::DoubleParam::DUAL_TOLERANCE);
|
95
|
+
})
|
96
|
+
.define_method(
|
97
|
+
"presolve=",
|
98
|
+
[](MPSolverParameters& self, bool value) {
|
99
|
+
int presolve;
|
100
|
+
if (value) {
|
101
|
+
presolve = MPSolverParameters::PresolveValues::PRESOLVE_ON;
|
102
|
+
} else {
|
103
|
+
presolve = MPSolverParameters::PresolveValues::PRESOLVE_OFF;
|
104
|
+
}
|
105
|
+
self.SetIntegerParam(MPSolverParameters::IntegerParam::PRESOLVE, presolve);
|
106
|
+
})
|
107
|
+
.define_method(
|
108
|
+
"presolve",
|
109
|
+
[](MPSolverParameters& self) {
|
110
|
+
int presolve = self.GetIntegerParam(MPSolverParameters::IntegerParam::PRESOLVE);
|
111
|
+
return presolve != MPSolverParameters::PresolveValues::PRESOLVE_OFF;
|
112
|
+
})
|
113
|
+
.define_method(
|
114
|
+
"incrementality=",
|
115
|
+
[](MPSolverParameters& self, bool value) {
|
116
|
+
int incrementality;
|
117
|
+
if (value) {
|
118
|
+
incrementality = MPSolverParameters::IncrementalityValues::INCREMENTALITY_ON;
|
119
|
+
} else {
|
120
|
+
incrementality = MPSolverParameters::IncrementalityValues::INCREMENTALITY_OFF;
|
121
|
+
}
|
122
|
+
self.SetIntegerParam(MPSolverParameters::IntegerParam::INCREMENTALITY, incrementality);
|
123
|
+
})
|
124
|
+
.define_method(
|
125
|
+
"incrementality",
|
126
|
+
[](MPSolverParameters& self) {
|
127
|
+
int incrementality = self.GetIntegerParam(MPSolverParameters::IntegerParam::INCREMENTALITY);
|
128
|
+
return incrementality != MPSolverParameters::IncrementalityValues::INCREMENTALITY_OFF;
|
129
|
+
})
|
130
|
+
.define_method(
|
131
|
+
"scaling=",
|
132
|
+
[](MPSolverParameters& self, bool value) {
|
133
|
+
int scaling;
|
134
|
+
if (value) {
|
135
|
+
scaling = MPSolverParameters::ScalingValues::SCALING_ON;
|
136
|
+
} else {
|
137
|
+
scaling = MPSolverParameters::ScalingValues::SCALING_OFF;
|
138
|
+
}
|
139
|
+
self.SetIntegerParam(MPSolverParameters::IntegerParam::SCALING, scaling);
|
140
|
+
})
|
141
|
+
.define_method(
|
142
|
+
"scaling",
|
143
|
+
[](MPSolverParameters& self) {
|
144
|
+
int scaling = self.GetIntegerParam(MPSolverParameters::IntegerParam::SCALING);
|
145
|
+
return scaling != MPSolverParameters::ScalingValues::SCALING_OFF;
|
146
|
+
});
|
147
|
+
|
61
148
|
Rice::define_class_under<MPSolver>(m, "Solver")
|
62
149
|
.define_singleton_function(
|
63
150
|
"_new",
|
@@ -109,9 +196,9 @@ void init_linear(Rice::Module& m) {
|
|
109
196
|
return self.MakeRowConstraint(lb, ub);
|
110
197
|
})
|
111
198
|
.define_method(
|
112
|
-
"
|
113
|
-
[](MPSolver& self) {
|
114
|
-
auto status = self.Solve();
|
199
|
+
"_solve",
|
200
|
+
[](MPSolver& self, MPSolverParameters& params) {
|
201
|
+
auto status = self.Solve(params);
|
115
202
|
|
116
203
|
if (status == MPSolver::ResultStatus::OPTIMAL) {
|
117
204
|
return Symbol("optimal");
|
data/ext/or-tools/math_opt.cpp
CHANGED
data/lib/or_tools/solver.rb
CHANGED
data/lib/or_tools/version.rb
CHANGED
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.14.
|
4
|
+
version: 0.14.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kane
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-12-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rice
|
@@ -89,7 +89,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
89
89
|
- !ruby/object:Gem::Version
|
90
90
|
version: '0'
|
91
91
|
requirements: []
|
92
|
-
rubygems_version: 3.5.
|
92
|
+
rubygems_version: 3.5.22
|
93
93
|
signing_key:
|
94
94
|
specification_version: 4
|
95
95
|
summary: Operations research tools for Ruby
|