Skip to content

update#2

Open
rgsl888prabhu wants to merge 43 commits intotmckayus:grpc-docker-imagefrom
rgsl888prabhu:grpc-docker-image
Open

update#2
rgsl888prabhu wants to merge 43 commits intotmckayus:grpc-docker-imagefrom
rgsl888prabhu:grpc-docker-image

Conversation

@rgsl888prabhu
Copy link
Copy Markdown

Description

Issue

Checklist

  • I am familiar with the Contributing Guidelines.
  • Testing
    • New or existing tests cover these changes
    • Added tests
    • Created an issue to follow-up
    • NA
  • Documentation
    • The documentation is up to date with these changes
    • Added new documentation
    • NA

nguidotti and others added 30 commits March 16, 2026 14:42
… improve-reliable-branching

# Conflicts:
#	cpp/src/branch_and_bound/pseudo_costs.cpp
…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>
nguidotti and others added 13 commits April 2, 2026 14:39
Signed-off-by: Nicolas Guidotti <224634272+nguidotti@users.noreply.github.com>
Signed-off-by: Nicolas Guidotti <224634272+nguidotti@users.noreply.github.com>
## 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
@github-actions
Copy link
Copy Markdown

🔔 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.
If it is a PR and not ready for review, then please convert this to draft.
If you just want to switch off this notification, then use the "skip inactivity reminder" label.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants