关于 cuopt-numerical-optimization-api
使用 NVIDIA cuOpt 建模并求解线性、混合整数线性和二次优化问题的技能。面向 Python、C/C++ 与 CLI 用户,也介绍多种建模语言的求解器后端。
主要功能
- 01LP、MILP 与 QP 建模指导
- 02Python、C/C++ 和 CLI 接口
- 03第三方建模语言后端
- 04变量类型与求解器选择
- 05求解器设置及问题排查
适用场景
- 01为优化模型选择求解器
- 02通过 CLI 求解 MPS 文件
- 03在现有建模工具中使用 cuOpt
- 04排查不可行或求解缓慢的问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ nvidia/ skills --skill cuopt-numerical-optimization-api安装后在 Claude Code 中输入/cuopt-numerical-optimization-api确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/c/README.mdassets/c/lp_basic/lp_simple.cREADME.mdassets/c/lp_duals/lp_duals.cREADME.mdassets/c/lp_warmstart/README.mdassets/c/milp_basic/milp_simple.cREADME.mdassets/c/milp_production_planning/milp_production.cREADME.mdassets/c/mps_solver/mps_solver.cREADME.mdassets/c/mps_solver/data/sample.mpsassets/cli/README.mdassets/cli/lp_production/production.mpsREADME.mdassets/cli/lp_simple/README.mdsample.mpsassets/cli/milp_facility/facility.mpsREADME.mdassets/python/least_squares/model.pyREADME.mdassets/python/lp_basic/model.pyREADME.mdassets/python/lp_duals/model.pyREADME.mdassets/python/lp_warmstart/model.pyREADME.mdassets/python/maximization_workaround/model.pyREADME.md详细介绍
cuOpt 数值优化 API
使用 NVIDIA cuOpt 的 GPU 加速求解器建模并求解 LP、MILP 和 QP 问题。
选择接口
根据用户使用的接口选择相应参考文档:
| 接口 | 适用场景 | 参考文档 |
|---|---|---|
| Python | 用户正在编写 Python 代码 | references/python_api.md |
| C / C++ | 用户正在将其嵌入 C/C++ 应用程序 | references/c_api.md |
| CLI | 用户正在通过命令行求解 MPS 文件 | references/cli_api.md |
如果尚不清楚使用哪种接口,请先询问,再编写代码。
已经在使用建模语言? cuOpt 也可作为第三方建模工具的求解器后端——AMPL、GAMS / GAMSPy、PuLP、JuMP、Pyomo 和 CVXPY——几乎无需修改代码(将模型的求解器指向 cuOpt)。CVXPY 还支持凸 QP,并以 beta 形式支持 QCQP / SOCP。如果用户已经用这些工具之一建立了模型,优先采用此方案,而不是将模型移植到 cuOpt API。请参阅 第三方建模语言。
选择 LP、MILP 还是 QP
根据目标函数和变量作出判断:
| 如果目标函数…… | 且变量…… | 使用 |
|---|---|---|
是线性的(c_i * x_i 之和) | 全部为连续变量 | LP |
| 是线性的 | 部分为整数或二元变量 | MILP |
含有平方项(x*x)或交叉项(x*y) | 为连续变量(不支持整数 QP) | QP(beta) |
问题允许时,优先使用 LP。 LP 求解速度更快,最优性保证也更强。只有当问题在逻辑上要求整数或是/否决策时,才使用 MILP。只有当目标函数确实是二次函数时(方差、平方误差、动能),才使用 QP。
- 使用 LP:当每个量都可以有意义地取小数时,例如流量、比例、速率、金额、小时数、吨位等。
- 使用 MILP:当问题涉及离散实体的数量、是/否选择或二选一决策时(例如是否开设设施、将某人安排到某个班次、卡车数量)。
- 使用 QP:当目标函数要最小化方差、平方误差或任何包含
x*x或x*y项的表达式时(投资组合优化、最小二乘、正则化回归)。
根据问题表述判断整数变量还是连续变量
| 问题表述 / 概念 | 变量类型 | 示例 |
|---|---|---|
| 离散实体(数量) | INTEGER | 工人、汽车、卡车、机器、飞行员、设施、待制造的单元 |
| 是/否或开/关 | INTEGER(二元变量,lb=0 ub=1) | 开设设施、运行机器、将某人安排到某个班次 |
| 可取小数的数量 | CONTINUOUS | 吨、升、金额、小时、kWh、产能占比 |
| 速率或比例 | CONTINUOUS | 利用率、百分比、预算占比 |
经验法则:“多少个物件”→ INTEGER。“多少”→ CONTINUOUS。
QP 规则(适用于所有接口)
- 仅支持最小化——对于二次目标函数,求解器会拒绝 MAXIMIZE。要最大化
f(x),请最小化-f(x),并将报告的目标函数值取反。 - 仅支持连续变量——不支持整数 QP。
- Q 应为半正定矩阵,以确保问题是凸且适定的。
- Beta——API 可能会发生变化;对于典型的凸 QP,可将其视为可用于生产环境。
对偶值
对偶值和约化成本仅适用于 LP 和 QP:
- MILP——没有对偶值(整数最优解不是连续的)。
- 二次约束——即使是 LP/QP,也无法获取对偶值;所有值均返回
NaN。 - PDLP 热启动——仅适用于 LP;MILP 求解不接受 PDLP 热启动。
常见问题(所有接口)
| 问题 | 可能原因 | 修复方法 |
|---|---|---|
| 不可行 | 约束冲突 | 检查约束逻辑和边界 |
| 无界 | 缺少边界 | 添加变量边界 |
| 求解缓慢 | 问题规模较大 | 设置时间限制;增大间隙容差 |
| 使用 MAXIMIZE 时 QP 被拒绝 | QP 仅支持 MINIMIZE | 将目标函数取负;将结果取负 |
| QP 返回非最优结果 | Q 不是半正定或缩放不当 | 检查 Q 是否半正定;重新缩放变量 |
求解器设置(概念)
| 设置 | 用途 |
|---|---|
time_limit | N 秒后停止 |
mip_relative_gap | 当 MILP 与最优值的差距在 X% 以内时停止 |
mip_absolute_tolerance | MIP 绝对间隙停止阈值 |
log_to_console | 启用求解器日志 |
语法因接口而异——请参阅接口参考文件。
评论
支持 Markdown