옵션
집집 Skill 데이터 과학 및 ML cuopt-routing-api-python

cuopt-routing-api-python

NVIDIA/skills NVIDIA/skills

비용 행렬, 시간 창, 용량 제약 조건 및 픽업-배송 쌍을 활용하여 NVIDIA cuOpt의 Python API를 통해 차량 경로 문제(TSP, VRP, PDP)를 해결합니다.

...모든 것을 확장하십시오
0
업데이트 된 시간 2026년 9월 25일

cuOpt 라우팅 — Python API

코딩을 시작하기 전에 문제 유형(TSP, VRP, PDP)과 데이터(위치, 주문, 차량, 제약 조건)를 확인하십시오.

이 기능은 Python 전용입니다. cuOpt에는 라우팅용 C API가 없습니다.

최소 VRP 예제

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()

제약 조건 추가

# 시간 창
dm.add_transit_time_matrix(transit_time_matrix)
dm.set_order_time_windows(earliest_series, latest_series)

# 수용 능력
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)

# 픽업-배송 쌍
dm.set_pickup_delivery_pairs(pickup_indices, delivery_indices)

# 선후순서
dm.add_order_precedence(node_id=2, preceding_nodes=np.array([0, 1]))

해법 확인

status = solution.get_status()  # 0=성공, 1=실패, 2=타임아웃, 3=빈 결과
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())

데이터 유형 (명시적인 dtype 사용)

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

솔버 설정

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

일반적인 문제

문제 해결 방법
해결책이 비어 있음 시간 범위를 넓히거나 이동 시간을 확인하십시오
처리 불가능한 주문 차량 대수 또는 처리 능력을 늘리십시오
시간 창이 설정된 상태에서 상태가 0이 아님 add_transit_time_matrix() 함수 추가
비용 오류 cost_matrix가 대칭 행렬인지 확인
compute_waypoint_sequence가 route_df를 변경함 위치 열을 해당 위치의 웨이포인트 ID로 직접 대체합니다. 비용 행렬 인덱스가 여전히 필요한 경우(예: 트럭별로 반복 처리할 때) route_df.copy()를 전달하십시오.

디버깅

status != 0일 때: print(solution.get_error_message()) 및 print(solution.get_infeasible_orders().to_list())를 실행하여 어떤 주문이 불가능한지 확인하십시오.

데이터 유형: 은밀한 오류를 방지하기 위해 행렬과 시계열에 명시적인 dtype(float32, int32)을 사용하십시오.

예제

  • examples.md — VRP, PDP, 다중 창고
  • server_examples.md — REST 클라이언트(curl, Python)
  • 참조 모델: 이 스킬의 assets/ — vrp_basic, pdp_basic. assets/README.md를 참조하세요.

상위 보고

기여 또는 소스 코드 빌드에 대해서는 개발자 스킬을 참조하십시오.

GitHub에서 보기
---
name: cuopt-routing-api-python
description: Solve vehicle routing problems (TSP, VRP, PDP) using NVIDIA cuOpt's Python API with cost matrices, time windows, capacity constraints, and pickup-delivery pairs.
license: Apache-2.0
---



# cuOpt Routing — Python API

Confirm problem type (TSP, VRP, PDP) and data (locations, orders, fleet, constraints) before coding.

This skill is **Python only**. Routing has no C API in cuOpt.

## 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.

cuopt-routing-api-python 설치

스킬 파일을 다운로드하여 .claude/skills/ 디렉터리에 압축을 풀어주세요.

ZIP 다운로드

저장소를 클론하고 스킬 파일을 프로젝트에 복사하세요.

git clone https://github.com/NVIDIA/skills/tree/main/skills/cuopt-routing-api-python # Copy SKILL.md to your .claude/skills/ directory

복사 복사
빠른 설정: 스킬 폴더를 .claude/skills/로 복사하세요. Claude가 해당 스킬을 자동으로 감지하여 사용할 것입니다.
저장소 NVIDIA/skills

관련 스킬

web-search
업데이트 된 시간 2026년 6월 29일
webapp-testing
업데이트 된 시간 2026년 6월 29일
lark-base
업데이트 된 시간 2026년 7월 5일
agentmail
업데이트 된 시간 2026년 6월 29일
OR