You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
New RENS (Relaxation Enforced Neighboorhood Search) and mutation heuristics for MIP
MIP solver now runs diving and recursive sub-MIP heuristics during the cut passes
New primal heuristic for MIPs with arc-flow formulations
MIP solver includes new portfolio of CPUFJ heuristics with diversification
New compound move types in MIP CPUFJ: 2-opt, probing implication chain, clique exchange, set-partitioning row exchange and compound repair
New LNS heuristic for MIP that uses ruin-and-repair logic
New techniques for exploiting degeneracy in MIP
New implied indicator and capacity lifting presolve strengthening for fixed-charge MIP models
New MIP presolve: Block Bounded Value Elimination for binary problems
New MIP presolve: dual aggregation for binary variables with a single lock
New MIP presolve: exhaustive coefficient reduction for binary rows
New Curtis-Reid scaling for PDLP
New primal simplex method for LPs
Support for reusing the barrier ordering and symbolic factorization when solving a sequence of problems with different linear objectives and right-hand sides
The C API now exposes solver statistics as scalar solution attributes
New cuOptSetLogCallback for capturing solver logs in C API
Routing now supports per-vehicle distance-based breaks, so charging, refueling, or rest stops can be constrained by cumulative travel distance rather than time
The gRPC server now solves routing problems (VRP, TSP, and PDP). A Python gRPC routing client is included with cuOpt
A new HTTP proxy forwards requests to the gRPC server. The 26.10 container starts the proxy and gRPC server by default
Breaking Changes (26.10)
The container image now runs the proxy and gRPC servers by default; the legacy HTTP server is an optional start command
The proxy and gRPC servers (container defaults) support routing problems of up to 5500 locations with a travel time matrix, or 8000 without one. For larger problems use the legacy HTTP server.
libcuopt is split into client, mathopt and routing components, with separate wheels and conda packages; libcuopt is now a thin metapackage
The CUOPT_DISTRIBUTED_PDLP_PARTITIONER setting introduced in 26.08 is now CUOPT_MULTIGPU_PDLP_PARTITIONER
The CUOPT_USE_DISTRIBUTED_PDLP setting introduced in 26.08 has been removed; use method and num_gpus instead
When building from source the build.sh script no longer installs libcuopt into conda env by default
Improvements (26.10)
MIP heuristics improved by 3.2x on primal integral metric (geomean over the feasible MIPLIB2017 instances)
QP/QCQP solve 1.3X faster (geomean over QPLIB and Hans Mittelmann test set)
PDLP now uses column reduction on large problems (~2x faster in geomean over LPFeas addendum instances)
Dual simplex is 1.4X faster (geomean over MIPLIB root relaxations)
PDLP now fuses the Halpern update into the projection kernels to improve performance
Concurrent LP now uses a threshold on the number of nonzeros to decide whether to launch barrier and dual simplex
LP presolve now uses less memory by freeing the transpose matrix and PSLP reduced problem
LPs with poor scaling are now attempted without presolve, even if PSLP declares infeasibility
LP presolve now uses PSLP version 0.1.0; this version includes many improvements and bug fixes
MIP presolve now uses iteration and work limits rather than time limits
Set solution callbacks now use presolve and postsolve
Dual simplex now perturbs the cost more aggressively and uses primal simplex to remove perturbations
Dual simplex now attempts to remove perturbations when variables leave the basis
Dual simplex now tries several initial points on problems with dual degenerate bounded variables
Dual simplex's bound flipping ratio test is now approximately O(n) and combines Harris ratio test with bound flips
SOCP now use a tighter default tolerance on the duality gap without a performance regression
QCQP to SOCP conversion performance is improved and memory required is reduced
QP/SOCP presolve now eliminates free variables with zero cost
QP presolve now removes empty columns
Barrier now performs Ruiz scaling and builds the augmented system on the GPU
Barrier now scales QCQP/SOCP constraints by variable bounds before Ruiz equilibration
Barrier now performs iterative refinement on GPU when using the normal equations
Barrier now prints the cumulative setup time before the solve
Barrier termination check now has reduced GPU/host synchronization overhead
Barrier now has parameters to control adaptive regularization
Barrier now has parameters for tuning primal and dual regularization
Barrier now has a parameter to control bounding free variables
Barrier now has more initial point options
MIP root relaxation now honors the LP method selected
MIP performance improvement in duplicate cut detection
MIP reduced cost strengthening now stores lurking bounds based on incumbent objective value
MIP now includes a new Mod-2 cut separator for zero-half cuts
MIP random number generators are now per-worker instead of process wide; eliminating a source of nondeterminism
MIP time to first solution is improved by reducing overheads
MIP CPUFJ now has a fast-path heuristic for binary problems with integer activities
MIP CPUFJ now has structure-aware starts and repairs
Solution callback publication is now unified across solver components
Routing now uses cost instead of distance terminology when the objective does not represent a physical distance
The gRPC server now accepts a MIP starting solution
The gRPC server now checks GPU health and shuts down if the GPU is unusable. It also provides the standard gRPC readiness and liveness probes
Bug Fixes (26.10)
Fix an issue in the C API when accessing solutions on infeasible problems
Fix an issue in MPS writer on problems with no linear constraints
Fix ranged constraint conversion and MPS writing/reading round trips
Fix an issue in LP/MIP presolve where the user specified feasibility tolerance was not propagated to Papilo
Fix an issue in PDLP where reduced costs where not returned for the default PDLP preset (Stable3)
Fix a missing header in log for multi-GPU PDLP
Fix an issue in multi-GPU PDLP where the solver stopped silently when asking for more GPUs than available
Fix an issue on the C API where performing a multi-GPU PDLP solve on a problem built from row types and RHS was not supported
Fix an issue on multi-GPU PDLP where project_initial_primal was ignored
Fix a barrier crash when concurrent LP solving returned from cuDSS before its asynchronous work finished
Fix a segfault in concurrent LP if dual simplex or barrier finished without setting a solution
Fix several issues in barrier related to the cuDSS threading layer
Fix a bug on QCQP/SOCP problems with ranged rows
Fix an issue in QP/SOCP presolve where removing empty columns could corrupt memory, causing heap corruption errors or cudaErrorLaunchFailure
Fix nondeterminism in barrier when --cudss-deterministic=1
Fix an issue with QPs where duality gap was not included in the termination criteria
Fix a buffer overflow when getting the dual solution or reduced costs of a QCQP; these requests now return an error
Fix an issue in QP and SOCP where a large dual residual was reported for the final solution, even at an optimal solution
Fix an issue in dual simplex logs where bound flips were not accounted for in objective
Fix an issue in dual simplex inside MIP where cut off incorrectly used the perturbed objective
Fix an issue in dual simplex where dual variables and dual feasibility was not recomputed after basis repair
Fix MIP presolve incorrectly fixing continuous variables using integer-variable tolerance
Fix false optimality declaration in MIP deterministic mode
Fix several issues in MIP where the time limit was not respected
Fix an issue in MIP where flow cover cut generation was accidentally O(n^2)
Fix an issue in MIP where a large amount of time could elapse between logs
Fix an issue in MIP when converting knapsack constraints to rational coefficients could remove integer solutions
Fix an issue in MIP where termination was delayed during root cut passes
Fix an issue in MIP where the sub-MIP was not correctly stopped when the main solve finished
Fix an issue in MIP with halting cut passes
Fix an issue in MIP feasibility jump where weights were uninitialized when adding an objective cut
Fix an issue in MIP GF2 presolve where rank-deficient problems were incorrectly classified as infeasible
Fix an issue in MIP GF2 presolve where some one-sided rows were treated as equalities
Fix an issue in MIP presolve when performing single-lock-dual-aggregation
Fix an issue with tolerances in MIP mod-2 cuts
Fix a race condition in the asynchronous clique table generator and clique cuts
Fix an unsynchronized read/write of the MIP clique table
Fix a memory overflow in MIP when there were many feasible solutions
Disable clique table generation in MIP when running in deterministic mode
Fix an issue where the random number seed could change if multiple solves were performed within the same process
Fix an issue in routing: keep host sources alive for async route-view copies
Fix an issue in routing: avoid division by zero when vehicle capacity is zero
Fix an issue in routing: guard diagonal element lookup against negative offsets in top_k
Fix an issue in routing: uncapturable RMM copies inside CUDA graph captures
Fix an issue in routing: handle CUDA graph errors
Fix an issue where a PDLP warm start was ignored on a remote gRPC solve
Fix an issue where a gRPC connection could be closed during a long or idle solve because the server did not accept the client's keepalive pings
Fix an issue where stopping cuopt_cli or cuopt_grpc_server did not stop the solver process
Fix an issue in the Python gRPC client where waiting for a remote solve blocked other Python threads
Deprecations (26.10)
The container's default server is now the HTTP proxy plus cuopt_grpc_server, in place of the legacy HTTP server. The legacy HTTP server is still shipped in 26.10 and will be removed in 26.12. See "Starting the Container" on the Legacy HTTP Server page in the 26.10 user guide for the legacy container command and for CUOPT_SERVER_TYPE=legacy in Kubernetes. That page links to the 26.08 guide. Differences are in "Deprecated Interfaces Not Provided by the Proxy Server" in the 26.10 user guide.
Custom gRPC clients should now send solver settings through the parameters string map; individual setting fields are deprecated
Documentation (26.10)
Show mamba commands directly instead of a conda-then-swap note