Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@



NVIDIA® cuOpt™ is a GPU-accelerated optimization engine that excels in linear programming (LP), quadratic programming (QP), and vehicle routing problems (VRP), with support for quadratically constrained quadratic programming (QCQP) (beta), second-order cone programming (SOCP) (beta), and mixed integer linear programming (MILP) (beta). cuOpt enables near real-time solutions for large-scale LPs with millions of variables and constraints and offers easy integration into existing modeling languages with seamless deployment across hybrid and multi-cloud environments.
NVIDIA® cuOpt™ is a GPU-accelerated optimization engine that excels in linear programming (LP), quadratic programming (QP), and vehicle routing problems (VRP), with support for quadratically constrained quadratic programming (QCQP) (beta), second-order cone programming (SOCP) (beta), and mixed integer programming (MIP) (beta). cuOpt enables near real-time solutions for large-scale LPs with millions of variables and constraints and offers easy integration into existing modeling languages with seamless deployment across hybrid and multi-cloud environments.

The cuOpt MIP solver is in beta and under active development. The solver currently excels at finding high-quality feasible solutions quickly with GPU-accelerated primal heuristics. Proving feasible solutions optimal remains under active development.

Expand All @@ -35,7 +35,7 @@ cuOpt supports the following APIs:
- Quadratic Programming (QP)
- Quadratically Constrained Quadratic Programming (QCQP) (beta)
- Second-Order Cone Programming (SOCP) (beta)
- Mixed Integer Linear Programming (MILP) (beta)
- Mixed Integer Programming (MIP) (beta)
- C++ API support
- cuOpt is written in C++ and includes a native C++ API. However, we do not provide documentation for the C++ API at this time. We anticipate that the C++ API will change significantly in the future. Use it at your own risk.
- Python support
Expand All @@ -44,12 +44,12 @@ cuOpt supports the following APIs:
- Quadratic Programming (QP)
- Quadratically Constrained Quadratic Programming (QCQP) (beta)
- Second-Order Cone Programming (SOCP) (beta)
- Mixed Integer Linear Programming (MILP) (beta)
- Mixed Integer Programming (MIP) (beta)
- Algebraic modeling Python API allows users to easily build constraints and objectives
- Server support
- Linear Programming (LP)
- Routing (TSP, VRP, and PDP)
- Mixed Integer Linear Programming (MILP) (beta)
- Mixed Integer Programming (MIP) (beta)

