cuopt-routing-api-python

Par nvidia · skills

Routage de véhicules (VRP, TSP, PDP) avec cuOpt — API Python uniquement. À utiliser lorsque l'utilisateur construit ou résout des problèmes de routage en Python.

npx skills add https://github.com/nvidia/skills --skill cuopt-routing-api-python

cuOpt Routing — API Python

Confirmez le type de problème (TSP, VRP, PDP) et les données (localisations, commandes, flotte, contraintes) avant de coder.

Cette skill est Python uniquement. Routing n'a pas d'API C dans cuOpt.

Exemple VRP minimal

import cudf
from cuopt import routing

cost_matrix = cudf.DataFrame([...], dtype="float32")
dm = routing.DataModel(n_locations=4, n_fleet=2, n_orders=3)
dm.add_cost_matrix(cost_matrix)
dm.set_order_locations(cudf.Series([1, 2, 3], dtype="int32"))
solution = routing.Solve(dm, routing.SolverSettings())

if solution.get_status() == 0:
    solution.display_routes()

Ajouter des contraintes

# Fenêtres de temps
dm.add_transit_time_matrix(transit_time_matrix)
dm.set_order_time_windows(earliest_series, latest_series)

# Capacités
dm.add_capacity_dimension("weight", demand_series, capacity_series)
dm.set_order_service_times(service_times)
dm.set_vehicle_locations(start_locations, end_locations)
dm.set_vehicle_time_windows(earliest_start, latest_return)

# Paires enlèvement-livraison
dm.set_pickup_delivery_pairs(pickup_indices, delivery_indices)

# Précédence
dm.add_order_precedence(node_id=2, preceding_nodes=np.array([0, 1]))

Vérifier la solution

status = solution.get_status()  # 0=SUCCESS, 1=FAIL, 2=TIMEOUT, 3=EMPTY
if status == 0:
    route_df = solution.get_route()
    total_cost = solution.get_total_objective()
else:
    print(solution.get_error_message())
    print(solution.get_infeasible_orders().to_list())

Types de données (utiliser des dtypes explicites)

cost_matrix = cost_matrix.astype("float32")
order_locations = cudf.Series([...], dtype="int32")
demand = cudf.Series([...], dtype="int32")

Paramètres du solveur

ss = routing.SolverSettings()
ss.set_time_limit(30)
ss.set_verbose_mode(True)
ss.set_error_logging_mode(True)

Problèmes courants

Problème Solution
Solution vide Élargissez les fenêtres de temps ou vérifiez les temps de trajet
Commandes infaisables Augmentez la flotte ou la capacité
Status != 0 avec fenêtres de temps Ajoutez add_transit_time_matrix()
Coût incorrect Vérifiez que cost_matrix est symétrique

<!-- skill-evolution:start — WaypointMatrix.compute_waypoint_sequence mutates route_df --> | compute_waypoint_sequence modifie route_df | Elle remplace la colonne location par des ids de waypoint sur place — passez route_df.copy() si vous avez encore besoin des indices de cost-matrix (p. ex. lors d'une itération par camion) | <!-- skill-evolution:end -->

Débogage

Quand status != 0 : print(solution.get_error_message()) et print(solution.get_infeasible_orders().to_list()) pour voir quelles commandes sont infaisables.

Types de données : Utilisez des dtypes explicites (float32, int32) pour les matrices et séries afin d'éviter les erreurs silencieuses.

Exemples

Escalade

Pour contribution ou compilation depuis les sources, consultez la skill développeur.

Skills similaires