开发与优化

使用开源 NVIDIA cuOpt 加速决策优化

企业每天都会做出成千上万的决策,包括生产什么、在哪里发货、如何分配资源。大规模优化这些决策成为一项计算挑战。线性规划 (LP)混合整数规划 (MIP)车辆路线规划问题 (VRP) 提供了结构,但快速解决这些问题是瓶颈开始的地方。

NVIDIA cuOpt 为决策优化带来 GPU 加速,可大幅加速现实世界中的 LP、MIP 和 VRP 工作负载。cuOpt 现已在 Apache 2.0 许可下以开源形式提供,使您能够比以往更轻松地在本地或云端工作流中采用、调整和扩展优化。

对于开发者来说,最棒的部分是几乎为零的建模语言更改。您可以将 cuOpt 应用到使用 PuLPAMPL 构建的现有模型中,并且只需进行最少的重构。它快速、灵活,可随时用于实验或生产。

想要大规模查看 cuOpt 的实际应用情况?查看“强效助力优化:Artelys 如何由 FICO 和 NVIDIA 提供支持,展示了 cuOpt 在大规模单元占用问题上实现高达 20x 速度提升的作用。”

本文将介绍 cuOpt 如何在 PuLP 和 AMPL 等建模语言中,以几乎为零的变化求解 LP 和 MIP。您将学习如何:

  • 只需几分钟即可在本地或云端通过 Python、REST API 或 CLI 开始使用开源 cuOpt 优化
  • 使用 cuOpt GPU 加速解决 VRP 问题

真实用例:大规模咖啡物流

想象一下全球咖啡连锁店。每家商店每年需要数千包豆子。豆类经过采购、烘焙、包装和运输,每个阶段都受到设施容量和动态需求的限制。如果烘焙工厂突然离线,供应链必须立即重新调配订单并重新分配供应商。

添加交付?现在,您可以跨变更订单和时间窗口引导驾驶员,同时遵守劳动规则和shift limits

这些是现实世界中的 LP、MIP 和 VRP 问题,而且它们在计算上难以快速解决。cuOpt 专为应对这种复杂性而构建。

快速开始:在几分钟内解决您的第一个问题

无论您是要优化供应链、安排生产还是规划交付路线,cuOpt 都能提供多种快速入门方法。

cuOpt 服务器

此选项最适合 LP、MIP 和通过 REST 的 VRP。启动支持所有问题类型的 REST API 服务器。

通过 pip 安装:

pip install --extra-index-url=https://pypi.nvidia.com cuopt-server-cu12==25.5.* cuopt-sh==25.5.*

使用 Docker 运行 (包括 REST 和 client):

docker run --gpus all -it --rm -p 8000:8000 -e CUOPT_SERVER_PORT=8000 nvidia/cuopt:latest-cuda12.8-py312 python3 -m cuopt_server.cuopt_service

Python API

此选项最适合 VRP。使用 cuOpt 原生 Python API 进行编程控制和集成:

pip install --extra-index-url=https://pypi.nvidia.com cuopt-cu12==25.5.*

命令行界面

此选项最适合对 LP 和 MIP 进行基准测试。如果您有 MPS 格式的模型,请使用命令行界面 (CLI) 进行基准测试和自动化。

运行基准模型:

wget https://plato.asu.edu/ftp/lptestset/ex10.mps.bz2
bunzip2 ex10.mps.bz2
./cuopt_cli ex10.mps

此示例在 0.3 秒内解决了 NVIDIA H100 Tensor Core GPU 上具有超过 69 K 约束和 17 K 变量的 LP。

在云端试用 cuOpt

没有本地 GPU?您可以从浏览器或在持久云环境中运行 cuOpt。

特征 Google Colab  
设置 一键启动
GPU 访问 是 (有限,免费) 是 (完整的 GPU 实例)
持久性环境
预加载配置 手动 自动
优化使用 演示和快速测试 完整的开发工作流程
表 1。用于运行 cuOpt 的云部署选项:Colab 与 Launchable

模型更改最少:AMPL 和 PuLP 中的 LP 和 MIP

cuOpt 与 AMPL 和 PuLP 等建模语言集成。只需切换 solver,无需重写。

示例 1:AMPL 和 cuOpt

./ampl
var x >= 0; 
var y >= 0; 
maximize objective: 5*x + 3*y;
subject to c1: 2*x + 4*y >= 230;
subject to c2: 3*x + 2*y <= 190;
option solver cuoptmp;
solve;
display x, y;

要切换到 MIP,请将变量声明为 integer

示例 2:PuLP 和 cuOpt

import pulp
model = pulp.LpProblem("Maximize", pulp.LpMaximize)
x = pulp.LpVariable('x', lowBound=0)
y = pulp.LpVariable('y', lowBound=0)
model += 5*x + 3*y, "obj"
model += 2*x + 4*y >= 230
model += 3*x + 2*y <= 190
model.solve(pulp.CUOPT())

切换到 MIP:

x = pulp.LpVariable('x', lowBound=0, cat="Integer")
y = pulp.LpVariable('y', lowBound=0, cat="Integer")

使用 cuOpt 客户端解决 VRP 问题

cuOpt 通过 Python 或 REST 使用结构化 JSON 输入求解 VRPs:

工作流程示例:

from cuopt_sh_client import CuOptServiceSelfHostClient
import json

cuopt_service_client = CuOptServiceSelfHostClient(ip="localhost", port=5000)
optimized_routes = cuopt_service_client.get_optimized_routes(json_data)
print(json.dumps(optimized_routes, indent=4))

如需了解更多信息,请访问 GitHub 上的 NVIDIA/cuopt-examples

输出示例:

"num_vehicles": 2,
"solution_cost": -435.0,
"vehicle_data": {
  "Car-A":  {"task_id": [...],"arrival_stamp": [...]},
  "Bike-B": {"task_id": [...],"arrival_stamp": [...]}
},
"total_solve_time": 10.7

cuOpt 是物流或调度系统的理想选择,可返回经过优化的路线、成本和任务级别的任务。

开始使用开源优化

了解如何开始使用 NVIDIA cuOpt,将 GPU 加速引入现有的优化堆栈 – 无需供应商锁定,无需重写,只需更快地解决即可。此优化采用 GPU 原生、开发者优先且专为扩展而构建。主要优势包括:

  • 速度:借助 GPU 加速,将解决 LP/MIP/VRP 问题的速度提高 10 倍到 5,000 倍
  • 简便性:插入到 PuLPAMPL 等建模语言中,且更改最少
  • 灵活性选择适合的接口 – REST、Python 或 CLI
  • 模块化:适用于您的堆栈,可根据您的需求进行扩展
  • 开放Apache 2.0 许可,包含 GitHub 资源库示例文档 – 开箱即用或 fork,可针对您的域进行自定义
  • 随时可用:立即在 Google ColabNVIDIA Launchable 中启动
  • 支持:借助 NVIDIA AI Enterprise 在生产环境中运行 – 包括安装协助、升级和专家支持

NVIDIA cuOpt 现在也可在开源运营研究工具中心的 coin-or/cuopt GitHub 库中使用。在此之前,COIN-OR 和 NVIDIA 最近宣布了合作,进一步增强了优化开发者的生态系统。作为 COIN-OR 的一部分,cuOpt 可以更轻松地发现、扩展,并与其他开源求解器一起使用。

加入开源社区,借助完全可控性和灵活性,帮助塑造实时、智能决策优化的未来。

 

标签