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*xoux*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.