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 maximiserf(x), négatez les coefficients de l'objectif et les entrées Q. - Variables continues uniquement — définissez
CUOPT_CONTINUOUSpour 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.