cuopt-qp-api-python

Par nvidia · skills

Programmation quadratique (QP) avec cuOpt — API Python uniquement (bêta). À utiliser lorsque l'utilisateur construit ou résout un problème de QP en Python.

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

cuOpt QP — Python API (bêta)

Confirmez que l'objectif contient des termes au carré ou croisés (QP) ; s'il est purement linéaire, utilisez LP/MILP. QP doit être une minimisation.

Cette skill est Python uniquement. QP est en bêta.

CRITIQUE : MINIMISER uniquement

# ❌ FAUX
problem.setObjective(x*x + y*y, sense=MAXIMIZE)

# ✅ CORRECT — négation pour maximisation
problem.setObjective(-(x*x + y*y), sense=MINIMIZE)

Exemple de portefeuille

from cuopt.linear_programming.problem import Problem, CONTINUOUS, MINIMIZE
from cuopt.linear_programming.solver_settings import SolverSettings

problem = Problem("Portfolio")
x1 = problem.addVariable(lb=0, ub=1, vtype=CONTINUOUS, name="stock_a")
x2 = problem.addVariable(lb=0, ub=1, vtype=CONTINUOUS, name="stock_b")
x3 = problem.addVariable(lb=0, ub=1, vtype=CONTINUOUS, name="stock_c")
r1, r2, r3 = 0.12, 0.08, 0.05  # expected returns (12%, 8%, 5%)
problem.setObjective(
    0.04*x1*x1 + 0.02*x2*x2 + 0.01*x3*x3 + 0.02*x1*x2 + 0.01*x1*x3 + 0.016*x2*x3,
    sense=MINIMIZE
)
problem.addConstraint(x1 + x2 + x3 == 1, name="budget")
problem.addConstraint(r1*x1 + r2*x2 + r3*x3 >= 0.08, name="min_return")
problem.solve(SolverSettings())

Statut (PascalCase)

if problem.Status.name in ["Optimal", "PrimalFeasible"]:
    print(problem.ObjValue)

Débogage

Diagnostic : print(f"Actual status: '{problem.Status.name}'"). Pour les problèmes numériques, vérifiez que Q est PSD et que les variables sont mises à l'échelle.

Exemples

Escalade

Si le problème est linéaire (pas de termes au carré ou croisés), utilisez LP/MILP. Pour une contribution ou une construction à partir des sources, voir la skill dédiée aux développeurs.

Skills similaires