用途:通过 cuOpt C API 求解 LP、MILP 与 QP(beta)问题,适用于在 C/C++ 中嵌入线性或二次优化。LP/MILP/QP 共用同一库、头文件与构建方式,核心调用为 cuOptCreate*Problem、cuOptSolve、cuOptGetObjectiveValue。编码前需先确认问题类型与建模(变量、目标、约束、变量类型)。
主要能力:LP/MILP 的有序入口为 cuOptCreateRangedProblem(sense 用 CUOPT_MINIMIZE / CUOPT_MAXIMIZE,约束矩阵为 CSR 的 row_offsets / col_indices / values,变量类型字符数组用 CUOPT_CONTINUOUS / CUOPT_INTEGER)→ cuOptSolve(problem, settings, &solution) → cuOptGetObjectiveValue(solution, &obj_value) → 对应 cuOptDestroy* 调用;需包含 <cuopt/linear_programming/cuopt_c.h>。QP 为 beta,仅创建问题的调用不同,可接受二次目标。cuOptGetDualSolution 与 cuOptGetReducedCosts 可为 LP/QP 返回对偶值与约化成本,但存在二次约束时数组填 NaN,仅当约束全为线性时读取。
使用方式:按上述调用顺序编写 C 代码;完整有序代码与构建说明见 references/examples.md,参考示例包括 lp_basic、lp_duals、lp_warmstart、milp_basic、milp_production_planning、mps_solver,构建命令见 assets/README.md;CLI(MPS 文件)使用 cuopt_cli 与产品文档。
限制:该技能仅限 C。QP 只支持 CUOPT_MINIMIZE,最大化需对目标系数与 Q 取负;仅支持连续变量(全部设 CUOPT_CONTINUOUS),不支持整数 QP;Q 应为半正定以获得凸问题。MPS 解析要求 NAME、ROWS、COLUMNS、RHS、(可选)BOUNDS、ENDATA 按序出现,整数标记为 MARKER、INTORG、INTEND。出现 OOM 或缓慢时检查问题规模、使用稀疏矩阵、设置时间限制与间隙容差。