Option use_implied_bounds_from_presolve is now redundant - #3311
Merged
Merged
Conversation
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
Fuzzing by @odow (issue-010) identified an error in a dual value when the
use_implied_bounds_from_presolveoption was used.Essentially, it tightened the upper bound on a variable "y" from 3 down to the variable's optimal value of 11/6. IPX without crossover gave "y" a small dual value (-0.0007) that was feasible with respect to the upper bound of 11/6, but not feasible with respect to the original upper bound of 3. This dual value cannot be corrected, since it's uniquely defined by the row duals - which were feasible but (naturally) slightly different from the dual values after crossover (when the dual on "y" was zero).
This resonated with the study of fuzzing issue-009, when presolve was stopped by setting
presolve_reduction_limitand yielded an LP min -1 + x, s.t. 7 <= x; x >= 7. This clearly has a single feasible primal value, but feasible dual values are non-unique. IPX without crossover gave dual values led to infeasibility in postsolve, and can't be fixed since they require the row dual to be modified. For this instance, withoutpresolve_reduction_limit, identifying the singleton row would fixx=7and reduce the LP to empty. primal-dual postsolve was then correct.The moral of both is not to introduce dual non-uniqueness unnecessarily.
Hence this PR removes the ability to use the implied bounds after presolve. The option was off by default - since it didn't appear advantageous - and now its description notes that it is redundant.
Checklist
latestbranch