Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
1cf9cbb
Enable green context
hlinsen Oct 6, 2025
04aa7bc
update to docs
rgsl888prabhu Oct 6, 2025
74409aa
fix style
rgsl888prabhu Oct 6, 2025
381f7bf
Update introduction.rst
chris-maes Oct 6, 2025
abcd486
Update lp-features.rst
chris-maes Oct 6, 2025
23a2046
Update lp-milp-settings.rst
chris-maes Oct 6, 2025
da63ef2
Update lp-milp-settings.rst
chris-maes Oct 6, 2025
a4d1f2b
Update lp-features.rst
chris-maes Oct 6, 2025
82cbb2a
Update lp-features.rst
chris-maes Oct 6, 2025
84acac3
Update lp-milp-settings.rst
chris-maes Oct 6, 2025
54f4d4f
fix style
rgsl888prabhu Oct 6, 2025
ceb8658
Disable explicit cuda driver calls
hlinsen Oct 6, 2025
2be9dbe
Add missing file
hlinsen Oct 6, 2025
7c52303
add tests
rgsl888prabhu Oct 6, 2025
cf398c5
Remove unused var
hlinsen Oct 6, 2025
0b73872
Use logger
hlinsen Oct 6, 2025
692afab
Add detail namespace
hlinsen Oct 6, 2025
ef11801
Remove driver dependencies
hlinsen Oct 6, 2025
640f132
skip pytest for varrier
rgsl888prabhu Oct 6, 2025
368e6ca
Merge branch 'branch-25.10' of github.com:nvidia/cuopt into barrier_d…
rgsl888prabhu Oct 7, 2025
05a7798
Merge branch 'branch-25.10' into barrier_doc_and_tests
rgsl888prabhu Oct 7, 2025
fb31450
Update device_sparse_matrix.cuh
rgsl888prabhu Oct 7, 2025
f143904
Update test_python_API.py
rgsl888prabhu Oct 7, 2025
d715f3a
Update test_lp.py
rgsl888prabhu Oct 7, 2025
5b66f3d
Update data_model_wrapper.pyx
rgsl888prabhu Oct 7, 2025
67cbfc2
update
rgsl888prabhu Oct 7, 2025
f72ff01
fix
rgsl888prabhu Oct 7, 2025
e92295a
Merge branch 'barrier_doc_and_tests' of github.com:rgsl888prabhu/cuop…
rgsl888prabhu Oct 7, 2025
8a60946
Merge branch 'branch-25.10' into barrier_doc_and_tests
rgsl888prabhu Oct 7, 2025
cec6a7f
Merge branch 'branch-25.10' into barrier_doc_and_tests
rgsl888prabhu Oct 7, 2025
0d1a2ae
Fix post-solve crash on physicansched6-2
chris-maes Oct 7, 2025
eb140d1
Fix style
chris-maes Oct 7, 2025
08cbac2
Fix UMA on problems where row nz greater than number of rows
chris-maes Oct 8, 2025
e2449a9
Fix undefined reference due to realloc of colors from emplace_back
chris-maes Oct 8, 2025
a6b5e3e
Merge branch 'post_solve_fix_25_10' of github.com:chris-maes/cuopt in…
rgsl888prabhu Oct 8, 2025
f13d140
Merge branch 'branch-25.10' into barrier_doc_and_tests
rgsl888prabhu Oct 8, 2025
98cc2ac
testing
rgsl888prabhu Oct 8, 2025
0b97621
Merge branch 'barrier_doc_and_tests' of github.com:rgsl888prabhu/cuop…
rgsl888prabhu Oct 8, 2025
373a59b
Add 3.10 filter
rgsl888prabhu Oct 8, 2025
ffca33f
test
rgsl888prabhu Oct 8, 2025
cd979cf
enable few options on OMP
rgsl888prabhu Oct 8, 2025
eb67876
revert testing changes
rgsl888prabhu Oct 9, 2025
6c4b021
update
rgsl888prabhu Oct 9, 2025
6bede5b
Merge branch 'branch-25.10' into barrier_doc_and_tests
rgsl888prabhu Oct 9, 2025
66a6b7a
Merge branch 'barrier_doc_and_tests' of github.com:rgsl888prabhu/cuop…
rgsl888prabhu Oct 9, 2025
93b0243
add doc for CUOPT_BARRIER_DUAL_INITIAL_POINT
rgsl888prabhu Oct 9, 2025
93d013a
add test for CUOPT_BARRIER_DUAL_INITIAL_POINT
rgsl888prabhu Oct 9, 2025
668ded7
fix style
rgsl888prabhu Oct 9, 2025
f50b7b1
Update lp-milp-settings.rst
chris-maes Oct 9, 2025
5d56842
style
rgsl888prabhu Oct 9, 2025
b6a7ad5
add nvjit link to list
rgsl888prabhu Oct 9, 2025
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
5 changes: 4 additions & 1 deletion ci/test_wheel_cuopt.sh
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,14 @@ cd -
RAPIDS_DATASET_ROOT_DIR="$(realpath datasets)"
export RAPIDS_DATASET_ROOT_DIR

