Skip to content
Open
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
86 changes: 86 additions & 0 deletions RELEASE-NOTES.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,91 @@
# Release Notes

## Release Notes 26.08

### New Features (26.08)

- New Multi-GPU PDLP: distribute LP solves across multiple GPUs using METIS partitioning; 2.5x–8.8x speedup on 8 NVLink-connected B200 GPUs
- Exploit sparsity in Barrier's augmented system on problems with large second order cone constraints
- New free-format MPS parser with faster parse time on large models
- New recursive RINS heuristic for MIP
- New zero-half (odd-cycle) cuts for MIP
- New vector length diving and Farkas diving heuristics for MIP
- Routing: accept NumPy and pandas inputs in the routing Python `DataModel` in addition to cuDF
- C API: extend getters with additional query functions
- C API: automatic CPU/GPU memory selection for problem construction
- gRPC: Python interface to the C++ gRPC async client
- gRPC: allow TLS arguments in the Python gRPC async API
- UBI10 (Red Hat Universal Base Image) container variant for FIPS 140-3 compliant environments; image tags use `-ubi10` suffix (e.g. `latest-cu13-ubi10`)

### Breaking Changes (26.08)

- Routing `DataModel` now defers GPU device construction to solve time; applications that accessed device-side data between `DataModel` construction and the solve call must be updated

### Improvements (26.08)

- Conflict graph improvements: incorporate non-binary rows and probing implications
- Reduce latency in LP concurrent mode
- Reduce memory footprint of PDLP
- Reduce QP solver overhead
- Improve Ruiz equilibration heuristic to also check column imbalance on QPs
- Run feasibility-jump (CPU-FJ) heuristics at the root node
- Papilo-based primal/dual crush in MIP presolve
- Expose diving hyperparameters for MIP solver configuration
- Unify threading model in the MIP solver using OpenMP tasks
- MIP log cleanup and improved readability
- Add short `cu12`/`cu13` Docker tag aliases
- Remove `cuda-python` as an explicit dependency
- gRPC: `objective_scaling_factor` is now optional in requests
- gRPC: assign workers to distinct GPUs via `cudaSetDevice`

### Bug Fixes (26.08)

- Allow zero-valued coefficient updates in the LP Python model
- Fix an issue in PDLP with cublas error capture and hang on infeasible solutions
- Fix an exception in concurrent LP cleanup
- Fix bug in barrier solver where cuDSS descriptors were being freed before their backing buffers
- Fix a bug in MIP where the lower bound was incorrect when using a single thread
- Fix a bug in MIP where nodes were lost in branch and bound
- Fix a bug in MIP where root cut pass CPU feasibility-jump solutions were dropped by GPU heuristics
- Add guard in MIP for huge bounds in bounds propagation
- Fix a bug in MIP with incorrect GF2 presolve constraint addressing
- Fix a bug in MIP in variable fixing for initial solutions
- Fix issue in MIP in clique size computation and numerical issues
- Fix an issue in MIP where cut generation did not obey the time limit
- Fix an issue on QPs where maximization was not supported
- Fix rotated second-order cone detection: make canonical quadratic constraint Q matrix in triplet form
- Fix nonconvex quadratic constraint detection bug
- Fix a bug on QCQP models that incorrectly threw an unsupported exception
- Fix second-order cone index collision and incorrect quadratic constraint to cone conversion for rotated cone constraints
- Validate MPS row type byte before enum cast to avoid undefined behavior
- Fix destruction order and by-reference capture bugs in solve.cu
- Fix route priority sort indexing in routing
- Fix vehicle fixed cost accounting in fragment-vs-route deltas in routing
- Fix routing min-vehicles bug
- Fix libomp ABI incompatibility
- gRPC: fix race condition in gRPC with log streaming

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Clarify the gRPC log-streaming entry.

Replace gRPC: fix race condition in gRPC with log streaming with gRPC: Fix a race condition in log streaming.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@RELEASE-NOTES.md` at line 66, Update the gRPC log-streaming release-note
entry to read “gRPC: Fix a race condition in log streaming.”

- gRPC: cancel active jobs on delete
- gRPC: terminate workers cleanly on server shutdown
- gRPC: drain all remaining log lines at job completion in `StreamLogs`
- Fix row-major layout not preserved when resizing routing capacity routes
- Fix routing YAML best-results export
- Fix double `va_start` undefined behavior in C API error handling

### Documentation (26.08)

- Align cuOpt documentation branding and update Doxygen configuration
- Update cuOpt MIP positioning documentation

### New Contributors (26.08)

- @jolorunyomi
- @cafzal
- @Sylendran95
- @jackthepunished
- @fallintoplace
- @arhag23
- @divyegala

## Release Notes 26.06

### New Features (26.06)
Expand Down
Loading