Open
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 <224634272+nguidotti@users.noreply.github.com>
Signed-off-by: Nicolas Guidotti <224634272+nguidotti@users.noreply.github.com>
Signed-off-by: Nicolas Guidotti <224634272+nguidotti@users.noreply.github.com>
Signed-off-by: Nicolas Guidotti <224634272+nguidotti@users.noreply.github.com>
Signed-off-by: Nicolas Guidotti <224634272+nguidotti@users.noreply.github.com>
Signed-off-by: Nicolas Guidotti <224634272+nguidotti@users.noreply.github.com>
This presolve lets FJ (both CPU and GPU) run before presolving is completed, in order to provide incumbent callbacks as early as possible. While we cannot yet crush these incumbents into the fully-presolved problem representation, their primal values can be used to prune the B&B and provide stronger reduced cost fixings. With this PR, we now find 191 feasible in the first 15s (145 before), and the primal integral in 10min is now 18.7% (was 19.8% before). ## Summary by CodeRabbit * **New Features** * Early feasibility-jump heuristics (CPU & GPU) during presolve that report incumbents via callbacks and seed the main solve. * New early-incumbent heuristic framework with lifecycle, timing, and callback support. * **Bug Fixes** * Null-pointer guards for scaling and safer Python callback invocation with GIL handling. * Improvement callbacks now fire only for strictly better solutions. * **Chores** * Centralized cutoff handling and propagation of presolve incumbents; support for providing an initial cutoff. Authors: - Alice Boucher (https://github.com/aliceb-nv) Approvers: - Nicolas L. Guidotti (https://github.com/nguidotti) - Rajesh Gandham (https://github.com/rg20) - Ramakrishnap (https://github.com/rgsl888prabhu) URL: NVIDIA#899
…g branching as a setting Signed-off-by: Nicolas Guidotti <224634272+nguidotti@users.noreply.github.com>
Fixes fails when pdlp throws exception in concurrent mode. Still needs evaluation on why pdlp fails. ## Issue Authors: - Ishika Roy (https://github.com/Iroy30) - Ramakrishnap (https://github.com/rgsl888prabhu) Approvers: - Chris Maes (https://github.com/chris-maes) - Nicolas Blin (https://github.com/Kh4ster) - Trevor McKay (https://github.com/tmckayus) URL: NVIDIA#966
This PR adds writing of quadratic terms to mps file in the mps writer. This PR also includes using Kahan summation to reduce the numerical error of post solve for the presolve that removes the lower bounds for barrier. ## Issue Authors: - Rajesh Gandham (https://github.com/rg20) Approvers: - Chris Maes (https://github.com/chris-maes) - Ramakrishnap (https://github.com/rgsl888prabhu) URL: NVIDIA#949
…VIDIA#970) This PR fixes several bugs: - Failure to stop branch and bound quickly when an optimal solution is found - An incorrect dual bound on physciansched3-3 caused by a bug in clique cuts - A numerical issue in MIR cuts caused by dividing by small coefficients in the original inequality was leading to numerical issues in the cuts and false infeasibility on graphdraw-domain. This PR add support for implied bound cuts - The probing cache from heuristics is used to implement these cuts. We make the following changes to improve finding and generating knapsack cuts - If a constraint contains a negative coefficient, we complement the binary variable to produce a knapsack constraint - We rationalize coefficients and multiply the common denominator to make coefficients integer to produce a knapsack constraint - We fix variables where x* = 0 or x* = 1 to decrease the size of the 0-1 knapsack separation problem - After separating a cover, we find the minimal cover - We now lift the knapsack constraint We go from 0% gap closed on the publicly available instances of Wolter's main knapsack test set, to geomean of 14.39%. Wolter reports a geomean of gap closed of ~11% on the same subset of her test set. ``` Baseline =================================================================================================================== model gap closed knapsack cuts knapsack time zlp db zmip gen 0.00 - 0.00 +1.122338e+05 +1.122338e+05 +1.123134e+05 umts 0.00 - 0.00 +2.912957e+07 +2.912957e+07 +3.012408e+07 roll3000 0.00 - 0.00 +1.109728e+04 +1.109728e+04 +1.289900e+04 cap6000 0.00 - 0.00 -2.451537e+06 -2.451537e+06 -2.451377e+06 fiber 0.00 - 0.00 +1.981074e+05 +1.981074e+05 +4.059352e+05 lseu 0.00 - 0.00 +9.479572e+02 +9.479572e+02 +1.120000e+03 mitre 0.00 - 0.00 +1.151350e+05 +1.151350e+05 +1.151550e+05 mod010 0.00 - 0.00 +6.532083e+03 +6.532083e+03 +6.548000e+03 rococoC11-010100 0.00 - 0.00 +8.773207e+03 +8.773207e+03 +2.558600e+04 p2756 0.00 6 0.00 +2.701144e+03 +2.701144e+03 +3.124000e+03 mkc 0.00 - 0.00 -6.118500e+02 -6.118500e+02 -5.632120e+02 p0282 0.00 - 0.00 +1.800003e+05 +1.800003e+05 +2.584110e+05 p0548 0.00 - 0.00 +4.983656e+03 +4.983656e+03 +8.691000e+03 sp97ar 0.00 - 0.00 +6.525604e+08 +6.525604e+08 +6.631647e+08 harp2 0.00 - 0.00 -7.432517e+07 -7.432517e+07 -7.389960e+07 rococoC11-011100 0.00 - 0.00 +9.024205e+03 +9.024205e+03 +2.290600e+04 p0033 0.00 - 0.00 +2.838547e+03 +2.838547e+03 +3.089000e+03 nsrand-ipx 0.00 - 0.00 +4.966789e+04 +4.966789e+04 +5.152000e+04 mod008 0.00 - 0.00 +2.909311e+02 +2.909311e+02 +3.070000e+02 atlanta-ip 0.00 - 0.00 +8.128974e+01 +8.128974e+01 +9.500955e+01 Wolter Geomean gap closed (20 problems): 1.0 ``` After changes ``` ======================================================================================================================= model gap closed knapsack cuts knapsack time zlp db zmip p0033 0.00 1 0.00 +2.838547e+03 +2.838547e+03 +3.089000e+03 roll3000 0.00 11 0.00 +1.109728e+04 +1.109728e+04 +1.289900e+04 sp97ar 0.21 22 0.12 +6.525604e+08 +6.525824e+08 +6.631647e+08 cap6000 2.70 10 0.68 -2.451537e+06 -2.451533e+06 -2.451377e+06 mod008 3.48 10 0.00 +2.909311e+02 +2.914898e+02 +3.070000e+02 nsrand-ipx 4.39 108 0.10 +4.966789e+04 +4.974923e+04 +5.152000e+04 atlanta-ip 6.07 52 0.10 +8.128974e+01 +8.212313e+01 +9.500955e+01 mkc 13.86 51 0.02 -6.118500e+02 -6.051090e+02 -5.632120e+02 mod010 18.32 2 0.00 +6.532083e+03 +6.535000e+03 +6.548000e+03 lseu 23.80 1 0.00 +9.479572e+02 +9.889100e+02 +1.120000e+03 harp2 25.02 105 0.00 -7.432517e+07 -7.421871e+07 -7.389960e+07 rococoC11-010100 31.57 1057 0.08 +8.773207e+03 +1.408153e+04 +2.558600e+04 rococoC11-011100 36.94 537 0.06 +9.024205e+03 +1.415180e+04 +2.290600e+04 mitre 38.00 30 0.00 +1.151350e+05 +1.151426e+05 +1.151550e+05 p2756 85.46 346 0.01 +2.701144e+03 +3.062529e+03 +3.124000e+03 fiber 86.95 90 0.00 +1.981074e+05 +3.788121e+05 +4.059352e+05 p0548 88.50 123 0.00 +4.983656e+03 +8.264613e+03 +8.691000e+03 p0282 93.32 64 0.00 +1.800003e+05 +2.531751e+05 +2.584110e+05 gen 99.04 14 0.00 +1.122338e+05 +1.123126e+05 +1.123134e+05 Wolter Geomean gap closed (19 problems): 14.399854103217512 Geomean nonzero gap closed (19 problems): 5.292294960692844 Mean gap closed (19 problems): 34.6136937173968 Mean nonzero gap closed (19 problems): 34.61265998701388 ``` On a MIPLIB 5 minute run on GH200 ``` Geomean MIP GAP A / (B = basline): 0.99 Geomean Time to Optimal A/B: 1.00 A optimal 65 B optimal 64 A problems with feasible solutions 225 B problems with feasible solutions 222 A wins air05 2.50 2.79 rmatr100-p10 3.20 3.62 binkar10_1 61.17 94.57 cbs-cta 25.64 31.61 drayage-100-23 4.20 4.72 neos-5188808-nattai 114.30 162.75 mik-250-20-75-4 109.28 229.36 neos859080 1.38 1.72 mzzv42z 96.85 300.00 seymour1 12.72 18.47 neos-1582420 1.48 1.70 ns1116954 88.93 128.69 nu25-pr12 1.59 9.50 nursesched-sprint02 15.00 56.29 ns1952667 108.45 300.00 qap10 79.90 99.32 swath1 0.88 1.31 trento1 165.90 286.07 A wins 18 A losses neos-4738912-atrato 39.43 18.21 irp 27.62 12.68 istanbul-no-cutoff 29.41 23.73 eil33-2 21.12 8.24 neos5 42.42 34.95 markshare_4_0 12.10 9.89 neos-662469 249.75 156.25 neos-860300 4.12 3.50 neos8 1.13 1.01 gen-ip002 52.30 44.87 gen-ip054 172.18 93.65 gfd-schedulen180f7d50m30k18 216.00 70.70 n5-3 9.66 7.88 neos-1171448 3.94 3.06 neos-1445765 4.61 2.53 neos-3004026-krka 1.88 1.46 neos-960392 65.83 57.16 ns1830653 136.64 95.89 nw04 47.56 42.15 piperout-08 14.62 8.80 piperout-27 23.60 6.29 pk1 2.50 2.22 supportcase7 23.08 18.48 supportcase26 43.79 23.77 A losses 24 ``` Authors: - Chris Maes (https://github.com/chris-maes) Approvers: - Alice Boucher (https://github.com/aliceb-nv) - Akif ÇÖRDÜK (https://github.com/akifcorduk) URL: NVIDIA#970
Disabling these test cases as there are flaky and causing segfaults, and issue has been created to follow-up NVIDIA#967 Authors: - Ramakrishnap (https://github.com/rgsl888prabhu) Approvers: - Ishika Roy (https://github.com/Iroy30) URL: NVIDIA#1023
This PR adds a new termination enum for UnboundedOrInfeasible. This status is returned by presolvers PSLP and Papilo. ## Issue Closes NVIDIA#923 Authors: - Rajesh Gandham (https://github.com/rg20) Approvers: - Alice Boucher (https://github.com/aliceb-nv) - Chris Maes (https://github.com/chris-maes) - Ramakrishnap (https://github.com/rgsl888prabhu) URL: NVIDIA#941
This PR includes two performance improvements. 1. Take advantage of hyper sparsity while computing reduced costs in dual pushes in crossover code. This optimization improves the root relaxation solve significantly in some problems. For example: cod105, dano3_5. 2. Optimize right looking lu by replacing the linear degree bucket search with O(1) search. This optimization speeds up some of the hardest problems (root relaxation of MIP). For example: ``` chromaticindex1024(30%) cod105 (50%) k1mushroom (28%) splice1k1 (63%) supportcase26 (51%) ``` There are some regressions as well, but they are already solved in milliseconds. ## Issue Authors: - Rajesh Gandham (https://github.com/rg20) Approvers: - Chris Maes (https://github.com/chris-maes) URL: NVIDIA#948
…n in strong branching Signed-off-by: Nicolas Guidotti <224634272+nguidotti@users.noreply.github.com>
Signed-off-by: Nicolas Guidotti <224634272+nguidotti@users.noreply.github.com>
Signed-off-by: Nicolas Guidotti <224634272+nguidotti@users.noreply.github.com>
…IA#1017) ## Issue Authors: - Alice Boucher (https://github.com/aliceb-nv) Approvers: - Akif ÇÖRDÜK (https://github.com/akifcorduk) - Nicolas Blin (https://github.com/Kh4ster) - Ramakrishnap (https://github.com/rgsl888prabhu) URL: NVIDIA#1017
## Issue Authors: - Cindy Wilkinson (https://github.com/cwilkinson76) Approvers: - Ramakrishnap (https://github.com/rgsl888prabhu) URL: NVIDIA#1028
…istic_test Signed-off-by: Nicolas Guidotti <224634272+nguidotti@users.noreply.github.com>
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
|
🔔 Hi @anandhkb, this pull request has had no activity for 7 days. Please update or let us know if it can be closed. Thank you! If this is an "epic" issue, then please add the "epic" label to this issue. |
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.
Description
Issue
Checklist