Main merge release/26.04 2#1040
Conversation
…the cutoff when no incumbent was found.
… improve-reliable-branching # Conflicts: # cpp/src/branch_and_bound/pseudo_costs.cpp
…change estimate via dual simplex single pivot (NVIDIA#963).
…ange instead of the objective. fixed candidate ranking in reliability branching.
Signed-off-by: Nicolas Guidotti <[email protected]>
Signed-off-by: Nicolas Guidotti <[email protected]>
Signed-off-by: Nicolas Guidotti <[email protected]>
Signed-off-by: Nicolas Guidotti <[email protected]>
Signed-off-by: Nicolas Guidotti <[email protected]>
Signed-off-by: Nicolas Guidotti <[email protected]>
…g branching as a setting Signed-off-by: Nicolas Guidotti <[email protected]>
Remove `new_slacks` variable.
…n in strong branching Signed-off-by: Nicolas Guidotti <[email protected]>
Signed-off-by: Nicolas Guidotti <[email protected]>
Signed-off-by: Nicolas Guidotti <[email protected]>
## Issue Authors: - Cindy Wilkinson (https://github.com/cwilkinson76) Approvers: - Ramakrishnap (https://github.com/rgsl888prabhu) URL: NVIDIA#1028
…istic_test Signed-off-by: Nicolas Guidotti <[email protected]>
…ig. Use user object for relative complementarity gap. Initialize logger so we get feedback when reading large mps files
Improvements to reliability branching by the one and only @nguidotti !
This PR replaced `solved_by_pdlp` with `solved_by` in `optimization_problem_solution_t` and all associated objects, such that now it is possible to retrieve which method was used for solving the LP when running in concurrent mode. This also fix a typo in the `CUOPT_TERMINATION_STATUS` and updates the B&B logs to display the method used for solving the root relaxation. ## Issue Closes NVIDIA#787 Authors: - Nicolas L. Guidotti (https://github.com/nguidotti) - Ishika Roy (https://github.com/Iroy30) Approvers: - Ramakrishnap (https://github.com/rgsl888prabhu) - Nicolas Blin (https://github.com/Kh4ster) URL: NVIDIA#822
…anching (NVIDIA#994) This PR enables the following regarding batch PDLP: - Enable batch PDLP in reliability branching - Add work stealing so that batch PDLP and Dual Simplex can run concurrently and steal LPs from each other if one solves it first - Use correct problem representation with cuts for batch PDLP - Use a PDLP warm start cache across strong branching at the root and in reliability branching - Increase tolerance on batch PDLP to have higher quality solution - Increase iteration limit to allow instances that needs a high iteration count (with low cost per iteration) to still come through (only while solving the original LP to get warm start data) - Multiple heuristics to not run batch PDLP to not create overheads when Dual Simplex is clearly superior - Don't store and copy primal dual solution unless need it to save on memory - Handle batch PDLP errors better, allowing Dual Simplex to still continue in strong branching even if BPDLP fails - No early exit if the initial warm start PDLP solution is already feasible in BPDLP - Correct objective for BPDLP when there is an offset Currently we still keep BPDLP off by default both at the root and in reliability branching Authors: - Nicolas Blin (https://github.com/Kh4ster) - Trevor McKay (https://github.com/tmckayus) - Chris Maes (https://github.com/chris-maes) Approvers: - Nicolas L. Guidotti (https://github.com/nguidotti) - Trevor McKay (https://github.com/tmckayus) - Chris Maes (https://github.com/chris-maes) URL: NVIDIA#994
## Issue Authors: - Alice Boucher (https://github.com/aliceb-nv) Approvers: - Chris Maes (https://github.com/chris-maes) - Ramakrishnap (https://github.com/rgsl888prabhu) URL: NVIDIA#993
mip_scaling_strategy.cu implements a GPU-accelerated row-scaling and objective-scaling strategy for MIP problems that improves numerical conditioning before solving. Objective scaling (scale_objective): scales small objective coefficients up so the smallest nonzero magnitude reaches a minimum threshold (~1e-2), guarded by a max-coefficient cap to avoid blowing up large values. Iterative row scaling (scale_problem): runs up to 8 iterations of per-row scaling to reduce the log2-spread of row infinity norms across the constraint matrix. Each iteration: - Computes a median-based target norm (excluding big-M and zero-RHS rows for outlier robustness) - Picks a per-row scaling factor clamped to [1/32, 32], with tighter [1/16, 1] limits for big-M rows and rows that are already numerically large - Preserves integer coefficient integrality for integer variables by preferring power-of-two scaling factors (exact in IEEE 754) or integer-GCD-preserving multipliers - Tracks cumulative scaling per row within a [1/256, 256] band - Stops early when the spread improvement stalls below a relative tolerance The current optimal setup is with only row scaling, that's why I have left row scaling only as default. This also fixes a bug of setting lower bound of an approximate PDLP and Barrier solution. Now we set the bound only if the relaxation solution is fully feasible on absolute per row tolerances. With main+bug fix, number of infinite mip_gaps are 5-6 instances, with scaling it is only 1. So, scaling is able find 4-5 instances in with the absolute feasible root relaxation (does not necessarily mean basic solution in dual simplex). Overall we are able to find 2 more optimal solutions compared to main + lower bound bug fix. And ~1% mip gap improvement. ## Summary by CodeRabbit * **New Features** * MIP row-scaling enabled by default for improved numeric robustness. * Solver returns partial results early when time limits are reached; time-limit enforcement is more proactive. * New selectable MIP scaling configurations with logging of the selected scaling setup. * **Bug Fixes** * Fixed inconsistent unscaling and feasibility handling to prevent mismatched solution states. * **Chores** * Removed a deprecated MIP configuration option. * Consolidated and replaced the scaling strategy; tests and build updated accordingly. Authors: - Akif ÇÖRDÜK (https://github.com/akifcorduk) - Alice Boucher (https://github.com/aliceb-nv) - Ramakrishnap (https://github.com/rgsl888prabhu) Approvers: - Chris Maes (https://github.com/chris-maes) - Ishika Roy (https://github.com/Iroy30) - Ramakrishnap (https://github.com/rgsl888prabhu) URL: NVIDIA#906
Fix issue with infinite lower bounds and try to bound free variables in barrier from our @chris-maes
|
/ok to test b5b6dfa |
|
Caution Review failedPull request was closed or merged during review 📝 WalkthroughWalkthroughThis PR refactors solver method attribution from boolean flags to enumerated types, introduces configurable MIP hyper-parameters, implements cooperative dual-simplex/PDLP strong branching with shared context, adds MIP row/objective scaling logic, and extends CLI with parameter file serialization and hidden hyper-parameter filtering. Changes
Estimated code review effort🎯 5 (Critical) | ⏱️ ~120 minutes This PR introduces substantial, multi-pattern changes across the solver stack: (1) pervasive method-type refactoring affecting solution interfaces and termination tracking, (2) new hyper-parameter infrastructure with config serialization, (3) cooperative strong-branching architecture with shared context, (4) GPU-accelerated scaling strategy, (5) extensive CLI enhancements, and (6) coordinated updates across C++, gRPC, Python, and test layers. While many changes are localized refactors of similar patterns (e.g., swapping boolean fields for enums), the heterogeneity spans core algorithms (barrier, dual simplex, PDLP), MIP heuristics, build infrastructure, and multi-language bindings, requiring separate reasoning for each subsystem integration. Possibly related PRs
Suggested labels
Suggested reviewers
✨ Finishing Touches🧪 Generate unit tests (beta)
|
Description
For #1032