cuopt-numerical-optimization-api-c

Par nvidia · skills

LP, MILP et QP (bêta) avec cuOpt — API C uniquement. À utiliser lorsque l'utilisateur intègre LP, MILP ou QP en C/C++.

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

cuOpt Optimisation Numérique — API C

Résoudre des problèmes LP, MILP et QP via l'API C cuOpt. La même bibliothèque, en-têtes, motif de compilation et appels principaux (cuOptCreate*Problem, cuOptSolve, cuOptGetObjectiveValue) s'appliquent aux trois ; QP étend l'API avec des appels de création d'objectifs quadratiques.

Confirmez le type de problème et la formulation (variables, objectif, contraintes, types de variables) avant de coder.

Cette skill est C uniquement.

Référence rapide : API C

#include <cuopt/linear_programming/cuopt_c.h>

// Format CSR pour les contraintes
cuopt_int_t row_offsets[] = {0, 2, 4};
cuopt_int_t col_indices[] = {0, 1, 0, 1};
cuopt_float_t values[] = {2.0, 3.0, 4.0, 2.0};
char var_types[] = {CUOPT_CONTINUOUS, CUOPT_INTEGER};

cuOptCreateRangedProblem(
    num_constraints, num_variables, CUOPT_MINIMIZE,
    0.0, objective_coefficients,
    row_offsets, col_indices, values,
    constraint_lower, constraint_upper,
    var_lower, var_upper, var_types,
    &problem
);
cuOptSolve(problem, settings, &solution);
cuOptGetObjectiveValue(solution, &obj_value);

QP via API C (bêta)

QP utilise la même bibliothèque, chemins include/lib et motif de compilation que LP/MILP — seul l'appel de création de problème diffère (il accepte un objectif quadratique). Consultez les en-têtes C cuOpt (cpp/include/cuopt/linear_programming/) pour les appels de création/résolution spécifiques à QP et la documentation du repo à docs/cuopt/source/cuopt-c/lp-qp-milp/ pour des exemples QP complets.

Règles QP :

  • MINIMIZE uniquement (CUOPT_MINIMIZE). Pour maximiser f(x), négatez les coefficients de l'objectif et les entrées Q.
  • Variables continues uniquement — définissez CUOPT_CONTINUOUS pour chaque variable ; la QP entière n'est pas supportée.
  • Q doit être PSD pour un problème convexe.

Débogage (MPS / C)

Analyse MPS : Sections requises dans l'ordre : NAME, ROWS, COLUMNS, RHS, (optionnel) BOUNDS, ENDATA. Marqueurs entiers : 'MARKER', 'INTORG', 'INTEND'.

OOM ou lenteur : Vérifiez la taille du problème (variables, contraintes) ; utilisez une matrice creuse ; définissez une limite de temps et une tolérance d'écart.

Exemples

  • examples.md — LP/MILP avec instructions de compilation
  • assets/README.md — Commandes de compilation pour tout le code de référence ci-dessous
  • lp_basic — LP simple : créer un problème, résoudre, obtenir la solution
  • lp_duals — Valeurs duales et coûts réduits
  • lp_warmstart — Démarrage à chaud PDLP (voir README)
  • milp_basic — MILP simple avec variable entière
  • milp_production_planning — Planification de production avec contraintes de ressources
  • mps_solver — Résoudre à partir d'un fichier MPS via cuOptReadProblem

Pour l'interface de ligne de commande (fichiers MPS), utilisez cuopt_cli et la documentation du produit.

Escalade

Pour la contribution ou la compilation à partir des sources, utilisez la documentation du produit ou du repo.

Skills similaires