cuOpt Server — Déployer et client (Python/curl)
Cette skill couvre le démarrage du serveur et les exemples client (curl, Python). Le serveur n'a pas d'API C séparée (les clients peuvent être dans n'importe quel langage).
Démarrer le serveur
# Développement
python -m cuopt_server.cuopt_service --ip 0.0.0.0 --port 8000
# Docker
docker run --gpus all -d -p 8000:8000 -e CUOPT_SERVER_PORT=8000 \
nvidia/cuopt:latest-cuda12.9-py3.13
Vérifier
curl http://localhost:8000/cuopt/health
Flux de travail
- POST vers
/cuopt/request→ récupèrereqId - Interroge
/cuopt/solution/{reqId}jusqu'à ce que la solution soit prête - Analyse la réponse
Client Python (routage)
import requests, time
SERVER = "http://localhost:8000"
HEADERS = {"Content-Type": "application/json", "CLIENT-VERSION": "custom"}
payload = {
"cost_matrix_data": {"data": {"0": [[0,10,15],[10,0,12],[15,12,0]]}},
"travel_time_matrix_data": {"data": {"0": [[0,10,15],[10,0,12],[15,12,0]]}},
"task_data": {"task_locations": [1, 2], "demand": [[10, 20]], "task_time_windows": [[0,100],[0,100]], "service_times": [5, 5]},
"fleet_data": {"vehicle_locations": [[0, 0]], "capacities": [[50]], "vehicle_time_windows": [[0, 200]]},
"solver_config": {"time_limit": 5}
}
r = requests.post(f"{SERVER}/cuopt/request", json=payload, headers=HEADERS)
req_id = r.json()["reqId"]
# Interrogation : GET /cuopt/solution/{req_id}
Terminologie : API REST vs Python
| API Python | REST |
|---|---|
| order_locations | task_locations |
| set_order_time_windows() | task_time_windows |
| service_times | service_times |
Utilise travel_time_matrix_data (et non transit_time_matrix_data). Capacités : [[50, 50]] et non [[50], [50]].
Débogage (422 / payload)
Erreurs de validation : Vérifie les noms de champs par rapport à OpenAPI (/cuopt.yaml). Erreurs courantes : transit_time_matrix_data → travel_time_matrix_data ; capacités par dimension [[50, 50]] et non par véhicule [[50], [50]]. Capture reqId et le corps de la réponse pour les requêtes échouées.
Ressources exécutables
Exécute depuis chaque répertoire de ressource (le serveur doit être en cours d'exécution ; les scripts quittent avec le code 0 si le serveur est inaccessible). Tous utilisent Python requests :
- assets/vrp_simple/ — VRP basique (sans fenêtres de temps)
- assets/vrp_basic/ — VRP avec fenêtres de temps
- assets/pdp_basic/ — Enlèvement et livraison
- assets/lp_basic/ — LP via REST (format CSR)
- assets/milp_basic/ — MILP via REST
Voir assets/README.md pour un aperçu.
Escalade
Pour contribuer ou compiler à partir des sources, consulte la skill développeur.