Integration with cuopt (open source) #5050
Unanswered
sharabhshukla
asked this question in
Feature requests
Replies: 2 comments
-
|
we will not integrate cuopt. Too much work, too many limitations. cu-pdlp should be integrated in highs Note: pywraplp, MPsolver (same thing) is in maintenance mode. Work should go into ModelBuilder (small and easy) or MathOpt (recommended) |
Beta Was this translation helpful? Give feedback.
0 replies
-
|
Let me clarify, PR welcome. But it will be purely community supported. |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
What language and solver does this apply to?
All languages supported by OR-Tools (Python, C++, Java, C#)
Primarily: Linear Solver (LP/MILP interface)
Potentially: CP-SAT (future exploration)
Describe the problem you are trying to solve.
I would like to leverage GPU-accelerated LP and MILP solving capabilities provided by cuOpt, which is now open source, within the OR-Tools ecosystem.
Currently, OR-Tools supports several LP/MILP backends such as GLOP, SCIP, CBC, Gurobi, and CPLEX through the MPSolver interface. However, there is no native GPU-accelerated backend available.
For large-scale linear programs and mixed-integer linear programs (e.g., supply chain optimization, network flow, energy optimization, scheduling), CPU-based solvers become a bottleneck. cuOpt provides GPU-native optimization algorithms that can significantly accelerate these workloads. The goal is to integrate cuOpt as an optional backend solver in OR-Tools' Linear Solver interface.
Describe the solution you'd like
I propose adding cuOpt as a new backend to OR-Tools' Linear Solver (MPSolver) framework.
Specifically:
Implement a new solver type:
MPSolver::CUOPT_LINEAR_PROGRAMMING
MPSolver::CUOPT_MIXED_INTEGER_PROGRAMMING
Create a wrapper class similar to existing backends (e.g., GurobiInterface, ScipInterface) that:
Translates OR-Tools MPModelProto into cuOpt model format
Transfers model data to GPU
Invokes cuOpt solve routines
Retrieves solution values and status
Maps cuOpt statuses to OR-Tools statuses
Expose cuOpt through:
Python API (pywraplp)
C++ API
Java and C# wrappers (via existing OR-Tools binding pipeline)
Support:
LP models
MILP models
Warm starts (if supported by cuOpt)
Basic parameter configuration (tolerances, time limits, threads, GPU selection)
Optional:
Automatic GPU detection
Fallback to CPU solver if no GPU is available
This would allow users to simply switch solvers:
from ortools.linear_solver import pywraplp
solver = pywraplp.Solver.CreateSolver("CUOPT_MIXED_INTEGER_PROGRAMMING")
without changing modeling code.
Describe alternatives you've considered
Well today one can use pdlp's to solve large LP's but there is no direct way I know where I can run my ortools models written in c++ to use any GPU based solvers, having that option in or-tools only makes or-tools richer in terms of solver eco system and cuopt is open source so that presenta a fantastic opportunity
Additional context
More details about cuopt can be found on this link including the source code:
https://github.com/NVIDIA/cuopt
Beta Was this translation helpful? Give feedback.
All reactions