该技能用于通过 NVIDIA cuOpt 的 GPU 加速求解器,用 Python API 建模并求解线性规划(LP)、混合整数线性规划(MILP)和二次规划(QP,beta)。三类问题的 API 表面一致,均使用 Problem、SolverSettings、solve,区别在目标形式与少量规则。
用途与问题类型选择:目标为线性且变量全连续时用 LP;目标线性但含整数或 0-1 变量时用 MILP;目标含 xx 或 xy 项且变量连续时用 QP(不支持整数 QP)。LP 求解更快、最优性保证更强,能用 LP 时优先;只有问题逻辑上需要整数或是否决策时用 MILP;只有目标确为二次(方差、平方误差、动能)时用 QP。
主要能力:添加变量(可设上下界、vtype 为 CONTINUOUS 或 INTEGER)、添加约束、设置目标与方向(MINIMIZE/MAXIMIZE)、通过 SolverSettings 设置 time_limit、mip_relative_gap、log_to_console 等参数并求解;读取 ObjValue、变量值、以及对 LP/QP 读取约束的 DualValue。参考资料模型涵盖 lp_basic、lp_duals、lp_warmstart、milp_basic、milp_production_planning、portfolio、least_squares、maximization_workaround、mps_solver 等,位于该技能的 assets/ 目录,可作参考但不要原地修改。
必要用法要点:状态检查必须使用 PascalCase,如 problem.Status.name in ["Optimal","PrimalFeasible"],写成 "OPTIMAL" 会静默失败。LP 状态有 Optimal、NoTermination、NumericalError、PrimalInfeasible、DualInfeasible、IterationLimit、TimeLimit、PrimalFeasible;MILP 有 Optimal、FeasibleFound、Infeasible、Unbounded、TimeLimit、NoTermination。QP 仅支持 MINIMIZE,需最大化时改为最小化 -f(x);变量必须连续;Q 应为半正定,否则可能返回非最优驻点;QP 为 beta,API 可能变化。
限制与注意:MILP 不返回对偶值;含二次约束时对偶值返回 NaN,仅在线性约束下读取。大表达式用链式 + 可能触发递归上限,建议用 LinearExpression(vars_list, coeffs_list, constant) 构建。若遇到不可行、数值问题等无法定位时可再升级诊断。具体安装命令、收费与平台支持信息暂未提供。