diff --git a/ortools/constraint_solver/samples/VrpPickupDelivery.cs b/ortools/constraint_solver/samples/VrpPickupDelivery.cs index 4cc2da78d1..8999054fa6 100644 --- a/ortools/constraint_solver/samples/VrpPickupDelivery.cs +++ b/ortools/constraint_solver/samples/VrpPickupDelivery.cs @@ -118,18 +118,19 @@ public class VrpPickupDelivery { // Define cost of each arc. // [START arc_cost] - int transitCostIndex = routing.RegisterTransitCallback( + 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]; } ); - routing.SetArcCostEvaluatorOfAllVehicles(transitCostIndex); + routing.SetArcCostEvaluatorOfAllVehicles(transitCallbackIndex); // [END arc_cost] // Add Distance constraint. // [START distance_constraint] - routing.AddDimension(transitCostIndex, 0, 3000, + routing.AddDimension(transitCallbackIndex, 0, 3000, true, // start cumul to zero "Distance"); RoutingDimension distanceDimension = routing.GetMutableDimension("Distance"); diff --git a/ortools/constraint_solver/samples/VrpPickupDelivery.java b/ortools/constraint_solver/samples/VrpPickupDelivery.java index 29574c691d..60cd2736af 100644 --- a/ortools/constraint_solver/samples/VrpPickupDelivery.java +++ b/ortools/constraint_solver/samples/VrpPickupDelivery.java @@ -82,18 +82,18 @@ public class VrpPickupDelivery { /// 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] @@ -144,13 +144,13 @@ public class VrpPickupDelivery { // Define cost of each arc. // [START arc_cost] LongLongToLong distanceEvaluator = new ManhattanDistance(data, manager); - int transitCostIndex = routing.registerTransitCallback(distanceEvaluator); - routing.setArcCostEvaluatorOfAllVehicles(transitCostIndex); + int transitCallbackIndex = routing.registerTransitCallback(distanceEvaluator); + routing.setArcCostEvaluatorOfAllVehicles(transitCallbackIndex); // [END arc_cost] // Add Distance constraint. // [START distance_constraint] - routing.addDimension(transitCostIndex, 0, 3000, + routing.addDimension(transitCallbackIndex, 0, 3000, true, // start cumul to zero "Distance"); RoutingDimension distanceDimension = routing.getMutableDimension("Distance"); diff --git a/ortools/constraint_solver/samples/vrp_pickup_delivery.cc b/ortools/constraint_solver/samples/vrp_pickup_delivery.cc index 224ef1fa6d..ff94ab6ed0 100644 --- a/ortools/constraint_solver/samples/vrp_pickup_delivery.cc +++ b/ortools/constraint_solver/samples/vrp_pickup_delivery.cc @@ -140,17 +140,19 @@ void VrpGlobalSpan() { // Define cost of each arc. // [START arc_cost] - const int transit_cost_id = routing.RegisterTransitCallback( + 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_cost_id); + routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index); // [END arc_cost] // Add Distance constraint. // [START distance_constraint] - routing.AddDimension(transit_cost_id, // transit callback + routing.AddDimension(transit_callback_index, // transit callback 0, // no slack 3000, // vehicle maximum travel distance true, // start cumul to zero diff --git a/ortools/constraint_solver/samples/vrp_pickup_delivery.py b/ortools/constraint_solver/samples/vrp_pickup_delivery.py index 07092bbe7f..d1854ce5e0 100755 --- a/ortools/constraint_solver/samples/vrp_pickup_delivery.py +++ b/ortools/constraint_solver/samples/vrp_pickup_delivery.py @@ -120,12 +120,12 @@ def print_solution(data, manager, routing, assignment): plan_output = 'Route for vehicle {}:\n'.format(vehicle_id) route_distance = 0 while not routing.IsEnd(index): - plan_output += ' {} ->'.format(manager.IndexToNode(index)) + plan_output += ' {} -> '.format(manager.IndexToNode(index)) previous_index = index index = assignment.Value(routing.NextVar(index)) route_distance += routing.GetArcCostForVehicle( previous_index, index, vehicle_id) - plan_output += ' {}\n'.format(manager.IndexToNode(index)) + plan_output += '{}\n'.format(manager.IndexToNode(index)) plan_output += 'Distance of the route: {}m\n'.format(route_distance) print(plan_output) total_distance += route_distance @@ -143,9 +143,7 @@ def main(): # Create the routing index manager. # [START index_manager] manager = pywrapcp.RoutingIndexManager( - len(data['distance_matrix']), - data['num_vehicles'], - data['depot']) + len(data['distance_matrix']), data['num_vehicles'], data['depot']) # [END index_manager] # Create Routing Model. @@ -158,19 +156,20 @@ 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] - transit_cost_id = routing.RegisterTransitCallback(distance_callback) - routing.SetArcCostEvaluatorOfAllVehicles(transit_cost_id) + transit_callback_index = routing.RegisterTransitCallback(distance_callback) + routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index) # [END arc_cost] # Add Distance constraint. # [START distance_constraint] dimension_name = 'Distance' routing.AddDimension( - transit_cost_id, + transit_callback_index, 0, # no slack 3000, # vehicle maximum travel distance True, # start cumul to zero @@ -214,4 +213,4 @@ def main(): if __name__ == '__main__': main() - # [END program] +# [END program]