From acf34ee59b0a24613d59d8edcb1ef843c1d03295 Mon Sep 17 00:00:00 2001 From: Corentin Le Molgat Date: Fri, 11 Jan 2019 16:49:07 +0100 Subject: [PATCH] Update samples --- .../samples/SimpleRoutingProgram.cs | 21 ++++++------- .../samples/SimpleRoutingProgram.java | 10 +++++-- ortools/constraint_solver/samples/Tsp.cs | 1 + ortools/constraint_solver/samples/Tsp.java | 19 ++++++------ .../samples/TspDistanceMatrix.cs | 1 + .../samples/TspDistanceMatrix.java | 16 +++++----- ortools/constraint_solver/samples/Vrp.cs | 1 + ortools/constraint_solver/samples/Vrp.java | 16 +++++----- .../constraint_solver/samples/VrpCapacity.cs | 2 ++ .../samples/VrpCapacity.java | 30 +++++++++---------- .../constraint_solver/samples/VrpDropNodes.cs | 2 ++ .../samples/VrpDropNodes.java | 30 +++++++++---------- .../samples/VrpGlobalSpan.cs | 1 + .../samples/VrpGlobalSpan.java | 16 +++++----- .../samples/VrpStartsEnds.cs | 1 + .../samples/VrpStartsEnds.java | 16 +++++----- .../samples/VrpTimeWindows.cs | 1 + .../samples/VrpTimeWindows.java | 20 ++++++------- .../samples/simple_routing_program.cc | 11 +++++-- .../samples/simple_routing_program.py | 11 +++++-- ortools/constraint_solver/samples/tsp.cc | 8 +++-- ortools/constraint_solver/samples/tsp.py | 6 ++-- .../samples/tsp_distance_matrix.cc | 6 ++-- .../samples/tsp_distance_matrix.py | 6 ++-- ortools/constraint_solver/samples/vrp.cc | 6 ++-- ortools/constraint_solver/samples/vrp.py | 6 ++-- .../constraint_solver/samples/vrp_capacity.cc | 10 +++++-- .../constraint_solver/samples/vrp_capacity.py | 9 +++--- .../samples/vrp_drop_nodes.cc | 10 +++++-- .../samples/vrp_drop_nodes.py | 14 ++++++--- .../samples/vrp_global_span.cc | 6 ++-- .../samples/vrp_global_span.py | 6 ++-- .../samples/vrp_starts_ends.cc | 6 ++-- .../samples/vrp_starts_ends.py | 8 ++--- .../samples/vrp_time_windows.cc | 6 ++-- .../samples/vrp_time_windows.py | 1 + 36 files changed, 199 insertions(+), 141 deletions(-) diff --git a/ortools/constraint_solver/samples/SimpleRoutingProgram.cs b/ortools/constraint_solver/samples/SimpleRoutingProgram.cs index aa6d00443a..c1d26e6bfd 100644 --- a/ortools/constraint_solver/samples/SimpleRoutingProgram.cs +++ b/ortools/constraint_solver/samples/SimpleRoutingProgram.cs @@ -32,9 +32,9 @@ public class SimpleRoutingProgram { // Create Routing Index Manager // [START index_manager] RoutingIndexManager manager = new RoutingIndexManager( - numLocation, - numVehicles, - depot); + numLocation, + numVehicles, + depot); // [END index_manager] // Create Routing Model. @@ -44,13 +44,14 @@ public class SimpleRoutingProgram { // Define cost of each arc. // [START arc_cost] - routing.SetArcCostEvaluatorOfAllVehicles( - routing.RegisterTransitCallback( - (long fromIndex, long toIndex) => { - var fromNode = manager.IndexToNode(fromIndex); - var toNode = manager.IndexToNode(toIndex); - return Math.Abs(toNode - fromNode); } - )); + int transitCallbackIndex = routing.RegisterTransitCallback( + (long fromIndex, long toIndex) => { + // Convert from routing variable Index to distance matrix NodeIndex. + var fromNode = manager.IndexToNode(fromIndex); + var toNode = manager.IndexToNode(toIndex); + return Math.Abs(toNode - fromNode); } + ); + routing.SetArcCostEvaluatorOfAllVehicles(transitCallbackIndex); // [END arc_cost] // Setting first solution heuristic. diff --git a/ortools/constraint_solver/samples/SimpleRoutingProgram.java b/ortools/constraint_solver/samples/SimpleRoutingProgram.java index aa909fe3c9..09ad788ba5 100644 --- a/ortools/constraint_solver/samples/SimpleRoutingProgram.java +++ b/ortools/constraint_solver/samples/SimpleRoutingProgram.java @@ -53,12 +53,16 @@ public class SimpleRoutingProgram { // Define cost of each arc. // [START arc_cost] - routing.setArcCostEvaluatorOfAllVehicles(routing.registerTransitCallback(new LongLongToLong() { + int transitCallbackIndex = routing.registerTransitCallback(new LongLongToLong() { @Override public long run(long fromIndex, long toIndex) { - return abs(fromIndex - toIndex); + // Convert from routing variable Index to user NodeIndex. + int fromNode = manager.indexToNode(fromIndex); + int toNode = manager.indexToNode(toIndex); + return abs(toNode - fromNode); } - })); + }); + routing.setArcCostEvaluatorOfAllVehicles(transitCallbackIndex); // [END arc_cost] // Setting first solution heuristic. diff --git a/ortools/constraint_solver/samples/Tsp.cs b/ortools/constraint_solver/samples/Tsp.cs index 237c4c342a..5ba99fcb83 100644 --- a/ortools/constraint_solver/samples/Tsp.cs +++ b/ortools/constraint_solver/samples/Tsp.cs @@ -83,6 +83,7 @@ public class Tsp { /// Returns the manhattan distance between the two nodes /// public override long Run(long FromIndex, long ToIndex) { + // Convert from routing variable Index to distance matrix NodeIndex. int FromNode = indexManager_.IndexToNode(FromIndex); int ToNode = indexManager_.IndexToNode(ToIndex); return distancesMatrix_[FromNode, ToNode]; diff --git a/ortools/constraint_solver/samples/Tsp.java b/ortools/constraint_solver/samples/Tsp.java index 24e7473d7a..fb5aeaa38f 100644 --- a/ortools/constraint_solver/samples/Tsp.java +++ b/ortools/constraint_solver/samples/Tsp.java @@ -77,14 +77,14 @@ public class Tsp { static class ManhattanDistance extends LongLongToLong { public ManhattanDistance(DataModel data, RoutingIndexManager manager) { // precompute distance between location to have distance callback in O(1) - distanceMatrix_ = new long[data.locations.length][data.locations.length]; - indexManager_ = manager; + distanceMatrix = new long[data.locations.length][data.locations.length]; + indexManager = manager; for (int fromNode = 0; fromNode < data.locations.length; ++fromNode) { for (int toNode = 0; toNode < data.locations.length; ++toNode) { if (fromNode == toNode) { - distanceMatrix_[fromNode][toNode] = 0; + distanceMatrix[fromNode][toNode] = 0; } else { - distanceMatrix_[fromNode][toNode] = + distanceMatrix[fromNode][toNode] = (long) abs(data.locations[toNode][0] - data.locations[fromNode][0]) + (long) abs(data.locations[toNode][1] - data.locations[fromNode][1]); } @@ -94,12 +94,13 @@ public class Tsp { @Override public long run(long fromIndex, long toIndex) { - int fromNode = indexManager_.indexToNode(fromIndex); - int toNode = indexManager_.indexToNode(toIndex); - return distanceMatrix_[fromNode][toNode]; + // Convert from routing variable Index to distance matrix NodeIndex. + int fromNode = indexManager.indexToNode(fromIndex); + int toNode = indexManager.indexToNode(toIndex); + return distanceMatrix[fromNode][toNode]; } - private final long[][] distanceMatrix_; - private final RoutingIndexManager indexManager_; + private final long[][] distanceMatrix; + private final RoutingIndexManager indexManager; } // [END manhattan_distance] diff --git a/ortools/constraint_solver/samples/TspDistanceMatrix.cs b/ortools/constraint_solver/samples/TspDistanceMatrix.cs index b6e4b0fad7..0ad819773d 100644 --- a/ortools/constraint_solver/samples/TspDistanceMatrix.cs +++ b/ortools/constraint_solver/samples/TspDistanceMatrix.cs @@ -101,6 +101,7 @@ public class TspDistanceMatrix { // [START arc_cost] int transitCallbackIndex = routing.RegisterTransitCallback( (long fromIndex, long toIndex) => { + // Convert from routing variable Index to distance matrix NodeIndex. var fromNode = manager.IndexToNode(fromIndex); var toNode = manager.IndexToNode(toIndex); return data.GetDistanceMatrix()[fromNode, toNode]; } diff --git a/ortools/constraint_solver/samples/TspDistanceMatrix.java b/ortools/constraint_solver/samples/TspDistanceMatrix.java index 6943ecfaa5..25f45d2530 100644 --- a/ortools/constraint_solver/samples/TspDistanceMatrix.java +++ b/ortools/constraint_solver/samples/TspDistanceMatrix.java @@ -69,18 +69,18 @@ public class TspDistanceMatrix { /// two different indices. static class ManhattanDistance extends LongLongToLong { public ManhattanDistance(DataModel data, RoutingIndexManager manager) { - // precompute distance between location to have distance callback in O(1) - distanceMatrix_ = data.distanceMatrix; - indexManager_ = manager; + distanceMatrix = data.distanceMatrix; + indexManager = manager; } @Override public long run(long fromIndex, long toIndex) { - int fromNode = indexManager_.indexToNode(fromIndex); - int toNode = indexManager_.indexToNode(toIndex); - return distanceMatrix_[fromNode][toNode]; + // Convert from routing variable Index to distance matrix NodeIndex. + int fromNode = indexManager.indexToNode(fromIndex); + int toNode = indexManager.indexToNode(toIndex); + return distanceMatrix[fromNode][toNode]; } - private final long[][] distanceMatrix_; - private final RoutingIndexManager indexManager_; + private final long[][] distanceMatrix; + private final RoutingIndexManager indexManager; } // [END manhattan_distance] diff --git a/ortools/constraint_solver/samples/Vrp.cs b/ortools/constraint_solver/samples/Vrp.cs index 2a93867faf..d37dcedb70 100644 --- a/ortools/constraint_solver/samples/Vrp.cs +++ b/ortools/constraint_solver/samples/Vrp.cs @@ -107,6 +107,7 @@ public class Vrp { // [START arc_cost] int transitCallbackIndex = routing.RegisterTransitCallback( (long fromIndex, long toIndex) => { + // Convert from routing variable Index to distance matrix NodeIndex. var fromNode = manager.IndexToNode(fromIndex); var toNode = manager.IndexToNode(toIndex); return data.GetDistanceMatrix()[fromNode, toNode]; } diff --git a/ortools/constraint_solver/samples/Vrp.java b/ortools/constraint_solver/samples/Vrp.java index fb4dee54aa..dcb4fb217a 100644 --- a/ortools/constraint_solver/samples/Vrp.java +++ b/ortools/constraint_solver/samples/Vrp.java @@ -69,18 +69,18 @@ public class Vrp { /// two different indices. static class ManhattanDistance extends LongLongToLong { public ManhattanDistance(DataModel data, RoutingIndexManager manager) { - // precompute distance between location to have distance callback in O(1) - distanceMatrix_ = data.distanceMatrix; - indexManager_ = manager; + distanceMatrix = data.distanceMatrix; + indexManager = manager; } @Override public long run(long fromIndex, long toIndex) { - int fromNode = indexManager_.indexToNode(fromIndex); - int toNode = indexManager_.indexToNode(toIndex); - return distanceMatrix_[fromNode][toNode]; + // Convert from routing variable Index to distance matrix NodeIndex. + int fromNode = indexManager.indexToNode(fromIndex); + int toNode = indexManager.indexToNode(toIndex); + return distanceMatrix[fromNode][toNode]; } - private final long[][] distanceMatrix_; - private final RoutingIndexManager indexManager_; + private final long[][] distanceMatrix; + private final RoutingIndexManager indexManager; } // [END manhattan_distance] diff --git a/ortools/constraint_solver/samples/VrpCapacity.cs b/ortools/constraint_solver/samples/VrpCapacity.cs index 335a35ee4b..87adb67b33 100644 --- a/ortools/constraint_solver/samples/VrpCapacity.cs +++ b/ortools/constraint_solver/samples/VrpCapacity.cs @@ -119,6 +119,7 @@ public class VrpCapacity { // [START arc_cost] int transitCallbackIndex = routing.RegisterTransitCallback( (long fromIndex, long toIndex) => { + // Convert from routing variable Index to distance matrix NodeIndex. var fromNode = manager.IndexToNode(fromIndex); var toNode = manager.IndexToNode(toIndex); return data.GetDistanceMatrix()[fromNode, toNode]; } @@ -130,6 +131,7 @@ public class VrpCapacity { // [START capacity_constraint] int demandCallbackIndex = routing.RegisterUnaryTransitCallback( (long fromIndex) => { + // Convert from routing variable Index to demand NodeIndex. var fromNode = manager.IndexToNode(fromIndex); return data.GetDemands()[fromNode]; } ); diff --git a/ortools/constraint_solver/samples/VrpCapacity.java b/ortools/constraint_solver/samples/VrpCapacity.java index a6c7ff01ef..4af7b7a751 100644 --- a/ortools/constraint_solver/samples/VrpCapacity.java +++ b/ortools/constraint_solver/samples/VrpCapacity.java @@ -74,36 +74,36 @@ public class VrpCapacity { /// two different indices. static class ManhattanDistance extends LongLongToLong { public ManhattanDistance(DataModel data, RoutingIndexManager manager) { - // precompute distance between location to have distance callback in O(1) - distanceMatrix_ = data.distanceMatrix; - indexManager_ = manager; + distanceMatrix = data.distanceMatrix; + indexManager = manager; } @Override public long run(long fromIndex, long toIndex) { - int fromNode = indexManager_.indexToNode(fromIndex); - int toNode = indexManager_.indexToNode(toIndex); - return distanceMatrix_[fromNode][toNode]; + // Convert from routing variable Index to distance matrix NodeIndex. + int fromNode = indexManager.indexToNode(fromIndex); + int toNode = indexManager.indexToNode(toIndex); + return distanceMatrix[fromNode][toNode]; } - private final long[][] distanceMatrix_; - private final RoutingIndexManager indexManager_; + private final long[][] distanceMatrix; + private final RoutingIndexManager indexManager; } // [END manhattan_distance] // [START demands] static class DemandCallback extends LongToLong { public DemandCallback(DataModel data, RoutingIndexManager manager) { - // precompute distance between location to have distance callback in O(1) - demands_ = data.demands; - indexManager_ = manager; + demands = data.demands; + indexManager = manager; } @Override public long run(long fromIndex) { - int fromNode = indexManager_.indexToNode(fromIndex); - return demands_[fromNode]; + // Convert from routing variable Index to demand NodeIndex. + int fromNode = indexManager.indexToNode(fromIndex); + return demands[fromNode]; } - private final long[] demands_; - private final RoutingIndexManager indexManager_; + private final long[] demands; + private final RoutingIndexManager indexManager; } // [END demands] diff --git a/ortools/constraint_solver/samples/VrpDropNodes.cs b/ortools/constraint_solver/samples/VrpDropNodes.cs index 9a98f82ffc..bf2a2918d8 100644 --- a/ortools/constraint_solver/samples/VrpDropNodes.cs +++ b/ortools/constraint_solver/samples/VrpDropNodes.cs @@ -131,6 +131,7 @@ public class VrpDropNodes { // [START arc_cost] int transitCallbackIndex = routing.RegisterTransitCallback( (long fromIndex, long toIndex) => { + // Convert from routing variable Index to distance matrix NodeIndex. var fromNode = manager.IndexToNode(fromIndex); var toNode = manager.IndexToNode(toIndex); return data.GetDistanceMatrix()[fromNode, toNode]; } @@ -142,6 +143,7 @@ public class VrpDropNodes { // [START capacity_constraint] int demandCallbackIndex = routing.RegisterUnaryTransitCallback( (long fromIndex) => { + // Convert from routing variable Index to demand NodeIndex. var fromNode = manager.IndexToNode(fromIndex); return data.GetDemands()[fromNode]; } ); diff --git a/ortools/constraint_solver/samples/VrpDropNodes.java b/ortools/constraint_solver/samples/VrpDropNodes.java index 18b46fc7de..2d0a56c1c8 100644 --- a/ortools/constraint_solver/samples/VrpDropNodes.java +++ b/ortools/constraint_solver/samples/VrpDropNodes.java @@ -74,35 +74,35 @@ public class VrpDropNodes { /// two different indices. static class ManhattanDistance extends LongLongToLong { public ManhattanDistance(DataModel data, RoutingIndexManager manager) { - // precompute distance between location to have distance callback in O(1) - distanceMatrix_ = data.distanceMatrix; - indexManager_ = manager; + distanceMatrix = data.distanceMatrix; + indexManager = manager; } @Override public long run(long fromIndex, long toIndex) { - int fromNode = indexManager_.indexToNode(fromIndex); - int toNode = indexManager_.indexToNode(toIndex); - return distanceMatrix_[fromNode][toNode]; + // Convert from routing variable Index to distance matrix NodeIndex. + int fromNode = indexManager.indexToNode(fromIndex); + int toNode = indexManager.indexToNode(toIndex); + return distanceMatrix[fromNode][toNode]; } - private final long[][] distanceMatrix_; - private final RoutingIndexManager indexManager_; + private final long[][] distanceMatrix; + private final RoutingIndexManager indexManager; } // [END manhattan_distance] // [START demands] static class DemandCallback extends LongToLong { public DemandCallback(DataModel data, RoutingIndexManager manager) { - // precompute distance between location to have distance callback in O(1) - demands_ = data.demands; - indexManager_ = manager; + demands = data.demands; + indexManager = manager; } @Override public long run(long fromIndex) { - int fromNode = indexManager_.indexToNode(fromIndex); - return demands_[fromNode]; + // Convert from routing variable Index to demands NodeIndex. + int fromNode = indexManager.indexToNode(fromIndex); + return demands[fromNode]; } - private final long[] demands_; - private final RoutingIndexManager indexManager_; + private final long[] demands; + private final RoutingIndexManager indexManager; } // [END demands] diff --git a/ortools/constraint_solver/samples/VrpGlobalSpan.cs b/ortools/constraint_solver/samples/VrpGlobalSpan.cs index 3d52ee7cc0..fcdd681755 100644 --- a/ortools/constraint_solver/samples/VrpGlobalSpan.cs +++ b/ortools/constraint_solver/samples/VrpGlobalSpan.cs @@ -108,6 +108,7 @@ public class VrpGlobalSpan { // [START arc_cost] int transitCallbackIndex = routing.RegisterTransitCallback( (long fromIndex, long toIndex) => { + // Convert from routing variable Index to distance matrix NodeIndex. var fromNode = manager.IndexToNode(fromIndex); var toNode = manager.IndexToNode(toIndex); return data.GetDistanceMatrix()[fromNode, toNode]; } diff --git a/ortools/constraint_solver/samples/VrpGlobalSpan.java b/ortools/constraint_solver/samples/VrpGlobalSpan.java index 7bd8e372cc..eeadbf8c98 100644 --- a/ortools/constraint_solver/samples/VrpGlobalSpan.java +++ b/ortools/constraint_solver/samples/VrpGlobalSpan.java @@ -70,18 +70,18 @@ public class VrpGlobalSpan { /// two different indices. static class ManhattanDistance extends LongLongToLong { public ManhattanDistance(DataModel data, RoutingIndexManager manager) { - // precompute distance between location to have distance callback in O(1) - distanceMatrix_ = data.distanceMatrix; - indexManager_ = manager; + distanceMatrix = data.distanceMatrix; + indexManager = manager; } @Override public long run(long fromIndex, long toIndex) { - int fromNode = indexManager_.indexToNode(fromIndex); - int toNode = indexManager_.indexToNode(toIndex); - return distanceMatrix_[fromNode][toNode]; + // Convert from routing variable Index to distance matrix NodeIndex. + int fromNode = indexManager.indexToNode(fromIndex); + int toNode = indexManager.indexToNode(toIndex); + return distanceMatrix[fromNode][toNode]; } - private final long[][] distanceMatrix_; - private final RoutingIndexManager indexManager_; + private final long[][] distanceMatrix; + private final RoutingIndexManager indexManager; } // [END manhattan_distance] diff --git a/ortools/constraint_solver/samples/VrpStartsEnds.cs b/ortools/constraint_solver/samples/VrpStartsEnds.cs index a2bf45ce0c..2f7d876094 100644 --- a/ortools/constraint_solver/samples/VrpStartsEnds.cs +++ b/ortools/constraint_solver/samples/VrpStartsEnds.cs @@ -114,6 +114,7 @@ public class VrpStartsEnds { // [START arc_cost] int transitCallbackIndex = routing.RegisterTransitCallback( (long fromIndex, long toIndex) => { + // Convert from routing variable Index to distance matrix NodeIndex. var fromNode = manager.IndexToNode(fromIndex); var toNode = manager.IndexToNode(toIndex); return data.GetDistanceMatrix()[fromNode, toNode]; } diff --git a/ortools/constraint_solver/samples/VrpStartsEnds.java b/ortools/constraint_solver/samples/VrpStartsEnds.java index 561a4d862d..3b36d8624f 100644 --- a/ortools/constraint_solver/samples/VrpStartsEnds.java +++ b/ortools/constraint_solver/samples/VrpStartsEnds.java @@ -72,18 +72,18 @@ public class VrpStartsEnds { /// two different indices. static class ManhattanDistance extends LongLongToLong { public ManhattanDistance(DataModel data, RoutingIndexManager manager) { - // precompute distance between location to have distance callback in O(1) - distanceMatrix_ = data.distanceMatrix; - indexManager_ = manager; + distanceMatrix = data.distanceMatrix; + indexManager = manager; } @Override public long run(long fromIndex, long toIndex) { - int fromNode = indexManager_.indexToNode(fromIndex); - int toNode = indexManager_.indexToNode(toIndex); - return distanceMatrix_[fromNode][toNode]; + // Convert from routing variable Index to distance matrix NodeIndex. + int fromNode = indexManager.indexToNode(fromIndex); + int toNode = indexManager.indexToNode(toIndex); + return distanceMatrix[fromNode][toNode]; } - private final long[][] distanceMatrix_; - private final RoutingIndexManager indexManager_; + private final long[][] distanceMatrix; + private final RoutingIndexManager indexManager; } // [END manhattan_distance] diff --git a/ortools/constraint_solver/samples/VrpTimeWindows.cs b/ortools/constraint_solver/samples/VrpTimeWindows.cs index 6bd3b82abd..31b9de6efa 100644 --- a/ortools/constraint_solver/samples/VrpTimeWindows.cs +++ b/ortools/constraint_solver/samples/VrpTimeWindows.cs @@ -141,6 +141,7 @@ public class VrpTimeWindows { // [START arc_cost] int transitCallbackIndex = routing.RegisterTransitCallback( (long fromIndex, long toIndex) => { + // Convert from routing variable Index to time matrix NodeIndex. var fromNode = manager.IndexToNode(fromIndex); var toNode = manager.IndexToNode(toIndex); return data.GetTimeMatrix()[fromNode, toNode]; } diff --git a/ortools/constraint_solver/samples/VrpTimeWindows.java b/ortools/constraint_solver/samples/VrpTimeWindows.java index c4a548dffa..2a92408e6e 100644 --- a/ortools/constraint_solver/samples/VrpTimeWindows.java +++ b/ortools/constraint_solver/samples/VrpTimeWindows.java @@ -84,23 +84,23 @@ public class VrpTimeWindows { } // [END data_model] - // [START times] + // [START time_callback] static class TimeCallback extends LongLongToLong { public TimeCallback(DataModel data, RoutingIndexManager manager) { - // precompute distance between location to have distance callback in O(1) - timeMatrix_ = data.timeMatrix; - indexManager_ = manager; + timeMatrix = data.timeMatrix; + indexManager = manager; } @Override public long run(long fromIndex, long toIndex) { - int fromNode = indexManager_.indexToNode(fromIndex); - int toNode = indexManager_.indexToNode(toIndex); - return timeMatrix_[fromNode][toNode]; + // Convert from routing variable Index to time matrix NodeIndex. + int fromNode = indexManager.indexToNode(fromIndex); + int toNode = indexManager.indexToNode(toIndex); + return timeMatrix[fromNode][toNode]; } - private final long[][] timeMatrix_; - private final RoutingIndexManager indexManager_; + private final long[][] timeMatrix; + private final RoutingIndexManager indexManager; } - // [END times] + // [END time_callback] // [START solution_printer] /// @brief Print the solution. diff --git a/ortools/constraint_solver/samples/simple_routing_program.cc b/ortools/constraint_solver/samples/simple_routing_program.cc index b5ca91a0e7..f168db55db 100644 --- a/ortools/constraint_solver/samples/simple_routing_program.cc +++ b/ortools/constraint_solver/samples/simple_routing_program.cc @@ -13,6 +13,7 @@ // [START program] // [START import] +#include #include "ortools/constraint_solver/routing.h" #include "ortools/constraint_solver/routing_enums.pb.h" #include "ortools/constraint_solver/routing_index_manager.h" @@ -41,8 +42,14 @@ void SimpleRoutingProgram() { // Define cost of each arc. // [START arc_cost] - routing.SetArcCostEvaluatorOfAllVehicles( - routing.RegisterTransitCallback([](int64, int64) -> int64 { return 1; })); + int distance_call_index = routing.RegisterTransitCallback( + [&manager](int64 from_index, int64 to_index) -> int64 { + // Convert from routing variable Index to user NodeIndex. + auto from_node = manager.IndexToNode(from_index).value(); + auto to_node = manager.IndexToNode(to_index).value(); + return std::abs(to_node - from_node); + }); + routing.SetArcCostEvaluatorOfAllVehicles(distance_call_index); // [END arc_cost] // Setting first solution heuristic. diff --git a/ortools/constraint_solver/samples/simple_routing_program.py b/ortools/constraint_solver/samples/simple_routing_program.py index cbba4de68d..f5baf7b158 100644 --- a/ortools/constraint_solver/samples/simple_routing_program.py +++ b/ortools/constraint_solver/samples/simple_routing_program.py @@ -43,8 +43,15 @@ def main(): # Define cost of each arc. # [START arc_cost] - routing.SetArcCostEvaluatorOfAllVehicles( - routing.RegisterTransitCallback(lambda from_index, to_index: 1)) + def distance_callback(from_index, to_index): + """Returns the absolute difference between the two nodes.""" + # Convert from routing variable Index to user NodeIndex. + from_node = int(manager.IndexToNode(from_index)) + to_node = int(manager.IndexToNode(to_index)) + return abs(to_node - from_node) + + transit_callback_index = routing.RegisterTransitCallback(distance_callback) + routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index) # [END arc_cost] # Setting first solution heuristic. diff --git a/ortools/constraint_solver/samples/tsp.cc b/ortools/constraint_solver/samples/tsp.cc index 656caa3851..4c13618491 100644 --- a/ortools/constraint_solver/samples/tsp.cc +++ b/ortools/constraint_solver/samples/tsp.cc @@ -67,7 +67,7 @@ struct DataModel { std::vector> GenerateManhattanDistanceMatrix( const DataModel& data) { std::vector> distances = std::vector>( - data.num_locations, std::vector(data.num_locations, 0LL)); + data.num_locations, std::vector(data.num_locations, int64{0})); for (int fromNode = 0; fromNode < data.num_locations; fromNode++) { for (int toNode = 0; toNode < data.num_locations; toNode++) { if (fromNode != toNode) @@ -130,8 +130,10 @@ void Tsp() { const auto distance_matrix = GenerateManhattanDistanceMatrix(data); const int transit_callback_index = routing.RegisterTransitCallback( [&distance_matrix, &manager](int64 from_index, int64 to_index) -> int64 { - return distance_matrix[manager.IndexToNode(from_index).value()] - [manager.IndexToNode(to_index).value()]; + // Convert from routing variable Index to distance matrix NodeIndex. + auto from_node = manager.IndexToNode(from_index).value(); + auto to_node = manager.IndexToNode(to_index).value(); + return distance_matrix[from_node][to_node]; }); routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index); // [END arc_cost] diff --git a/ortools/constraint_solver/samples/tsp.py b/ortools/constraint_solver/samples/tsp.py index a7d43dedc0..6b0f0af0ee 100755 --- a/ortools/constraint_solver/samples/tsp.py +++ b/ortools/constraint_solver/samples/tsp.py @@ -39,7 +39,6 @@ def create_data_model(): (0, 8), (7, 8),] # Convert locations in meters using a city block dimension of 114m x 80m. data['locations'] = [(l[0] * 114, l[1] * 80) for l in locations] - data['num_locations'] = len(data['locations']) data['num_vehicles'] = 1 data['depot'] = 0 return data @@ -64,6 +63,7 @@ def create_distance_callback(data, manager): def distance_callback(from_index, to_index): """Returns the manhattan distance between the two nodes.""" + # Convert from routing variable Index to distance matrix NodeIndex. from_node = index_manager_.IndexToNode(from_index) to_node = index_manager_.IndexToNode(to_index) return distances_[from_node][to_node] @@ -99,8 +99,8 @@ def main(): # Create the routing index manager. # [START index_manager] - manager = pywrapcp.RoutingIndexManager(data['num_locations'], - data['num_vehicles'], data['depot']) + manager = pywrapcp.RoutingIndexManager( + len(data['locations']), data['num_vehicles'], data['depot']) # [END index_manager] # Create Routing Model. diff --git a/ortools/constraint_solver/samples/tsp_distance_matrix.cc b/ortools/constraint_solver/samples/tsp_distance_matrix.cc index db139efe78..12e3f957a2 100644 --- a/ortools/constraint_solver/samples/tsp_distance_matrix.cc +++ b/ortools/constraint_solver/samples/tsp_distance_matrix.cc @@ -117,8 +117,10 @@ void Tsp() { // [START arc_cost] const int transit_callback_index = routing.RegisterTransitCallback( [&data, &manager](int64 from_index, int64 to_index) -> int64 { - return data.distance_matrix[manager.IndexToNode(from_index).value()] - [manager.IndexToNode(to_index).value()]; + // Convert from routing variable Index to distance matrix NodeIndex. + auto from_node = manager.IndexToNode(from_index).value(); + auto to_node = manager.IndexToNode(to_index).value(); + return data.distance_matrix[from_node][to_node]; }); routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index); // [END arc_cost] diff --git a/ortools/constraint_solver/samples/tsp_distance_matrix.py b/ortools/constraint_solver/samples/tsp_distance_matrix.py index 3789a6f3cb..7fd41f365e 100644 --- a/ortools/constraint_solver/samples/tsp_distance_matrix.py +++ b/ortools/constraint_solver/samples/tsp_distance_matrix.py @@ -95,7 +95,6 @@ def create_data_model(): 536, 194, 798, 0 ], ] - data['num_locations'] = len(data['distance_matrix']) data['num_vehicles'] = 1 data['depot'] = 0 return data @@ -129,8 +128,8 @@ def main(): # Create the routing index manager. # [START index_manager] - manager = pywrapcp.RoutingIndexManager(data['num_locations'], - data['num_vehicles'], data['depot']) + manager = pywrapcp.RoutingIndexManager( + len(data['distance_matrix']), data['num_vehicles'], data['depot']) # [END index_manager] # Create Routing Model. @@ -143,6 +142,7 @@ def main(): # [START arc_cost] def distance_callback(from_index, to_index): """Returns the manhattan distance between the two nodes.""" + # Convert from routing variable Index to distance matrix NodeIndex. from_node = manager.IndexToNode(from_index) to_node = manager.IndexToNode(to_index) return data['distance_matrix'][from_node][to_node] diff --git a/ortools/constraint_solver/samples/vrp.cc b/ortools/constraint_solver/samples/vrp.cc index b142527541..2adfba63c4 100644 --- a/ortools/constraint_solver/samples/vrp.cc +++ b/ortools/constraint_solver/samples/vrp.cc @@ -122,8 +122,10 @@ void Vrp() { // [START arc_cost] const int transit_callback_index = routing.RegisterTransitCallback( [&data, &manager](int64 from_index, int64 to_index) -> int64 { - return data.distance_matrix[manager.IndexToNode(from_index).value()] - [manager.IndexToNode(to_index).value()]; + // Convert from routing variable Index to distance matrix NodeIndex. + auto from_node = manager.IndexToNode(from_index).value(); + auto to_node = manager.IndexToNode(to_index).value(); + return data.distance_matrix[from_node][to_node]; }); routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index); // [END arc_cost] diff --git a/ortools/constraint_solver/samples/vrp.py b/ortools/constraint_solver/samples/vrp.py index 6a8bd10a7a..deb98718d3 100755 --- a/ortools/constraint_solver/samples/vrp.py +++ b/ortools/constraint_solver/samples/vrp.py @@ -94,7 +94,6 @@ def create_data_model(): 536, 194, 798, 0 ], ] - data['num_locations'] = len(data['distance_matrix']) data['num_vehicles'] = 4 data['depot'] = 0 return data @@ -133,8 +132,8 @@ def main(): # Create the routing index manager. # [START index_manager] - manager = pywrapcp.RoutingIndexManager(data['num_locations'], - data['num_vehicles'], data['depot']) + manager = pywrapcp.RoutingIndexManager( + len(data['distance_matrix']), data['num_vehicles'], data['depot']) # [END index_manager] # Create Routing Model. @@ -146,6 +145,7 @@ def main(): # [START arc_cost] def distance_callback(from_index, to_index): """Returns the manhattan distance between the two nodes.""" + # Convert from routing variable Index to distance matrix NodeIndex. from_node = manager.IndexToNode(from_index) to_node = manager.IndexToNode(to_index) return data['distance_matrix'][from_node][to_node] diff --git a/ortools/constraint_solver/samples/vrp_capacity.cc b/ortools/constraint_solver/samples/vrp_capacity.cc index a0f2a7a2ea..ca6fea9db3 100644 --- a/ortools/constraint_solver/samples/vrp_capacity.cc +++ b/ortools/constraint_solver/samples/vrp_capacity.cc @@ -133,8 +133,10 @@ void VrpCapacity() { // [START arc_cost] const int transit_callback_index = routing.RegisterTransitCallback( [&data, &manager](int64 from_index, int64 to_index) -> int64 { - return data.distance_matrix[manager.IndexToNode(from_index).value()] - [manager.IndexToNode(to_index).value()]; + // Convert from routing variable Index to distance matrix NodeIndex. + auto from_node = manager.IndexToNode(from_index).value(); + auto to_node = manager.IndexToNode(to_index).value(); + return data.distance_matrix[from_node][to_node]; }); routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index); // [END arc_cost] @@ -143,7 +145,9 @@ void VrpCapacity() { // [START capacity_constraint] const int demand_callback_index = routing.RegisterUnaryTransitCallback( [&data, &manager](int64 from_index) -> int64 { - return data.demands[manager.IndexToNode(from_index).value()]; + // Convert from routing variable Index to demand NodeIndex. + auto from_node = manager.IndexToNode(from_index).value(); + return data.demands[from_node]; }); routing.AddDimensionWithVehicleCapacity( demand_callback_index, // transit callback index diff --git a/ortools/constraint_solver/samples/vrp_capacity.py b/ortools/constraint_solver/samples/vrp_capacity.py index 189eeba0aa..abfcacd046 100644 --- a/ortools/constraint_solver/samples/vrp_capacity.py +++ b/ortools/constraint_solver/samples/vrp_capacity.py @@ -94,7 +94,6 @@ def create_data_model(): 536, 194, 798, 0 ], ] - data['num_locations'] = len(data['distance_matrix']) data['demands'] = [0, 1, 1, 2, 4, 2, 4, 8, 8, 1, 2, 1, 2, 4, 4, 8, 8] data['num_vehicles'] = 4 data['vehicle_capacities'] = [15, 15, 15, 15] @@ -143,8 +142,8 @@ def main(): # Create the routing index manager. # [START index_manager] - manager = pywrapcp.RoutingIndexManager(data['num_locations'], - data['num_vehicles'], data['depot']) + manager = pywrapcp.RoutingIndexManager( + len(data['distance_matrix']), data['num_vehicles'], data['depot']) # [END index_manager] # Create Routing Model. @@ -157,6 +156,7 @@ def main(): # [START arc_cost] def distance_callback(from_index, to_index): """Returns the manhattan distance between the two nodes.""" + # Convert from routing variable Index to distance matrix NodeIndex. from_node = manager.IndexToNode(from_index) to_node = manager.IndexToNode(to_index) return data['distance_matrix'][from_node][to_node] @@ -169,7 +169,8 @@ def main(): # Add Capacity constraint. # [START capacity_constraint] def demand_callback(from_index): - """Returns the demand.of the node.""" + """Returns the demand of the node.""" + # Convert from routing variable Index to demands NodeIndex. from_node = manager.IndexToNode(from_index) return data['demands'][from_node] diff --git a/ortools/constraint_solver/samples/vrp_drop_nodes.cc b/ortools/constraint_solver/samples/vrp_drop_nodes.cc index 803d7208d4..0c86e0bfe0 100644 --- a/ortools/constraint_solver/samples/vrp_drop_nodes.cc +++ b/ortools/constraint_solver/samples/vrp_drop_nodes.cc @@ -143,8 +143,10 @@ void VrpDropNodes() { // [START arc_cost] const int transit_callback_index = routing.RegisterTransitCallback( [&data, &manager](int64 from_index, int64 to_index) -> int64 { - return data.distance_matrix[manager.IndexToNode(from_index).value()] - [manager.IndexToNode(to_index).value()]; + // Convert from routing variable Index to distance matrix NodeIndex. + auto from_node = manager.IndexToNode(from_index).value(); + auto to_node = manager.IndexToNode(to_index).value(); + return data.distance_matrix[from_node][to_node]; }); routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index); // [END arc_cost] @@ -153,7 +155,9 @@ void VrpDropNodes() { // [START capacity_constraint] const int demand_callback_index = routing.RegisterUnaryTransitCallback( [&data, &manager](int64 from_index) -> int64 { - return data.demands[manager.IndexToNode(from_index).value()]; + // Convert from routing variable Index to demand NodeIndex. + auto from_node = manager.IndexToNode(from_index).value(); + return data.demands[from_node]; }); routing.AddDimensionWithVehicleCapacity( demand_callback_index, // transit callback index diff --git a/ortools/constraint_solver/samples/vrp_drop_nodes.py b/ortools/constraint_solver/samples/vrp_drop_nodes.py index 5291ae24ae..5ca72c055e 100644 --- a/ortools/constraint_solver/samples/vrp_drop_nodes.py +++ b/ortools/constraint_solver/samples/vrp_drop_nodes.py @@ -95,7 +95,6 @@ def create_data_model(): 536, 194, 798, 0 ], ] - data['num_locations'] = len(data['distance_matrix']) data['demands'] = [0, 1, 1, 3, 6, 3, 6, 8, 8, 1, 2, 1, 2, 6, 6, 8, 8] data['num_vehicles'] = 4 data['vehicle_capacities'] = [15, 15, 15, 15] @@ -153,8 +152,8 @@ def main(): # Create the routing index manager. # [START index_manager] - manager = pywrapcp.RoutingIndexManager(data['num_locations'], - data['num_vehicles'], data['depot']) + manager = pywrapcp.RoutingIndexManager( + len(data['distance_matrix']), data['num_vehicles'], data['depot']) # [END index_manager] # Create Routing Model. @@ -167,6 +166,7 @@ def main(): # [START arc_cost] def distance_callback(from_index, to_index): """Returns the manhattan distance between the two nodes.""" + # Convert from routing variable Index to distance matrix NodeIndex. from_node = manager.IndexToNode(from_index) to_node = manager.IndexToNode(to_index) return data['distance_matrix'][from_node][to_node] @@ -177,8 +177,14 @@ def main(): # Add Capacity constraint. # [START capacity_constraint] + def demand_callback(from_index): + """Returns the demand of the node.""" + # Convert from routing variable Index to demands NodeIndex. + from_node = manager.IndexToNode(from_index) + return data['demands'][from_node] + demand_callback_index = routing.RegisterUnaryTransitCallback( - (lambda from_index: data['demands'][manager.IndexToNode(from_index)])) + demand_callback) routing.AddDimensionWithVehicleCapacity( demand_callback_index, 0, # null capacity slack diff --git a/ortools/constraint_solver/samples/vrp_global_span.cc b/ortools/constraint_solver/samples/vrp_global_span.cc index 2cd7a2c178..76e4148d9d 100644 --- a/ortools/constraint_solver/samples/vrp_global_span.cc +++ b/ortools/constraint_solver/samples/vrp_global_span.cc @@ -122,8 +122,10 @@ void VrpGlobalSpan() { // [START arc_cost] const int transit_callback_index = routing.RegisterTransitCallback( [&data, &manager](int64 from_index, int64 to_index) -> int64 { - return data.distance_matrix[manager.IndexToNode(from_index).value()] - [manager.IndexToNode(to_index).value()]; + // Convert from routing variable Index to distance matrix NodeIndex. + auto from_node = manager.IndexToNode(from_index).value(); + auto to_node = manager.IndexToNode(to_index).value(); + return data.distance_matrix[from_node][to_node]; }); routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index); // [END arc_cost] diff --git a/ortools/constraint_solver/samples/vrp_global_span.py b/ortools/constraint_solver/samples/vrp_global_span.py index 02cf89e328..d990614607 100644 --- a/ortools/constraint_solver/samples/vrp_global_span.py +++ b/ortools/constraint_solver/samples/vrp_global_span.py @@ -95,7 +95,6 @@ def create_data_model(): 536, 194, 798, 0 ], ] - data['num_locations'] = len(data['distance_matrix']) data['num_vehicles'] = 4 data['depot'] = 0 return data @@ -134,8 +133,8 @@ def main(): # Create the routing index manager. # [START index_manager] - manager = pywrapcp.RoutingIndexManager(data['num_locations'], - data['num_vehicles'], data['depot']) + manager = pywrapcp.RoutingIndexManager( + len(data['distance_matrix']), data['num_vehicles'], data['depot']) # [END index_manager] # Create Routing Model. @@ -148,6 +147,7 @@ def main(): # [START arc_cost] def distance_callback(from_index, to_index): """Returns the manhattan distance between the two nodes.""" + # Convert from routing variable Index to distance matrix NodeIndex. from_node = manager.IndexToNode(from_index) to_node = manager.IndexToNode(to_index) return data['distance_matrix'][from_node][to_node] diff --git a/ortools/constraint_solver/samples/vrp_starts_ends.cc b/ortools/constraint_solver/samples/vrp_starts_ends.cc index 0c22a684ac..0d9a61fdf6 100644 --- a/ortools/constraint_solver/samples/vrp_starts_ends.cc +++ b/ortools/constraint_solver/samples/vrp_starts_ends.cc @@ -134,8 +134,10 @@ void VrpStartsEnds() { // [START arc_cost] const int transit_callback_index = routing.RegisterTransitCallback( [&data, &manager](int64 from_index, int64 to_index) -> int64 { - return data.distance_matrix[manager.IndexToNode(from_index).value()] - [manager.IndexToNode(to_index).value()]; + // Convert from routing variable Index to distance matrix NodeIndex. + auto from_node = manager.IndexToNode(from_index).value(); + auto to_node = manager.IndexToNode(to_index).value(); + return data.distance_matrix[from_node][to_node]; }); routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index); // [END arc_cost] diff --git a/ortools/constraint_solver/samples/vrp_starts_ends.py b/ortools/constraint_solver/samples/vrp_starts_ends.py index 05148f7894..9d14ce20a1 100644 --- a/ortools/constraint_solver/samples/vrp_starts_ends.py +++ b/ortools/constraint_solver/samples/vrp_starts_ends.py @@ -95,7 +95,6 @@ def create_data_model(): 536, 194, 798, 0 ], ] - data['num_locations'] = len(data['distance_matrix']) data['num_vehicles'] = 4 data['starts'] = [1, 2, 15, 16] data['ends'] = [0, 0, 0, 0] @@ -135,9 +134,9 @@ def main(): # Create the routing index manager. # [START index_manager] - manager = pywrapcp.RoutingIndexManager(data['num_locations'], - data['num_vehicles'], data['starts'], - data['ends']) + manager = pywrapcp.RoutingIndexManager( + len(data['distance_matrix']), data['num_vehicles'], data['starts'], + data['ends']) # [END index_manager] # Create Routing Model. @@ -150,6 +149,7 @@ def main(): # [START arc_cost] def distance_callback(from_index, to_index): """Returns the manhattan distance between the two nodes.""" + # Convert from routing variable Index to distance matrix NodeIndex. from_node = manager.IndexToNode(from_index) to_node = manager.IndexToNode(to_index) return data['distance_matrix'][from_node][to_node] diff --git a/ortools/constraint_solver/samples/vrp_time_windows.cc b/ortools/constraint_solver/samples/vrp_time_windows.cc index 573e2f7390..fc121eec89 100644 --- a/ortools/constraint_solver/samples/vrp_time_windows.cc +++ b/ortools/constraint_solver/samples/vrp_time_windows.cc @@ -135,8 +135,10 @@ void VrpTimeWindows() { // [START arc_cost] const int transit_callback_index = routing.RegisterTransitCallback( [&data, &manager](int64 from_index, int64 to_index) -> int64 { - return data.time_matrix[manager.IndexToNode(from_index).value()] - [manager.IndexToNode(to_index).value()]; + // Convert from routing variable Index to time matrix NodeIndex. + auto from_node = manager.IndexToNode(from_index).value(); + auto to_node = manager.IndexToNode(to_index).value(); + return data.time_matrix[from_node][to_node]; }); routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index); // [END arc_cost] diff --git a/ortools/constraint_solver/samples/vrp_time_windows.py b/ortools/constraint_solver/samples/vrp_time_windows.py index 1c9505925e..304428b49e 100644 --- a/ortools/constraint_solver/samples/vrp_time_windows.py +++ b/ortools/constraint_solver/samples/vrp_time_windows.py @@ -125,6 +125,7 @@ def main(): # [START arc_cost] def time_callback(from_index, to_index): """Returns the manhattan distance travel time between the two nodes.""" + # Convert from routing variable Index to time matrix NodeIndex. from_node = manager.IndexToNode(from_index) to_node = manager.IndexToNode(to_index) return data['time_matrix'][from_node][to_node]