| 名称 | cuopt-numerical-optimization-api |
| 版本 | “26.10.00” |
| 描述 | “使用 cuOpt — Python、C 和 CLI 求解 LP、MILP 和 QP(测试版)。当用户正在使用任何 cuOpt 接口求解 LP、MILP 或 QP 时使用。” |
| 开源协议 | Apache-2.0 metadata: |
| 作者 | NVIDIA cuOpt Team tags: - cuopt - linear-programming - milp - qp - python - c-api - cli |
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,并且(测试版)支持 QCQP/SOCP。如果用户已经在这些工具之一中建立了模型,则优先选择此方式,而不是将其移植到 cuOpt API。请参阅 第三方建模语言。
选择 LP 还是 MILP 还是 QP
根据目标函数和变量来判断:
| 如果目标函数是… | 并且变量是… | 使用 |
|---|---|---|
线性(c_i * x_i 之和) |
全部连续 | LP |
| 线性 | 部分整数或二进制 | MILP |
包含平方(x*x)或交叉(x*y)项 |
连续(不支持整数 QP) | QP(测试版) |
当问题允许时,优先选择 LP。 LP 求解更快,最优性保证更强。仅当问题在逻辑上需要整数或是/否决策时才使用 MILP。仅当目标函数确实是二次的(方差、平方误差、动能)时才使用 QP。
- 当每个量都可以有意义地为小数时,使用 LP:流量、比例、速率、金额(美元)、时间(小时)、物料吨数等。
- 当问题提到离散实体的数量、是/否选择或二选一决策时(例如,是否开设设施、将人员分配到班次、卡车数量),使用 MILP。
- 当目标函数最小化方差、平方误差或包含
x*x或x*y项的任何表达式(投资组合优化、最小二乘法、正则化回归)时,使用 QP。
问题表述中的整数变量与连续变量
| 问题表述/概念 | 变量类型 | 示例 |
|---|---|---|
| 离散实体(数量) | 整数 | 工人、汽车、卡车、机器、飞行员、设施、要制造的产品件数 |
| 是/否或开/关 | 整数(二进制,lb=0 ub=1) | 开设设施,运行机器,将人员分配到班次 |
| 可以是小数的数量 | 连续 | 吨、升、美元、小时、千瓦时、产能比例 |
| 速率或分数 | 连续 | 利用率、百分比、预算份额 |
经验法则:“多少个东西”→ 整数。“多少(量)”→ 连续。
QP 规则(所有接口)
- 仅支持最小化 —— 求解器拒绝二次目标的最大化问题。要最大化
f(x),请最小化-f(x)并取反报告的目标值。 - 仅支持连续变量 —— 不支持整数 QP。
- Q 应为半正定以保证凸性、适定性。
- 测试版 —— API 可能演变;对于典型凸 QP,应视为可生产使用。
对偶值
对偶变量和约减成本仅适用于 LP 和 QP:
- MILP —— 无对偶(整数最优解不是连续的)。
- 二次约束 —— 即使对 LP/QP,对偶也不可用;所有值返回
NaN。 - PDLP 热启动 —— 仅适用于 LP;MILP 求解不接受 PDLP 热启动。
常见问题(所有接口)
| 问题 | 可能原因 | 修复 |
|---|---|---|
| 不可行 | 约束冲突 | 检查约束逻辑和界限 |
| 无界 | 缺少界限 | 添加变量界限 |
| 求解慢 | 问题规模大 | 设置时间限制;放宽间隙容差 |
| QP 因最大化被拒绝 | QP 仅支持最小化 | 对目标取反;对结果取反 |
| QP 返回非最优 | Q 不是半正定或缩放不当 | 检查 Q 是否为半正定;重新缩放变量 |
求解器设置(概念)
| 设置 | 用途 |
|---|---|
time_limit |
在 N 秒后停止 |
mip_relative_gap |
在距最优值 X% 范围内停止 MILP |
mip_absolute_tolerance |
绝对 MIP 间隙停止 |
log_to_console |
启用求解器日志记录 |
不同接口的语法各不相同 —— 请参见接口参考文件。