Skip to content

RENS - #1719

Open
nguidotti wants to merge 10 commits into
root-heuristicsfrom
rens
Open

RENS#1719
nguidotti wants to merge 10 commits into
root-heuristicsfrom
rens

Conversation

@nguidotti

@nguidotti nguidotti commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

This PR implements RENS (Relaxation Enforced Neighborhood Search, see [1, 2]) heuristic. RENS construct and then solve the following sub-MIP:

$$\begin{align} & z^* = \min \, \vec{c}^T \vec{x} \\ & \text{subject to} & \mathbf{A} \vec{x} = \vec{b} \\ & & l_i \leq x_i \leq u_i, \forall i \in \mathcal{N} \setminus \mathcal{I} \\ & & \lfloor \check{x}_j \rfloor \leq x_i \leq \lceil \check{x}_j \rceil, \forall i \in \mathcal{I} \\ & & \vec{x} \in \mathbb{R}^n \\ & & x_j \in \mathbb{Z}, \forall j \in \mathcal{I} \end{align}$$

where $\mathcal{N}$ is the set of all variables and $\mathcal{I}$ is the set of integer values. In essence, all integer variables with integral values are fixed, while the ones with fractional values are restricted to be rounded up or down.

This re-use the same infrastructure as RINS, i.e., it passes through presolve and can recurse. It requires some refactoring of the sub-MIP code to support these additional features.

Closes #1584.

Results

MIPLIB2017, GH200, 10min

================================================================================
 root-heuristics-1 (1) vs rens-1 (2)
================================================================================

------------------------------------------------------------------------------------------------------------------------------
|                                        |       Run 1        |       Run 2        |     Abs. Diff.     |   Rel. Diff. (%)   |
------------------------------------------------------------------------------------------------------------------------------
| Imported                                                 240                  240                   +0                 --- |
| Feasible                                                 227                  227                   +0                 --- |
| Optimal                                                   87                   92                   +5                 --- |
| Solutions with <0.1% primal gap                          145                  144                   -1                 --- |
| Nodes explored (mean)                              1.366e+07            1.309e+07           -5.731e+05               -4.19 |
| Nodes explored (shifted geomean)                        8947                 5351                -3596               -40.2 |
| Relative MIP gap (mean)                               0.2709                0.248             -0.02291               -8.45 |
| Relative MIP gap (shifted geomean)                   0.08762                0.087           -0.0006245              -0.713 |
| Solve time (mean)                                        419                405.6               -13.35               -3.19 |
| Solve time (shifted geomean)                           189.4                  176               -13.38               -7.06 |
| Primal gap (mean)                                      9.237                9.634              +0.3963               +4.29 |
| Primal gap (shifted geomean)                          0.3752               0.3633             -0.01198               -3.19 |
| Primal integral (mean)                                 20.14                20.08             -0.06726              -0.334 |
| Primal integral (shifted geomean)                      2.071                1.978             -0.09335               -4.51 |
------------------------------------------------------------------------------------------------------------------------------


----------------------------------------------------------------------
|             Name             |     status 1     |     status 2     |
----------------------------------------------------------------------
| app1-2                                 feasible            optimal |
| cbs-cta                                feasible            optimal |
| glass-sc                               feasible            optimal |
| mzzv11                                 feasible            optimal |
| n2seq36q                               feasible            optimal |
| neos-5093327-huahum                     optimal           feasible |
| triptim1                               feasible            optimal |
----------------------------------------------------------------------

================================================================================
 root-heuristics-2 (1) vs rens-2 (2)
================================================================================