# Please enable this once ISSUE https://github.com/NVIDIA/cuopt/issues/94 is fixed
# Run CLI tests
timeout 10m bash ./python/libcuopt/libcuopt/tests/test_cli.sh

# Run Python tests

# Due to race condition in certain cases UCX might not be able to cleanup properly, so we set the number of threads to 1
export OMP_NUM_THREADS=1

RAPIDS_DATASET_ROOT_DIR=./datasets timeout 30m python -m pytest --verbose --capture=no ./python/cuopt/cuopt/tests/

# run jump tests and cvxpy integration tests for only nightly builds
Expand Down
27 changes: 27 additions & 0 deletions docs/cuopt/source/cuopt-c/lp-milp/lp-milp-c-api.rst
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,13 @@ You may use the following functions to determine the number of bytes used to rep
.. doxygenfunction:: cuOptGetIntSize
.. doxygenfunction:: cuOptGetFloatSize

Version Information
-------------------

You may use the following function to get the version of the cuOpt library

.. doxygenfunction:: cuOptGetVersion

Status Codes
------------

Expand All @@ -25,6 +32,9 @@ Every function in the C API returns a status code that indicates success or fail
.. doxygendefine:: CUOPT_INVALID_ARGUMENT
.. doxygendefine:: CUOPT_MPS_FILE_ERROR
.. doxygendefine:: CUOPT_MPS_PARSE_ERROR
.. doxygendefine:: CUOPT_VALIDATION_ERROR
.. doxygendefine:: CUOPT_OUT_OF_MEMORY
.. doxygendefine:: CUOPT_RUNTIME_ERROR

Optimization Problem
--------------------
Expand Down Expand Up @@ -156,9 +166,22 @@ These constants are used as parameter names in the :c:func:`cuOptSetParameter`,
.. doxygendefine:: CUOPT_MIP_ABSOLUTE_TOLERANCE
.. doxygendefine:: CUOPT_MIP_RELATIVE_TOLERANCE
.. doxygendefine:: CUOPT_MIP_INTEGRALITY_TOLERANCE
.. doxygendefine:: CUOPT_MIP_ABSOLUTE_GAP
.. doxygendefine:: CUOPT_MIP_RELATIVE_GAP
.. doxygendefine:: CUOPT_MIP_SCALING
.. doxygendefine:: CUOPT_MIP_HEURISTICS_ONLY
.. doxygendefine:: CUOPT_MIP_PRESOLVE
.. doxygendefine:: CUOPT_PRESOLVE
.. doxygendefine:: CUOPT_LOG_TO_CONSOLE
.. doxygendefine:: CUOPT_CROSSOVER
.. doxygendefine:: CUOPT_FOLDING
.. doxygendefine:: CUOPT_AUGMENTED
.. doxygendefine:: CUOPT_DUALIZE
.. doxygendefine:: CUOPT_ORDERING
.. doxygendefine:: CUOPT_ELIMINATE_DENSE_COLUMNS
.. doxygendefine:: CUOPT_CUDSS_DETERMINISTIC
.. doxygendefine:: CUOPT_BARRIER_DUAL_INITIAL_POINT
.. doxygendefine:: CUOPT_DUAL_POSTSOLVE
.. doxygendefine:: CUOPT_SOLUTION_FILE
.. doxygendefine:: CUOPT_NUM_CPU_THREADS
.. doxygendefine:: CUOPT_USER_PROBLEM_FILE
Expand Down Expand Up @@ -186,6 +209,7 @@ These constants are used to configure `CUOPT_METHOD` via :c:func:`cuOptSetIntege
.. doxygendefine:: CUOPT_METHOD_CONCURRENT
.. doxygendefine:: CUOPT_METHOD_PDLP
.. doxygendefine:: CUOPT_METHOD_DUAL_SIMPLEX
.. doxygendefine:: CUOPT_METHOD_BARRIER


Solving an LP or MIP
Expand All @@ -206,12 +230,15 @@ The output of a solve is a `cuOptSolution` object.
The following functions may be used to access information from a `cuOptSolution`

.. doxygenfunction:: cuOptGetTerminationStatus
.. doxygenfunction:: cuOptGetErrorStatus
.. doxygenfunction:: cuOptGetErrorString
.. doxygenfunction:: cuOptGetPrimalSolution
.. doxygenfunction:: cuOptGetObjectiveValue
.. doxygenfunction:: cuOptGetSolveTime
.. doxygenfunction:: cuOptGetMIPGap
.. doxygenfunction:: cuOptGetSolutionBound
.. doxygenfunction:: cuOptGetDualSolution
.. doxygenfunction:: cuOptGetDualObjectiveValue
.. doxygenfunction:: cuOptGetReducedCosts

When you are finished with a `cuOptSolution` object you should destory it with
Expand Down
140 changes: 110 additions & 30 deletions docs/cuopt/source/cuopt-python/routing/routing-example.ipynb

Large diffs are not rendered by default.

11 changes: 9 additions & 2 deletions docs/cuopt/source/introduction.rst
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,15 @@ This is a linear program.

How cuOpt Solves the Linear Programming Problem
------------------------------------------------
cuOpt includes an LP solver based on `PDLP <https://arxiv.org/abs/2106.04756>`__, a new First-Order Method (FOM) used to solve large-scale LPs. This solver implements gradient descent, enhanced by heuristics, and performing massively parallel operations efficiently by leveraging the latest NVIDIA GPUs.
cuOpt includes three LP solving methods:

