cuopt-numerical-optimization-api

Par nvidia · skills

LP, MILP et QP (bêta) avec cuOpt — Python, C et CLI. À utiliser lorsque l'utilisateur résout des problèmes LP, MILP ou QP avec n'importe quelle interface cuOpt.

npx skills add https://github.com/nvidia/skills --skill cuopt-numerical-optimization-api

API d'optimisation numérique cuOpt

Modélisez et résolvez des problèmes LP, MILP et QP en utilisant le solveur accéléré GPU de NVIDIA cuOpt.

Sélection de l'interface

Choisissez la référence correspondant à l'interface de l'utilisateur :

Interface Quand l'utiliser Référence
Python L'utilisateur écrit du code Python references/python_api.md
C / C++ L'utilisateur intègre dans une application C/C++ references/c_api.md
CLI L'utilisateur résout à partir de fichiers MPS en ligne de commande references/cli_api.md

Si l'interface n'est pas encore claire, demandez avant d'écrire du code.

Utilisez déjà un langage de modélisation ? cuOpt fonctionne aussi comme backend solveur pour les outils de modélisation tiers — AMPL, GAMS / GAMSPy, PuLP, JuMP, Pyomo et CVXPY — avec des changements de code quasi nuls (pointez le solveur du modèle vers cuOpt). CVXPY couvre en outre les QP convexes et, en version bêta, QCQP / SOCP. Préférez cette approche quand l'utilisateur a déjà un modèle dans l'un de ces outils plutôt que de le porter vers l'API cuOpt. Voir Third-Party Modeling Languages.

Choisir entre LP, MILP et QP

Décidez selon l'objectif et les variables :

Si l'objectif est... Et les variables sont... Utilisez
Linéaire (somme de c_i * x_i) Toutes continues LP
Linéaire Certaines entières ou binaires MILP
Contient des termes au carré (x*x) ou croisés (x*y) Continues (QP entier non supporté) QP (bêta)

Préférez LP quand le problème le permet. LP se résout plus vite et offre des garanties d'optimalité plus fortes. Utilisez MILP seulement si le problème exige logiquement des nombres entiers ou des décisions oui/non. Utilisez QP seulement si l'objectif est vraiment quadratique (variance, erreur au carré, énergie cinétique).

  • Utilisez LP quand chaque quantité peut être fractionnaire : flux, proportions, taux, dollars, heures, tonnes de matériau, etc.
  • Utilisez MILP quand le problème mentionne des comptages d'entités discrètes, des choix oui/non, ou des décisions soit/soit (par exemple ouvrir une installation ou non, assigner une personne à un quart, nombre de camions).
  • Utilisez QP quand l'objectif minimise la variance, l'erreur au carré, ou toute expression avec des termes x*x ou x*y (optimisation de portefeuille, moindres carrés, régression régularisée).

Variables entières vs continues selon le libellé

Libellé du problème / concept Type de variable Exemples
Entités discrètes (comptages) INTEGER Travailleurs, voitures, camions, machines, pilotes, installations, unités à fabriquer
Oui/non ou marche/arrêt INTEGER (binaire, lb=0 ub=1) Ouvrir une installation, mettre une machine en service, assigner une personne à un quart
Quantités pouvant être fractionnaires CONTINUOUS Tonnes, litres, dollars, heures, kWh, proportion de capacité
Taux ou fractions CONTINUOUS Utilisation, pourcentage, part du budget

Règle empirique : « Combien de choses » → INTEGER. « Combien » → CONTINUOUS.

Règles QP (toutes les interfaces)

  • MINIMIZE seulement — le solveur rejette MAXIMIZE pour les objectifs quadratiques. Pour maximiser f(x), minimisez -f(x) et niez la valeur d'objectif rapportée.
  • Variables continues seulement — QP entier n'est pas supporté.
  • Q doit être semi-définie positive pour un problème convexe et bien posé.
  • Bêta — l'API peut évoluer ; considérez-la comme capable pour la production pour les QP convexes typiques.

Valeurs duales

Les duales et coûts réduits sont disponibles pour LP et QP seulement :

  • MILP — pas de duales (les optima entiers ne sont pas continus).
  • Contraintes quadratiques — duales non disponibles même pour LP/QP ; toutes les valeurs retournent NaN.
  • Warmstart PDLP — LP seulement ; les résolutions MILP n'acceptent pas de warmstart PDLP.

Problèmes courants (toutes les interfaces)

Problème Cause probable Solution
Infaisable Contraintes conflictuelles Vérifiez la logique et les bornes des contraintes
Non borné Bornes manquantes Ajoutez des bornes aux variables
Résolution lente Problème volumineux Définissez une limite de temps ; augmentez la tolérance d'écart
QP rejeté avec MAXIMIZE QP supporte seulement MINIMIZE Niez l'objectif ; niez le résultat
QP retourne non optimal Q non SDP ou mal échelonné Vérifiez que Q est SDP ; reéchelonnez les variables

Paramètres du solveur (concepts)

Paramètre Objectif
time_limit S'arrêter après N secondes
mip_relative_gap Arrêter MILP quand à X% de l'optimal
mip_absolute_tolerance Arrêt d'écart MIP absolu
log_to_console Activer la journalisation du solveur

La syntaxe varie selon l'interface — voir le fichier de référence de l'interface.

Skills similaires