This repo is also hosted as a [COIN-OR](http://github.com/coin-or/cuopt/) project.

Expand Down
18 changes: 9 additions & 9 deletions RELEASE-NOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -198,10 +198,10 @@

### Documentation (25.12)

- Missing parameters added to the documentation for LP and MILP.
- Missing parameters added to the documentation for LP and MIP.
- Release notes added to the main repository for easy access.
- Examples in the documentation improved.
- The openapi spec for the service showed the 'status' value for LP/MILP results as an int but it is actually a string.
- The openapi spec for the service showed the 'status' value for LP/MIP results as an int but it is actually a string.

## Release Notes 25.10

Expand Down Expand Up @@ -249,7 +249,7 @@
- Add support for nightly ``cuopt-examples`` notebook testing
- Reduce hard-coded version usage in repo
- Container to work on all different users including root
- Changes to download LP and MILP datasets, and also disable cvxpy testing for 3.10
- Changes to download LP and MIP datasets, and also disable cvxpy testing for 3.10
- Faster engine compile time
- Fix pre-commit for trailing whitespace and end of file
- Merge update version and fix version format bugs
Expand Down Expand Up @@ -287,7 +287,7 @@

### New Features (25.08)

- Added Python API for LP and MILP ([#223](https://github.com/NVIDIA/cuopt/pull/223))
- Added Python API for LP and MIP ([#223](https://github.com/NVIDIA/cuopt/pull/223))

### Breaking Changes (25.08)

Expand Down Expand Up @@ -353,7 +353,7 @@

- Added concurrent mode that runs PDLP and Dual Simplex together
- Added crossover from PDLP to Dual Simplex
- Added a C API for LP and MILP
- Added a C API for LP and MIP
- PDLP: Faster iterations and new more robust default PDLPSolverMode Stable2
- Added support for writing out mps file containing user problem. Useful for debugging

Expand All @@ -364,15 +364,15 @@

### Improvements (25.05)

- Hook up MILP Gap parameters and add info about number of nodes explored and simplex iterations
- Hook up MIP Gap parameters and add info about number of nodes explored and simplex iterations
- FJ bug fixes, tests and improvements
- Allow no time limit in MILP
- Allow no time limit in MIP
- Refactor routing
- Probing cache optimization
- Diversity improvements for routing
- Enable more compile warnings and faster compile by bypassing rapids fetch
- Constraint prop based on load balanced bounds update
- Logger file handling and bug fixes on MILP
- Logger file handling and bug fixes on MIP
- Add shellcheck to pre-commit and fix warnings

### Bug Fixes (25.05)
Expand All @@ -386,7 +386,7 @@
- Improve breaks to allow dimensions at arbitrary places in the route.
- Free var elimination with a substitute variable for each free variable.
- Fixed race condition when resetting vehicle IDs in heterogenous mode.
- cuOpt self-hosted client, some MILPs do not have all fields in ``lp_stats``.
- cuOpt self-hosted client, some MIPs do not have all fields in ``lp_stats``.
- Fixed RAPIDS logger usage.
- Handle LP state more cleanly, per solution.
- Fixed routing solver intermittent failures.
Expand Down
2 changes: 1 addition & 1 deletion docs/cuopt/source/convex-settings.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ This page describes the parameter settings available for cuOpt's convex optimiza
Common Parameters
-----------------

We begin by describing parameters common to both the MILP and LP solvers
We begin by describing parameters common to both the MIP and LP solvers


Time Limit
Expand Down
6 changes: 3 additions & 3 deletions docs/cuopt/source/cuopt-c/convex/examples/Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
Expand All @@ -7,7 +7,7 @@
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Makefile for cuOpt C API LP/MILP Examples
# Makefile for cuOpt C API LP/MIP Examples
#
# This Makefile automatically discovers all .c files in the current directory
# and builds corresponding executables.
Expand Down Expand Up @@ -115,7 +115,7 @@ list:

# Show help
help:
@echo "cuOpt C API LP/MILP Examples Makefile"
@echo "cuOpt C API LP/MIP Examples Makefile"
@echo "======================================"
@echo ""
@echo "This Makefile automatically discovers all .c files and builds them."
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
/*
* Example program for solving MPS files with cuOpt MILP solver
* Example program for solving MPS files with cuOpt MIP solver
*/

#include <cuopt/mathematical_optimization/cuopt_c.h>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/
/*
* Simple test program for cuOpt MILP solver
* Simple test program for cuOpt MIP solver
*/

// Include the cuOpt linear programming solver header
Expand Down Expand Up @@ -36,14 +36,14 @@ const char* termination_status_to_string(cuopt_int_t termination_status)
}
}

// Test simple MILP problem
// Test simple MIP problem
cuopt_int_t test_simple_milp()
{
cuOptOptimizationProblem problem = NULL;
cuOptSolverSettings settings = NULL;
cuOptSolution solution = NULL;

/* Solve the following MILP:
/* Solve the following MIP:
minimize -0.2*x1 + 0.1*x2
subject to:
3.0*x1 + 4.0*x2 <= 5.4
Expand Down Expand Up @@ -95,7 +95,7 @@ cuopt_int_t test_simple_milp()
cuopt_int_t termination_status;
cuopt_float_t objective_value;

printf("Creating and solving simple MILP problem...\n");
printf("Creating and solving simple MIP problem...\n");

// Create the problem
status = cuOptCreateRangedProblem(num_constraints,
Expand Down
8 changes: 4 additions & 4 deletions docs/cuopt/source/cuopt-c/mip/mip-examples.rst
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
MILP C API Examples
MIP C API Examples
===================


Example With Data
-----------------

This example demonstrates how to use the MILP solver in C. More details on the API can be found in :doc:`MIP C API <mip-c-api>`.
This example demonstrates how to use the MIP solver in C. More details on the API can be found in :doc:`MIP C API <mip-c-api>`.
Comment thread
coderabbitai[bot] marked this conversation as resolved.

The example code is available at ``../lp-milp/examples/simple_milp_example.c`` (:download:`download <examples/simple_milp_example.c>`):

Expand Down Expand Up @@ -41,7 +41,7 @@ You should see the following output:
.. code-block:: bash
:caption: Output

Creating and solving simple LP problem...
Creating and solving simple MIP problem...
Solving a problem with 2 constraints 2 variables (1 integers) and 4 nonzeros
Objective offset 0.000000 scaling_factor 1.000000
After trivial presolve updated 2 constraints 2 variables
Expand Down Expand Up @@ -98,7 +98,7 @@ If you have built it locally, libcuopt.so will be in the build directory ``cpp/b
# Find the libcuopt library directory and assign to LIBCUOPT_LIBRARY_PATH
LIBCUOPT_LIBRARY_PATH=$(dirname $(find / -name "libcuopt.so" 2>/dev/null))

A sample MILP MPS file (:download:`download mip_sample.mps <https://raw.githubusercontent.com/coin-or/SYMPHONY/master/Datasets/sample.mps>`):
A sample MIP MPS file (:download:`download mip_sample.mps <https://raw.githubusercontent.com/coin-or/SYMPHONY/master/Datasets/sample.mps>`):

.. literalinclude:: examples/mip_sample.mps
:language: text
Expand Down
2 changes: 1 addition & 1 deletion docs/cuopt/source/cuopt-c/quick-start.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
Quickstart Guide
=================

NVIDIA cuOpt provides C API for LP, QP and MILP. This section will show you how to install cuOpt C API and how to use it to solve LP, QP and MILP problems.
NVIDIA cuOpt provides C API for LP, QP and MIP. This section will show you how to install cuOpt C API and how to use it to solve LP, QP and MIP problems.


Installation
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
#!/bin/bash
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Basic LP Example using cuopt_cli
#
# This example demonstrates how to solve a simple LP problem using cuopt_cli.
# cuopt_cli is a standalone command-line tool that solves LP/MILP problems
# cuopt_cli is a standalone command-line tool that solves LP/MIP problems
# from MPS files without requiring a server.
#
# Requirements:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#!/bin/bash
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Basic MILP Example using cuopt_cli
# Basic MIP Example using cuopt_cli
#
# This example demonstrates how to solve a Mixed Integer Programming (MIP)
# problem using cuopt_cli. The main difference from LP is that variables
Expand All @@ -12,7 +12,7 @@
# - cuopt_cli installed and available in PATH
#

# Create MILP problem MPS file
# Create MIP problem MPS file
echo "* Optimal solution -28
NAME MIP_SAMPLE
ROWS
Expand Down
2 changes: 1 addition & 1 deletion docs/cuopt/source/cuopt-cli/index.rst
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Command Line Interface
======================

The cuopt_cli is a command-line interface for LP/MILP solvers that accepts MPS, QPS, or LP format files as input models. The format is dispatched automatically from the file extension (case-insensitive): ``.lp`` (with optional ``.gz`` / ``.bz2``) goes to the LP parser, ``.mps`` / ``.qps`` (with optional ``.gz`` / ``.bz2``) goes to the MPS parser, and unknown extensions are rejected. It provides command-line arguments to control all solver settings and parameters when solving linear and mixed-integer programming problems.
The cuopt_cli is a command-line interface for LP/QP/MIP solvers that accepts MPS, QPS, or LP format files as input models. The format is dispatched automatically from the file extension (case-insensitive): ``.lp`` (with optional ``.gz`` / ``.bz2``) goes to the LP parser, ``.mps`` / ``.qps`` (with optional ``.gz`` / ``.bz2``) goes to the MPS parser, and unknown extensions are rejected. It provides command-line arguments to control all solver settings and parameters when solving linear and mixed-integer programming problems.

The cuOpt MIP solver is in **beta** and under active development. The solver
currently excels at finding high-quality feasible solutions quickly with
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,7 @@ Working with PDLP Warmstart Data
Warmstart data allows to restart PDLP with a previous solution context. This should be used when you solve a new problem which is similar to the previous one.

.. note::
Warmstart data is only available for Linear Programming (LP) problems, not for Mixed Integer Linear Programming (MILP) problems.
Warmstart data is only available for Linear Programming (LP) problems, not for Mixed Integer Programming (MIP) problems.

:download:`pdlp_warmstart_example.py <examples/pdlp_warmstart_example.py>`

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
Note:
Warmstart data is only available for Linear Programming (LP) problems,
not for Mixed Integer Linear Programming (MILP) problems.
not for Mixed Integer Programming (MIP) problems.
Problem 1:
Maximize: 2*x + y
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# SPDX-License-Identifier: Apache-2.0

"""
Mixed Integer Linear Programming Example
Mixed Integer Programming Example

This example demonstrates how to:
- Create a mixed integer programming problem
Expand Down
4 changes: 2 additions & 2 deletions docs/cuopt/source/cuopt-python/mip/mip-examples.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ This section contains examples of how to use the cuOpt MIP Python API.

.. note::

The examples in this section are not exhaustive. They are provided to help you get started with the cuOpt mixed integer linear programming Python API. For more examples, please refer to the `cuopt-examples GitHub repository <https://github.com/NVIDIA/cuopt-examples>`_.
The examples in this section are not exhaustive. They are provided to help you get started with the cuOpt mixed integer programming Python API. For more examples, please refer to the `cuopt-examples GitHub repository <https://github.com/NVIDIA/cuopt-examples>`_.


Mixed Integer Linear Programming Example
Mixed Integer Programming Example
----------------------------------------

:download:`simple_milp_example.py <examples/simple_milp_example.py>`
Expand Down
2 changes: 1 addition & 1 deletion docs/cuopt/source/cuopt-python/quick-start.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
Quickstart Guide
=================

NVIDIA cuOpt provides a Python API for routing optimization and LP/QP/MILP that enables users to solve complex optimization problems efficiently.
NVIDIA cuOpt provides a Python API for routing optimization and LP/QP/MIP that enables users to solve complex optimization problems efficiently.

Installation
============
Expand Down
12 changes: 6 additions & 6 deletions docs/cuopt/source/cuopt-server/examples/lp-examples.rst
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ The following example showcases how to use the ``CuOptServiceSelfHostClient`` to
paths still use batch solve today; check response ``warnings`` or logs for the
deprecation notice.

The OpenAPI specification for the server is available in :doc:`open-api spec <../../open-api>`. The example data is structured as per the OpenAPI specification for the server, please refer :doc:`LPData under "POST /cuopt/request" <../../open-api>` under schema section. LP and MILP share same spec.
The OpenAPI specification for the server is available in :doc:`open-api spec <../../open-api>`. The example data is structured as per the OpenAPI specification for the server, please refer :doc:`LPData under "POST /cuopt/request" <../../open-api>` under schema section. LP and MIP share same spec.

If you want to run server locally, please run the following command in a terminal or tmux session so you can test examples in another terminal.

Expand Down Expand Up @@ -151,7 +151,7 @@ Batch mode response:
}

.. note::
Warm start is only applicable to LP and not for MILP.
Warm start is only applicable to LP and not for MIP.

.. _warm-start:

Expand Down Expand Up @@ -319,7 +319,7 @@ The ``data`` argument to ``get_LP_solve`` may be a dictionary of the format show
Aborting a Running Job in Thin Client
-------------------------------------

Please refer to the :ref:`aborting-thin-client` in the MILP Example for more details.
Please refer to the :ref:`aborting-thin-client` in the MIP Example for more details.


=================================================
Expand Down Expand Up @@ -407,7 +407,7 @@ Warm Start in CLI
To use a previous solution as the initial/warm start solution for a new request ID, you are required to save the previous solution, which can be accomplished use option ``-k``. Use the previous reqId in the next request as follows:

.. note::
Warm start is only applicable to LP and not for MILP.
Warm start is only applicable to LP and not for MIP.

.. code-block:: shell

Expand All @@ -434,7 +434,7 @@ In the case of batch mode, you can send a bunch of ``mps`` files at once, and ac
:doc:`../../convex-features`.

.. note::
Batch mode is not available for MILP problems.
Batch mode is not available for MIP problems.

A sample MPS file (:download:`sample.mps <lp/examples/sample.mps>`):

Expand All @@ -455,7 +455,7 @@ Run the example:
Aborting a Running Job In CLI
-----------------------------

Please refer to the :ref:`aborting-cli` in the MILP Example for more details.
Please refer to the :ref:`aborting-cli` in the MIP Example for more details.

.. note::
Please use solver settings while using .mps files.
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
#!/bin/bash
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# LP Batch Mode CLI Example
#
# This example demonstrates how to solve multiple LP problems in batch mode
# using MPS files with the cuopt_sh CLI tool.
#
# Note: Batch mode works only with MPS files in CLI and is not available for MILP.
# Note: Batch mode works only with MPS files in CLI and is not available for MIP.
#
# Requirements:
# - cuOpt server running on localhost:5000
Expand Down Expand Up @@ -52,4 +52,4 @@ echo "=== Solving Multiple MPS Files in Batch Mode ==="
cuopt_sh "$mps_file" "$mps_file" "$mps_file" -t LP -i $ip -p $port -ss '{"tolerances": {"optimality": 0.0001}, "time_limit": 5}'

echo ""
echo "Note: Batch mode is only available for LP with MPS files, not for MILP."
echo "Note: Batch mode is only available for LP with MPS files, not for MIP."
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
solving of similar problems.

Note:
Warmstart is only applicable to LP, not for MILP.
Warmstart is only applicable to LP, not for MIP.

Important:
To use warm start with PDLP, presolve must be explicitly disabled.
Expand Down
Loading
Loading