In addition to PDLP, cuOpt includes a dual simplex solver that runs on the CPU. Both algorithms can be run concurrently on the GPU and CPU.
* **PDLP**: Based on `PDLP <https://arxiv.org/abs/2106.04756>`__, a First-Order Method (FOM) for solving large-scale LPs. This solver implements primal-dual hybrid gradient enhanced by heuristics. Sparse matrix-vector products are perfomed efficiently on NVIDIA GPUs.

* **Barrier (Interior-Point)**: A primal-dual interior-point method that uses GPU-accelerated sparse Cholesky and LDLT solves via cuDSS, and sparse matrix operations via cuSparse.

* **Dual Simplex**: A CPU-based dual simplex solver for small to medium-sized problems.

All three algorithms can be run concurrently on both GPU and CPU, with the fastest solution returned automatically.

Mixed Integer Linear Programming (MILP)
=========================================
Expand Down Expand Up @@ -121,6 +127,7 @@ cuOpt supports the following APIs:
- `AMPL <https://www.ampl.com/>`_
- `GAMS <https://www.gams.com/>`_
- `PuLP <https://pypi.org/project/PuLP/>`_
- `JuMP <https://github.com/jump-dev/cuOpt.jl>`_


==================================
Expand Down
9 changes: 6 additions & 3 deletions docs/cuopt/source/lp-features.rst
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ The LP solver can be accessed in the following ways:
- AMPL
- GAMS
- PuLP
- JuMP

- **C API**: A native C API that provides direct low-level access to cuOpt's LP capabilities, enabling integration into any application or system that can interface with C.

Expand Down Expand Up @@ -65,17 +66,19 @@ Users can control how the solver will operate by specifying the PDLP solver mode
Method
------

**Concurrent**: The default method for solving linear programs. When concurrent is selected, cuOpt runs two algorithms at the same time: PDLP on the GPU and dual simplex on the CPU. A solution is returned from the algorithm that finishes first.
**Concurrent**: The default method for solving linear programs. When concurrent is selected, cuOpt runs three algorithms in parallel: PDLP on the GPU, barrier (interior-point) on the GPU, and dual simplex on the CPU. A solution is returned from the algorithm that finishes first.

**PDLP**: Primal-Dual Hybrid Gradient for Linear Program is an algorithm for solving large-scale linear programming problems on the GPU. PDLP does not attempt to any matrix factorizations during the course of the solve. Select this method if your LP is so large that factorization will not fit into memory. By default PDLP solves to low relative tolerance and the solutions it returns do not lie at a vertex of the feasible region. Enable crossover to obtain a highly accurate basic solution from a PDLP solution.
**PDLP**: Primal-Dual Hybrid Gradient for Linear Program is an algorithm for solving large-scale linear programming problems on the GPU. PDLP does not attempt any matrix factorizations during the course of the solve. Select this method if your LP is so large that factorization will not fit into memory. By default PDLP solves to low relative tolerance and the solutions it returns do not lie at a vertex of the feasible region. Enable crossover to obtain a highly accurate basic solution from a PDLP solution.

**Barrier**: The barrier method (also known as interior-point method) solves linear programs using a primal-dual predictor-corrector algorithm. This method uses GPU-accelerated sparse Cholesky and sparse LDLT solves via cuDSS, and GPU-accelerated sparse matrix-vector and matrix-matrix operations via cuSparse. Barrier is particularly effective for large-scale problems and can automatically apply techniques like folding, dualization, and dense column elimination to improve performance. This method solves the linear systems at each iteration using the augmented system or the normal equations (ADAT). Enable crossover to obtain a highly accurate basic solution from a barrier solution.

**Dual Simplex**: Dual simplex is the simplex method applied to the dual of the linear program. Dual simplex requires the basis factorization of linear program fit into memory. Select this method if your LP is small to medium sized, or if you require a high-quality basic solution.


Crossover
---------

Crossover allows you to obtain a high-quality basic solution from the results of a PDLP solve. More details can be found :ref:`here <crossover>`.
Crossover allows you to obtain a high-quality basic solution from the results of a PDLP or barrier solve. When enabled, crossover converts these solutions to a vertex solution (basic solution) with high accuracy. More details can be found :ref:`here <crossover>`.


Presolve
Expand Down
Loading