------------------------------------------------------------------------------------------------------------------------------
|                                        |       Run 1        |       Run 2        |     Abs. Diff.     |   Rel. Diff. (%)   |
------------------------------------------------------------------------------------------------------------------------------
| Imported                                                 240                  240                   +0                 --- |
| Feasible                                                 225                  228                   +3                 --- |
| Optimal                                                   87                   91                   +4                 --- |
| Solutions with <0.1% primal gap                          143                  145                   +2                 --- |
| Nodes explored (mean)                              1.322e+07            1.306e+07           -1.595e+05               -1.21 |
| Nodes explored (shifted geomean)                        8201                 6479                -1722                 -21 |
| Relative MIP gap (mean)                               0.2695               0.2752            +0.005638               +2.09 |
| Relative MIP gap (shifted geomean)                    0.0867              0.08533            -0.001362               -1.57 |
| Solve time (mean)                                      415.6                407.4               -8.174               -1.97 |
| Solve time (shifted geomean)                           179.6                175.6               -4.007               -2.23 |
| Primal gap (mean)                                      10.28                9.136               -1.141               -11.1 |
| Primal gap (shifted geomean)                          0.4062               0.3614             -0.04481                 -11 |
| Primal integral (mean)                                 22.11                19.93               -2.177               -9.85 |
| Primal integral (shifted geomean)                      2.074                1.961              -0.1133               -5.46 |
------------------------------------------------------------------------------------------------------------------------------


----------------------------------------------------------------------
|             Name             |     status 1     |     status 2     |
----------------------------------------------------------------------
| app1-2                                 feasible            optimal |
| cmflsp50-24-8-8                        feasible            optimal |
| glass-sc                               feasible            optimal |
| neos-3216931-puriri                     timeout           feasible |
| neos-5104907-jarama                     timeout           feasible |
| peg-solitaire-a3                        timeout            optimal |
----------------------------------------------------------------------

References

[1] T. Berthold, “RENS: The optimal rounding,” Math. Prog. Comp., vol. 6, no. 1, pp. 33–54, Mar. 2014, doi: 10.1007/s12532-013-0060-9.
[2] T. Achterberg, “Constraint Integer Programming,” PhD, Technischen Universität Berlin, Berlin, 2007. doi: 10.14279/depositonce-1634.

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 nguidotti added this to the 26.10 milestone Aug 14, 2026
@nguidotti nguidotti self-assigned this Aug 14, 2026
@nguidotti nguidotti added non-breaking Introduces a non-breaking change improvement Improves an existing functionality mip labels Aug 14, 2026
@copy-pr-bot

copy-pr-bot Bot commented Aug 14, 2026

Copy link
Copy Markdown

Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually.

Contributors can view more details about this message here.

Comment thread cpp/src/branch_and_bound/branch_and_bound.cpp Outdated
@nguidotti

nguidotti commented Aug 14, 2026

Copy link
Copy Markdown
Contributor Author

/ok to test 7a9e5f4

@github-actions

github-actions Bot commented Aug 14, 2026

Copy link
Copy Markdown

CI Test Summary

⏭️ All 5 test job(s) skipped.

@nguidotti
nguidotti marked this pull request as ready for review August 15, 2026 08:10
@nguidotti
nguidotti requested a review from a team as a code owner August 15, 2026 08:10
@nguidotti
nguidotti requested review from aliceb-nv, chris-maes, kaatish and rg20 and removed request for kaatish and rg20 August 15, 2026 08:10
@nguidotti
nguidotti force-pushed the rens branch 3 times, most recently from 5783f9d to f03ad85 Compare August 20, 2026 12:25
@nguidotti
nguidotti force-pushed the rens branch 4 times, most recently from 699975c to d006e2d Compare August 21, 2026 11:33
Signed-off-by: Nicolas L. Guidotti <nguidotti@nvidia.com>
Signed-off-by: Nicolas L. Guidotti <nguidotti@nvidia.com>
Signed-off-by: Nicolas L. Guidotti <nguidotti@nvidia.com>
…ll variables to be picked.

Signed-off-by: Nicolas L. Guidotti <nguidotti@nvidia.com>
Signed-off-by: Nicolas L. Guidotti <nguidotti@nvidia.com>
Signed-off-by: Nicolas L. Guidotti <nguidotti@nvidia.com>
Signed-off-by: Nicolas L. Guidotti <nguidotti@nvidia.com>
…messages. infeasible is not counted during construction. fixed incorrect trigger for extension. refine progress tracking during construction.

Signed-off-by: Nicolas L. Guidotti <nguidotti@nvidia.com>
…g construction.

Signed-off-by: Nicolas L. Guidotti <nguidotti@nvidia.com>
Signed-off-by: Nicolas L. Guidotti <nguidotti@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

improvement Improves an existing functionality mip non-breaking Introduces a non-breaking change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEA] RENS

3 participants