Implement node presolve#368
Merged
rapids-bot[bot] merged 16 commits intoNVIDIA:branch-25.10from Sep 10, 2025
Merged
Conversation
kaatish
reviewed
Sep 5, 2025
chris-maes
reviewed
Sep 8, 2025
chris-maes
reviewed
Sep 8, 2025
chris-maes
reviewed
Sep 8, 2025
chris-maes
reviewed
Sep 8, 2025
| std::vector<f_t> constraint_ub(m); | ||
|
|
||
| // FIXME:: Instead of initializing constraint_changed to true, we can only look | ||
| // at the constraints corresponding to branched variable in branch and bound |
Contributor
There was a problem hiding this comment.
This is an important optimization, you might want to have a specific bound strengthening function just for this maybe
bool bound_strengthening(const std::vector<char>& row_sense,
const simplex_solver_settings_t<i_t, f_t>& settings,
const lp_problem_t<i_t, f_t>& problem,
const std::vector<variable_type_t>& var_types,
i_t branched_var,
f_t branched_var_lower_bound,
f_t branched_var_upper_bound)
Contributor
Author
There was a problem hiding this comment.
I actually tried this, but it does not do a good job. I think it might be related to not using the strengthened bounds from the parent.
Contributor
Author
|
/ok to test 16488a0 |
Contributor
Author
|
/merge |
aliceb-nv
pushed a commit
that referenced
this pull request
Sep 22, 2025
This PR implements node presolve using the bounds strengthening algorithm. At each node in branch-and-bound tree, host presolve is run to (i) improve the bounds on the variables (ii) to detect infeasibility and fathom nodes accordingly **Details** - The bounds strengthening takes into account of integrality constraints. This leads to more infeasibility detection than doing the dual simplex. - Bounds strengthening is done only starting with the constraints that are associated with the branched variables (all up to the root node) only. For examples, if the current node is depth 7, only constraints relating to these 7 variables are considered changed for the first iteration of bounds strengthening. This greatly improves the performance of the node presolve - This bounds strengthening is performed on the cpu ## Issue Closes #276 Authors: - Rajesh Gandham (https://github.com/rg20) Approvers: - Kumar Aatish (https://github.com/kaatish) URL: #368
aliceb-nv
pushed a commit
that referenced
this pull request
Sep 22, 2025
This PR implements node presolve using the bounds strengthening algorithm. At each node in branch-and-bound tree, host presolve is run to (i) improve the bounds on the variables (ii) to detect infeasibility and fathom nodes accordingly **Details** - The bounds strengthening takes into account of integrality constraints. This leads to more infeasibility detection than doing the dual simplex. - Bounds strengthening is done only starting with the constraints that are associated with the branched variables (all up to the root node) only. For examples, if the current node is depth 7, only constraints relating to these 7 variables are considered changed for the first iteration of bounds strengthening. This greatly improves the performance of the node presolve - This bounds strengthening is performed on the cpu ## Issue Closes #276 Authors: - Rajesh Gandham (https://github.com/rg20) Approvers: - Kumar Aatish (https://github.com/kaatish) URL: #368
jieyibi
pushed a commit
to yining043/cuopt
that referenced
this pull request
Mar 26, 2026
This PR implements node presolve using the bounds strengthening algorithm. At each node in branch-and-bound tree, host presolve is run to (i) improve the bounds on the variables (ii) to detect infeasibility and fathom nodes accordingly **Details** - The bounds strengthening takes into account of integrality constraints. This leads to more infeasibility detection than doing the dual simplex. - Bounds strengthening is done only starting with the constraints that are associated with the branched variables (all up to the root node) only. For examples, if the current node is depth 7, only constraints relating to these 7 variables are considered changed for the first iteration of bounds strengthening. This greatly improves the performance of the node presolve - This bounds strengthening is performed on the cpu ## Issue Closes NVIDIA#276 Authors: - Rajesh Gandham (https://github.com/rg20) Approvers: - Kumar Aatish (https://github.com/kaatish) URL: NVIDIA#368
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
This PR implements node presolve using the bounds strengthening algorithm. At each node in branch-and-bound tree, host presolve is run to (i) improve the bounds on the variables (ii) to detect infeasibility and fathom nodes accordingly
Details
Issue
Closes #276
Checklist