mcpField
C
cuopt-numerical-optimization-api

cuopt-numerical-optimization-api

github.com/nvidia数据与数据库3.8k1.0k 次安装今天更新
代码仓库

关于 cuopt-numerical-optimization-api

使用 NVIDIA cuOpt 建模并求解线性、混合整数线性和二次优化问题的技能。面向 Python、C/C++ 与 CLI 用户,也介绍多种建模语言的求解器后端。

主要功能

  1. 01LP、MILP 与 QP 建模指导
  2. 02Python、C/C++ 和 CLI 接口
  3. 03第三方建模语言后端
  4. 04变量类型与求解器选择
  5. 05求解器设置及问题排查

适用场景

  1. 01为优化模型选择求解器
  2. 02通过 CLI 求解 MPS 文件
  3. 03在现有建模工具中使用 cuOpt
  4. 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.md
assets/c/lp_basic/
lp_simple.c
README.md
assets/c/lp_duals/
lp_duals.c
README.md
assets/c/lp_warmstart/
README.md
assets/c/milp_basic/
milp_simple.c
README.md
assets/c/milp_production_planning/
milp_production.c
README.md
assets/c/mps_solver/
mps_solver.c
README.md
assets/c/mps_solver/data/
sample.mps
assets/cli/
README.md
assets/cli/lp_production/
production.mps
README.md
assets/cli/lp_simple/
README.md
sample.mps
assets/cli/milp_facility/
facility.mps
README.md
assets/python/least_squares/
model.py
README.md
assets/python/lp_basic/
model.py
README.md
assets/python/lp_duals/
model.py
README.md
assets/python/lp_warmstart/
model.py
README.md
assets/python/maximization_workaround/
model.py
README.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_limitN 秒后停止
mip_relative_gap当 MILP 与最优值的差距在 X% 以内时停止
mip_absolute_toleranceMIP 绝对间隙停止阈值
log_to_console启用求解器日志

语法因接口而异——请参阅接口参考文件。

评论

支持 Markdown