Skip to main content

cuopt-routing-api-python

Vehicle routing (VRP, TSP, PDP) with cuOpt — Python API only. Use when the user is building or solving routing in Python.

소스 정보

저장소
NVIDIA/cuopt
최근 소스 활동
2026년 10월 15일 00:14
감지된 SKILL.md 언어
영어
스타
1,098
포크
255

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
12 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
cuopt-routing-api-python
version
26.12.00
description
Vehicle routing (VRP, TSP, PDP) with cuOpt — Python API only. Use when the user is building or solving routing in Python.
license
Apache-2.0
metadata
{"author":"NVIDIA cuOpt Team","tags":["cuopt","routing","vrp","tsp","python"]}
# cuOpt Routing — Python API This skill is **Python only**. Routing has no C API in cuOpt. ## Required questions Ask these if not already clear: 1. **Problem type** — TSP, VRP, or PDP? 2. **Locations** — How many? Depot(s)? Cost or distance between pairs (matrix or derived)? 3. **Orders / tasks** — Which locations must be visited? Demand or service per stop? 4. **Fleet** — Number of vehicles, capacity per vehicle (and per dimension if multiple), start/end locations? 5. **Constraints** — Time windows (earliest/latest arrival), service times, precedence (order A before B)? ## Minimal VRP Example ```python 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() ``` ## Adding Constraints ```python # Time windows dm.add_transit_time_matrix(transit_time_matrix) dm.set_order_time_windows(earliest_series, latest_series) # Capacities 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) # Pickup-delivery pairs dm.set_pickup_delivery_pairs(pickup_indices, delivery_indices) # Precedence dm.add_order_precedence(node_id=2, preceding_nodes=np.array([0, 1])) ``` ## Solution Checking ```python 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()) ``` ## Data Types (use explicit dtypes) ```python cost_matrix = cost_matrix.astype("float32") order_locations = cudf.Series([...], dtype="int32") demand = cudf.Series([...], dtype="int32") ``` ## Solver Settings ```python ss = routing.SolverSettings() ss.set_time_limit(30) ss.set_verbose_mode(True) ss.set_error_logging_mode(True) ``` ## Common Issues | Problem | Fix | |---------|-----| | Empty solution | Widen time windows or check travel times | | Infeasible orders | Increase fleet or capacity | | Status != 0 with time windows | Add `add_transit_time_matrix()` | | Wrong cost | Check cost_matrix is symmetric | | `compute_waypoint_sequence` alters route_df | It replaces the `location` column with waypoint ids in place — pass `route_df.copy()` if you still need cost-matrix indices (e.g. when iterating per truck) | ## Debugging **When status != 0:** `print(solution.get_error_message())` and `print(solution.get_infeasible_orders().to_list())` to see which orders are infeasible. **Data types:** Use explicit dtypes (float32, int32) for matrices and series to avoid silent errors. ## Examples - [examples.md](references/examples.md) — VRP, PDP, multi-depot - [server_examples.md](references/server_examples.md) — REST client (curl, Python) - **Reference models:** This skill's `assets/` — [vrp_basic](assets/vrp_basic/), [pdp_basic](assets/pdp_basic/). See [assets/README.md](assets/README.md). ## Escalate For contribution or build-from-source, see the developer skill.
GitHub에서 보기