or-tools 0.7.2 → 0.7.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/ext/or-tools/routing.cpp +155 -42
- data/lib/or_tools/tsp.rb +1 -7
- data/lib/or_tools/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 976e5d3e7d64ac20e1d445baa12720acd4e91469d1fddbaf8c71cf32e1bb7be6
|
4
|
+
data.tar.gz: 38d1b76452dc3df179cc7536e466846bf6030dfcd1da283393cbfa3c9c68b4b6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2612839346ab70b75cb4f307ae2116816a4638580a1e943e3c09247af4ff0e27177549ae2c170aa1b67d6453922883265c7c7c93d8dfbf573ec1bce650864bc6
|
7
|
+
data.tar.gz: 256087097f368c7c34d4affc531ef744184c897e99b0727f1c00a620644399de77b9c874e5cfc0f5a519552e965c55647146ad3b29346ebfd4ecc595a8d35068
|
data/CHANGELOG.md
CHANGED
data/ext/or-tools/routing.cpp
CHANGED
@@ -9,6 +9,7 @@ using operations_research::DefaultRoutingSearchParameters;
|
|
9
9
|
using operations_research::FirstSolutionStrategy;
|
10
10
|
using operations_research::LocalSearchMetaheuristic;
|
11
11
|
using operations_research::RoutingDimension;
|
12
|
+
using operations_research::RoutingDisjunctionIndex;
|
12
13
|
using operations_research::RoutingIndexManager;
|
13
14
|
using operations_research::RoutingModel;
|
14
15
|
using operations_research::RoutingModelParameters;
|
@@ -55,6 +56,19 @@ namespace Rice::detail
|
|
55
56
|
};
|
56
57
|
}
|
57
58
|
|
59
|
+
namespace Rice::detail
|
60
|
+
{
|
61
|
+
template<class T, class U>
|
62
|
+
class To_Ruby<std::pair<T, U>>
|
63
|
+
{
|
64
|
+
public:
|
65
|
+
VALUE convert(std::pair<T, U> const & x)
|
66
|
+
{
|
67
|
+
return rb_ary_new3(2, To_Ruby<T>().convert(x.first), To_Ruby<U>().convert(x.second));
|
68
|
+
}
|
69
|
+
};
|
70
|
+
}
|
71
|
+
|
58
72
|
void init_routing(Rice::Module& m) {
|
59
73
|
auto rb_cRoutingSearchParameters = Rice::define_class_under<RoutingSearchParameters>(m, "RoutingSearchParameters");
|
60
74
|
auto rb_cIntVar = Rice::define_class_under<operations_research::IntVar>(m, "IntVar");
|
@@ -198,8 +212,28 @@ void init_routing(Rice::Module& m) {
|
|
198
212
|
.define_method("old_end_max", &operations_research::IntervalVar::OldEndMax);
|
199
213
|
|
200
214
|
Rice::define_class_under<RoutingDimension>(m, "RoutingDimension")
|
215
|
+
.define_method("transit_value", &RoutingDimension::GetTransitValue)
|
216
|
+
// TODO GetTransitValueFromClass
|
217
|
+
.define_method("cumul_var", &RoutingDimension::CumulVar)
|
218
|
+
.define_method("transit_var", &RoutingDimension::TransitVar)
|
219
|
+
.define_method("fixed_transit_var", &RoutingDimension::FixedTransitVar)
|
220
|
+
.define_method("slack_var", &RoutingDimension::SlackVar)
|
221
|
+
.define_method("set_span_upper_bound_for_vehicle", &RoutingDimension::SetSpanUpperBoundForVehicle)
|
222
|
+
.define_method("set_span_cost_coefficient_for_vehicle", &RoutingDimension::SetSpanCostCoefficientForVehicle)
|
223
|
+
.define_method("set_span_cost_coefficient_for_all_vehicles", &RoutingDimension::SetSpanCostCoefficientForAllVehicles)
|
224
|
+
.define_method("set_global_span_cost_coefficient", &RoutingDimension::SetGlobalSpanCostCoefficient)
|
225
|
+
// alias
|
201
226
|
.define_method("global_span_cost_coefficient=", &RoutingDimension::SetGlobalSpanCostCoefficient)
|
202
|
-
.define_method("
|
227
|
+
.define_method("set_cumul_var_soft_upper_bound", &RoutingDimension::SetCumulVarSoftUpperBound)
|
228
|
+
.define_method("cumul_var_soft_upper_bound?", &RoutingDimension::HasCumulVarSoftUpperBound)
|
229
|
+
.define_method("cumul_var_soft_upper_bound", &RoutingDimension::GetCumulVarSoftUpperBound)
|
230
|
+
.define_method("cumul_var_soft_upper_bound_coefficient", &RoutingDimension::GetCumulVarSoftUpperBoundCoefficient)
|
231
|
+
.define_method("set_cumul_var_soft_lower_bound", &RoutingDimension::SetCumulVarSoftLowerBound)
|
232
|
+
.define_method("cumul_var_soft_lower_bound?", &RoutingDimension::HasCumulVarSoftLowerBound)
|
233
|
+
.define_method("cumul_var_soft_lower_bound", &RoutingDimension::GetCumulVarSoftLowerBound)
|
234
|
+
.define_method("cumul_var_soft_lower_bound_coefficient", &RoutingDimension::GetCumulVarSoftLowerBoundCoefficient);
|
235
|
+
|
236
|
+
Rice::define_class_under<RoutingDisjunctionIndex>(m, "RoutingDisjunctionIndex");
|
203
237
|
|
204
238
|
Rice::define_class_under<operations_research::Constraint>(m, "Constraint")
|
205
239
|
.define_method("post", &operations_research::Constraint::Post)
|
@@ -264,27 +298,103 @@ void init_routing(Rice::Module& m) {
|
|
264
298
|
|
265
299
|
Rice::define_class_under<RoutingModel>(m, "RoutingModel")
|
266
300
|
.define_constructor(Rice::Constructor<RoutingModel, RoutingIndexManager, RoutingModelParameters>(), Rice::Arg("index_manager"), Rice::Arg("parameters") = operations_research::DefaultRoutingModelParameters())
|
301
|
+
.define_method("register_unary_transit_vector", &RoutingModel::RegisterUnaryTransitVector)
|
267
302
|
.define_method(
|
268
|
-
"
|
303
|
+
"register_unary_transit_callback",
|
269
304
|
[](RoutingModel& self, Object callback) {
|
270
|
-
return self.
|
271
|
-
[callback](int64_t from_index
|
272
|
-
return Rice::detail::From_Ruby<int64_t>().convert(callback.call("call", from_index
|
305
|
+
return self.RegisterUnaryTransitCallback(
|
306
|
+
[callback](int64_t from_index) -> int64_t {
|
307
|
+
return Rice::detail::From_Ruby<int64_t>().convert(callback.call("call", from_index));
|
273
308
|
}
|
274
309
|
);
|
275
310
|
})
|
311
|
+
.define_method("register_transit_matrix", &RoutingModel::RegisterTransitMatrix)
|
276
312
|
.define_method(
|
277
|
-
"
|
313
|
+
"register_transit_callback",
|
278
314
|
[](RoutingModel& self, Object callback) {
|
279
|
-
return self.
|
280
|
-
[callback](int64_t from_index) -> int64_t {
|
281
|
-
return Rice::detail::From_Ruby<int64_t>().convert(callback.call("call", from_index));
|
315
|
+
return self.RegisterTransitCallback(
|
316
|
+
[callback](int64_t from_index, int64_t to_index) -> int64_t {
|
317
|
+
return Rice::detail::From_Ruby<int64_t>().convert(callback.call("call", from_index, to_index));
|
282
318
|
}
|
283
319
|
);
|
284
320
|
})
|
321
|
+
.define_method("add_dimension", &RoutingModel::AddDimension)
|
322
|
+
.define_method("add_dimension_with_vehicle_transits", &RoutingModel::AddDimensionWithVehicleTransits)
|
323
|
+
.define_method("add_dimension_with_vehicle_capacity", &RoutingModel::AddDimensionWithVehicleCapacity)
|
324
|
+
.define_method("add_dimension_with_vehicle_transit_and_capacity", &RoutingModel::AddDimensionWithVehicleTransitAndCapacity)
|
325
|
+
.define_method("add_constant_dimension_with_slack", &RoutingModel::AddConstantDimensionWithSlack)
|
326
|
+
.define_method("add_constant_dimension", &RoutingModel::AddConstantDimension)
|
327
|
+
.define_method("add_vector_dimension", &RoutingModel::AddVectorDimension)
|
328
|
+
.define_method("add_matrix_dimension", &RoutingModel::AddMatrixDimension)
|
329
|
+
// TODO AddDimensionDependentDimensionWithVehicleCapacity
|
330
|
+
// .define_method("make_path_spans_and_total_slacks", &RoutingModel::MakePathSpansAndTotalSlacks)
|
331
|
+
.define_method("all_dimension_names", &RoutingModel::GetAllDimensionNames)
|
332
|
+
// .define_method("dimensions", &RoutingModel::GetDimensions)
|
333
|
+
// .define_method("dimensions_with_soft_or_span_costs", &RoutingModel::GetDimensionsWithSoftOrSpanCosts)
|
334
|
+
.define_method("dimension?", &RoutingModel::HasDimension)
|
335
|
+
// .define_method("dimension_or_die", &RoutingModel::GetDimensionOrDie)
|
336
|
+
.define_method("mutable_dimension", &RoutingModel::GetMutableDimension)
|
337
|
+
.define_method("set_primary_constrained_dimension", &RoutingModel::SetPrimaryConstrainedDimension)
|
338
|
+
.define_method("primary_constrained_dimension", &RoutingModel::GetPrimaryConstrainedDimension)
|
339
|
+
.define_method("add_resource_group", &RoutingModel::AddResourceGroup)
|
340
|
+
.define_method("dimension_resource_group_indices", &RoutingModel::GetDimensionResourceGroupIndices)
|
341
|
+
.define_method("dimension_resource_group_index", &RoutingModel::GetDimensionResourceGroupIndex)
|
342
|
+
.define_method("add_disjunction", &RoutingModel::AddDisjunction, Rice::Arg("indices"), Rice::Arg("penalty"), Rice::Arg("max_cardinality") = (int64_t)1)
|
343
|
+
.define_method("disjunction_indices", &RoutingModel::GetDisjunctionIndices)
|
344
|
+
.define_method("disjunction_penalty", &RoutingModel::GetDisjunctionPenalty)
|
345
|
+
.define_method("disjunction_max_cardinality", &RoutingModel::GetDisjunctionMaxCardinality)
|
346
|
+
.define_method("number_of_disjunctions", &RoutingModel::GetNumberOfDisjunctions)
|
347
|
+
.define_method("mandatory_disjunctions?", &RoutingModel::HasMandatoryDisjunctions)
|
348
|
+
.define_method("max_cardinality_constrained_disjunctions?", &RoutingModel::HasMaxCardinalityConstrainedDisjunctions)
|
349
|
+
.define_method("perfect_binary_disjunctions", &RoutingModel::GetPerfectBinaryDisjunctions)
|
350
|
+
.define_method("ignore_disjunctions_already_forced_to_zero", &RoutingModel::IgnoreDisjunctionsAlreadyForcedToZero)
|
351
|
+
.define_method("add_soft_same_vehicle_constraint", &RoutingModel::AddSoftSameVehicleConstraint)
|
352
|
+
.define_method("set_allowed_vehicles_for_index", &RoutingModel::SetAllowedVehiclesForIndex)
|
353
|
+
.define_method("vehicle_allowed_for_index?", &RoutingModel::IsVehicleAllowedForIndex)
|
354
|
+
.define_method("add_pickup_and_delivery", &RoutingModel::AddPickupAndDelivery)
|
355
|
+
.define_method("add_pickup_and_delivery_sets", &RoutingModel::AddPickupAndDeliverySets)
|
356
|
+
.define_method("pickup_index_pairs", &RoutingModel::GetPickupIndexPairs)
|
357
|
+
.define_method("delivery_index_pairs", &RoutingModel::GetDeliveryIndexPairs)
|
358
|
+
// TODO SetPickupAndDeliveryPolicyOfAllVehicles
|
359
|
+
// TODO SetPickupAndDeliveryPolicyOfVehicle
|
360
|
+
// TODO GetPickupAndDeliveryPolicyOfVehicle
|
361
|
+
.define_method("num_of_singleton_nodes", &RoutingModel::GetNumOfSingletonNodes)
|
362
|
+
.define_method("unperformed_penalty", &RoutingModel::UnperformedPenalty)
|
363
|
+
.define_method("unperformed_penalty_or_value", &RoutingModel::UnperformedPenaltyOrValue)
|
285
364
|
.define_method("depot", &RoutingModel::GetDepot)
|
286
|
-
.define_method("
|
287
|
-
.define_method("
|
365
|
+
.define_method("set_maximum_number_of_active_vehicles", &RoutingModel::SetMaximumNumberOfActiveVehicles)
|
366
|
+
.define_method("maximum_number_of_active_vehicles", &RoutingModel::GetMaximumNumberOfActiveVehicles)
|
367
|
+
.define_method("set_arc_cost_evaluator_of_all_vehicles", &RoutingModel::SetArcCostEvaluatorOfAllVehicles)
|
368
|
+
.define_method("set_arc_cost_evaluator_of_vehicle", &RoutingModel::SetArcCostEvaluatorOfVehicle)
|
369
|
+
.define_method("set_fixed_cost_of_all_vehicles", &RoutingModel::SetFixedCostOfAllVehicles)
|
370
|
+
.define_method("set_fixed_cost_of_vehicle", &RoutingModel::SetFixedCostOfVehicle)
|
371
|
+
.define_method("fixed_cost_of_vehicle", &RoutingModel::GetFixedCostOfVehicle)
|
372
|
+
.define_method("set_amortized_cost_factors_of_all_vehicles", &RoutingModel::SetAmortizedCostFactorsOfAllVehicles)
|
373
|
+
.define_method("set_amortized_cost_factors_of_vehicle", &RoutingModel::SetAmortizedCostFactorsOfVehicle)
|
374
|
+
.define_method("amortized_linear_cost_factor_of_vehicles", &RoutingModel::GetAmortizedLinearCostFactorOfVehicles)
|
375
|
+
.define_method("amortized_quadratic_cost_factor_of_vehicles", &RoutingModel::GetAmortizedQuadraticCostFactorOfVehicles)
|
376
|
+
.define_method("set_vehicle_used_when_empty", &RoutingModel::SetVehicleUsedWhenEmpty)
|
377
|
+
.define_method("vehicle_used_when_empty?", &RoutingModel::IsVehicleUsedWhenEmpty)
|
378
|
+
.define_method("add_variable_minimized_by_finalizer", &RoutingModel::AddVariableMinimizedByFinalizer)
|
379
|
+
.define_method("add_variable_maximized_by_finalizer", &RoutingModel::AddVariableMaximizedByFinalizer)
|
380
|
+
.define_method("add_weighted_variable_minimized_by_finalizer", &RoutingModel::AddWeightedVariableMinimizedByFinalizer)
|
381
|
+
.define_method("add_weighted_variable_maximized_by_finalizer", &RoutingModel::AddWeightedVariableMaximizedByFinalizer)
|
382
|
+
.define_method("add_variable_target_to_finalizer", &RoutingModel::AddVariableTargetToFinalizer)
|
383
|
+
.define_method("add_weighted_variable_target_to_finalizer", &RoutingModel::AddWeightedVariableTargetToFinalizer)
|
384
|
+
.define_method("close_model", &RoutingModel::CloseModel)
|
385
|
+
.define_method(
|
386
|
+
"solve",
|
387
|
+
[](RoutingModel& self) {
|
388
|
+
return self.Solve();
|
389
|
+
})
|
390
|
+
.define_method(
|
391
|
+
"solve_with_parameters",
|
392
|
+
[](RoutingModel& self, const RoutingSearchParameters& search_parameters) {
|
393
|
+
return self.SolveWithParameters(search_parameters);
|
394
|
+
})
|
395
|
+
.define_method("compute_lower_bound", &RoutingModel::ComputeLowerBound)
|
396
|
+
.define_method("status",
|
397
|
+
[](RoutingModel& self) {
|
288
398
|
auto status = self.status();
|
289
399
|
|
290
400
|
if (status == RoutingModel::ROUTING_NOT_SOLVED) {
|
@@ -301,30 +411,22 @@ void init_routing(Rice::Module& m) {
|
|
301
411
|
throw std::runtime_error("Unknown solver status");
|
302
412
|
}
|
303
413
|
})
|
304
|
-
.define_method("
|
305
|
-
.define_method("
|
306
|
-
.define_method("
|
307
|
-
.define_method("
|
308
|
-
.define_method("
|
309
|
-
.define_method("
|
310
|
-
.define_method("
|
311
|
-
.define_method(
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
.define_method(
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
})
|
321
|
-
.define_method(
|
322
|
-
"add_disjunction",
|
323
|
-
[](RoutingModel& self, std::vector<int64_t> indices, int64_t penalty) {
|
324
|
-
self.AddDisjunction(indices, penalty);
|
325
|
-
})
|
326
|
-
.define_method("add_pickup_and_delivery", &RoutingModel::AddPickupAndDelivery)
|
327
|
-
.define_method("solver", &RoutingModel::solver)
|
414
|
+
.define_method("apply_locks", &RoutingModel::ApplyLocks)
|
415
|
+
.define_method("apply_locks_to_all_vehicles", &RoutingModel::ApplyLocksToAllVehicles)
|
416
|
+
.define_method("pre_assignment", &RoutingModel::PreAssignment)
|
417
|
+
.define_method("mutable_pre_assignment", &RoutingModel::MutablePreAssignment)
|
418
|
+
.define_method("write_assignment", &RoutingModel::WriteAssignment)
|
419
|
+
.define_method("read_assignment", &RoutingModel::ReadAssignment)
|
420
|
+
.define_method("restore_assignment", &RoutingModel::RestoreAssignment)
|
421
|
+
.define_method("read_assignment_from_routes", &RoutingModel::ReadAssignmentFromRoutes)
|
422
|
+
.define_method("routes_to_assignment", &RoutingModel::RoutesToAssignment)
|
423
|
+
.define_method("assignment_to_routes", &RoutingModel::AssignmentToRoutes)
|
424
|
+
.define_method("compact_assignment", &RoutingModel::CompactAssignment)
|
425
|
+
.define_method("compact_and_check_assignment", &RoutingModel::CompactAndCheckAssignment)
|
426
|
+
.define_method("add_to_assignment", &RoutingModel::AddToAssignment)
|
427
|
+
.define_method("add_interval_to_assignment", &RoutingModel::AddIntervalToAssignment)
|
428
|
+
// TODO PackCumulsOfOptimizerDimensionsFromAssignment
|
429
|
+
// TODO AddLocalSearchFilter
|
328
430
|
.define_method("start", &RoutingModel::Start)
|
329
431
|
.define_method("end", &RoutingModel::End)
|
330
432
|
.define_method("start?", &RoutingModel::IsStart)
|
@@ -333,12 +435,23 @@ void init_routing(Rice::Module& m) {
|
|
333
435
|
.define_method("next", &RoutingModel::Next)
|
334
436
|
.define_method("vehicle_used?", &RoutingModel::IsVehicleUsed)
|
335
437
|
.define_method("next_var", &RoutingModel::NextVar)
|
438
|
+
.define_method("active_var", &RoutingModel::ActiveVar)
|
439
|
+
.define_method("active_vehicle_var", &RoutingModel::ActiveVehicleVar)
|
440
|
+
.define_method("vehicle_route_considered_var", &RoutingModel::VehicleRouteConsideredVar)
|
441
|
+
.define_method("vehicle_var", &RoutingModel::VehicleVar)
|
442
|
+
.define_method("resource_var", &RoutingModel::ResourceVar)
|
443
|
+
.define_method("cost_var", &RoutingModel::CostVar)
|
336
444
|
.define_method("arc_cost_for_vehicle", &RoutingModel::GetArcCostForVehicle)
|
337
|
-
.define_method("
|
338
|
-
.define_method("
|
339
|
-
.define_method(
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
445
|
+
.define_method("costs_are_homogeneous_across_vehicles?", &RoutingModel::CostsAreHomogeneousAcrossVehicles)
|
446
|
+
.define_method("homogeneous_cost", &RoutingModel::GetHomogeneousCost)
|
447
|
+
.define_method("arc_cost_for_first_solution", &RoutingModel::GetArcCostForFirstSolution)
|
448
|
+
.define_method("cost_classes_count", &RoutingModel::GetCostClassesCount)
|
449
|
+
.define_method("non_zero_cost_classes_count", &RoutingModel::GetNonZeroCostClassesCount)
|
450
|
+
.define_method("vehicle_classes_count", &RoutingModel::GetVehicleClassesCount)
|
451
|
+
.define_method("arc_is_more_constrained_than_arc?", &RoutingModel::ArcIsMoreConstrainedThanArc)
|
452
|
+
.define_method("solver", &RoutingModel::solver)
|
453
|
+
.define_method("nodes", &RoutingModel::nodes)
|
454
|
+
.define_method("vehicles", &RoutingModel::vehicles)
|
455
|
+
.define_method("size", &RoutingModel::Size)
|
456
|
+
.define_method("matching_model?", &RoutingModel::IsMatchingModel);
|
344
457
|
}
|
data/lib/or_tools/tsp.rb
CHANGED
@@ -22,13 +22,7 @@ module ORTools
|
|
22
22
|
manager = ORTools::RoutingIndexManager.new(locations.size, 1, 0)
|
23
23
|
routing = ORTools::RoutingModel.new(manager)
|
24
24
|
|
25
|
-
|
26
|
-
from_node = manager.index_to_node(from_index)
|
27
|
-
to_node = manager.index_to_node(to_index)
|
28
|
-
distance_matrix[from_node][to_node]
|
29
|
-
end
|
30
|
-
|
31
|
-
transit_callback_index = routing.register_transit_callback(distance_callback)
|
25
|
+
transit_callback_index = routing.register_transit_matrix(distance_matrix)
|
32
26
|
routing.set_arc_cost_evaluator_of_all_vehicles(transit_callback_index)
|
33
27
|
assignment = routing.solve(first_solution_strategy: :path_cheapest_arc)
|
34
28
|
|
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.7.
|
4
|
+
version: 0.7.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kane
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-07-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rice
|