mcpField
C
cuopt-routing-api-python

cuopt-routing-api-python

github.com/nvidiaデータ・データベース3.8k2.3k 回インストール今日更新
リポジトリ

cuopt-routing-api-python について

cuOpt Routing API を使った経路問題のモデル化と求解を案内する、Python 専用のエージェントスキルです。TSP、VRP、PDP の制約設定、解の状態確認、一般的な問題の調査を扱います。

主な機能

  1. 01TSP・VRP・PDP モデルの構築
  2. 02コスト行列と注文位置の設定
  3. 03時間枠・容量・サービス時間の指定
  4. 04ルート・目的値・求解状態の取得
  5. 05実行不可能な注文や一般的なエラーの調査

活用シーン

  1. 01複数車両の配送ルート計画
  2. 02集配タスクの順序制約の設定
  3. 03時間枠と車両容量を経路モデルに追加
  4. 04求解失敗や実行不可能な注文の原因調査

インストール

コマンドをコピーしてターミナルで実行します。

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

インストール後、Claude Code で/cuopt-routing-api-pythonを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

BENCHMARK.md
skill-card.md
skill.oms.sig
assets/
README.md
assets/pdp_basic/
model.py
README.md
assets/vrp_basic/
model.py
README.md
evals/
evals.json
references/
examples.md
server_examples.md

詳細

cuOpt Routing — Python API

このスキルは Python 専用 です。cuOpt のルーティングには C API がありません。

必須の質問

まだ明らかでない場合は、次の質問をしてください。

  1. 問題の種類 — TSP、VRP、PDP のどれですか?
  2. 地点 — いくつありますか?デポはありますか?地点間のコストまたは距離(行列、または導出した値)はありますか?
  3. 注文/タスク — どの地点を訪問する必要がありますか?各停車地点での需要またはサービス内容は何ですか?
  4. 車両群 — 車両の台数、車両ごとの容量(複数の次元がある場合は次元ごとの容量)、開始地点/終了地点は何ですか?
  5. 制約 — 時間枠(最早/最遅到着時刻)、サービス時間、優先順位(注文 A を注文 B より先に行う)などはありますか?

最小限の 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()

制約の追加

# 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]))

ソリューションの確認

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

データ型(明示的な 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 を変更するlocation 列をウェイポイント ID でその場で置き換えます。コスト行列のインデックスが引き続き必要な場合(例:トラックごとに反復処理する場合)は、route_df.copy() を渡してください

デバッグ

ステータスが 0 以外の場合: print(solution.get_error_message()) と print(solution.get_infeasible_orders().to_list()) を実行すると、実行不可能な注文を確認できます。

データ型: エラーが通知されずに発生するのを避けるため、行列とシリーズには明示的な dtype(float32、int32)を使用してください。

例

エスカレーション

コントリビューションまたはソースからのビルドについては、開発者向けスキルを参照してください。

コメント