-
Notifications
You must be signed in to change notification settings - Fork 110
Implement node presolve #368
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
| 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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
|
/ok to test 16488a0 |
kaatish
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good to me!
|
/merge |
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
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
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