Main merge release/26.06 05 - #1318
Merged
ramakrishnap-nv merged 3 commits intoMay 28, 2026
Merged
Conversation
This change adds a code generator written in Python which generates the protobuf specifications and the code to map between cuopt problem, solution, and settings structures and protobuf messages. The protoc compiler is still used to build the serialization/deserialziation code and the grpc interface -- only the high-level .proto files are generated from the yaml description. The code generator reads a lightweight yaml file which describes the cuopt structures and generates mapping functions which are included in the grpc client and server implementations. When a field is added/changed in the problem, solution, or settings structures, a developer updates the yaml file and re-runs the code generator, then reviews the updated code. A README.md file in the codegen directory describes the yaml format, defaults, and conventions. As much as possible has been left to defaults or naming conventions to make the yaml easy to maintain. Authors: - Trevor McKay (https://github.com/tmckayus) - Ramakrishnap (https://github.com/rgsl888prabhu) Approvers: - Ramakrishnap (https://github.com/rgsl888prabhu) - Miles Lubin (https://github.com/mlubin) URL: NVIDIA#1107
…ual bound using this info. (NVIDIA#1239) This PR recognizes when the objective for a MIP can only move in discrete steps or increments. Integer variables can only move in steps of 1. You can then use equality constraints to try to find steps for continuous variables. And eventually show that an objective containing a mix of integer and continuous variables must also move in discrete steps. Using this allows you to improve your lower bound and stop early. For example, let's say objective has to be a multiple of 1/2. You have an upper bound of 2 and a lower bound of 1.7. You can declare optimality already, since the next best objective is 1.5 and your lower bound is already better than that. The computation is extremely fast. The longest problem in the MIPLIB benchmark, `roi5alpha10n8`, only takes 157 ms. This structure appears in 15/240 MIPLIB benchmark problems. It produces a 2x speedup on `mzzv42z` ``` Model Step Time w/ Time w/o Speedup Gap w/ Gap w/o Gap ratio ------------------------------------------------------------------------------------------ leo1 4 300.7s 300.8s 1.00x 2.13% 2.48% 1.16 leo2 1 300.0s 302.2s 1.01x 2.22% 3.21% 1.45 mas74 1e-05 35.8s 39.4s 1.10x 0.01% 0.01% 0.99 mzzv11 2 300.0s 300.1s 1.00x 5.08% 4.63% 0.91 mzzv42z 2 113.2s 235.1s 2.08x 0.00% 0.00% — n2seq36q 200 305.1s 300.0s 0.98x 0.38% 0.38% 1.00 n3div36 200 300.6s 301.8s 1.00x 3.52% 3.55% 1.01 neos-2075418-temuka 250 300.0s 300.0s 1.00x inf inf — neos-4532248-waihi 0.1 300.2s 300.0s 1.00x 99.2% 99.9% 1.01 nu25-pr12 5 4.0s 3.7s 0.92x 0.01% 0.00% 0.20 nw04 2 54.3s 52.9s 0.97x 0.00% 0.01% — qap10 2 43.5s 34.2s 0.79x 0.00% 0.00% — sp97ar 8 302.3s 302.7s 1.00x 1.50% 1.46% 0.97 sp98ar 4 302.2s 302.8s 1.00x 0.41% 0.68% 1.66 supportcase33 5 300.1s 300.1s 1.00x 13.2% 16.1% 1.22 var-smallemery-m6j6 0.03125 301.6s 301.5s 1.00x 1.86% 1.81% 0.97 ------------------------------------------------------------------------------------------ Geomean speedup: 1.03x (N=15) Geomean gap ratio: 1.14 (N=9, excluding solved/infeasible) ``` Authors: - Chris Maes (https://github.com/chris-maes) Approvers: - Akif ÇÖRDÜK (https://github.com/akifcorduk) - Nicolas L. Guidotti (https://github.com/nguidotti) - Ramakrishnap (https://github.com/rgsl888prabhu) URL: NVIDIA#1239
ramakrishnap-nv
requested review from
Iroy30,
KyleFromNVIDIA,
chris-maes and
kaatish
May 28, 2026 15:57
|
Caution Review failedPull request was closed or merged during review 📝 WalkthroughWalkthroughThis PR adds an objective-step lattice feature for MIP optimization and refactors gRPC code generation from hand-written mappers to a declarative YAML registry with auto-generated ChangesObjective Step Lattice Feature
gRPC Code Generation Refactoring
gRPC Tests & Test Infrastructure
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
Suggested labels
Suggested reviewers
🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
For #1317