Aggregate implications - #3264
Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## latest #3264 +/- ##
==========================================
+ Coverage 73.29% 73.43% +0.13%
==========================================
Files 446 446
Lines 108244 108549 +305
Branches 17352 17395 +43
==========================================
+ Hits 79342 79711 +369
+ Misses 28626 28562 -64
Partials 276 276 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
…egatedImplications
| HighsInt row = -1; | ||
| for (const auto& var : clique) { | ||
| const auto* bounds = boundsMap.find(var.col); | ||
| HighsInt currentrow = bounds->originalBound.origin; |
There was a problem hiding this comment.
I think there needs to be a check here that currentrow is still single sided.
There was a problem hiding this comment.
@Opt-Mucca, currently, the code only stores origin with a VLB/VUB if the source row is not ranged:
// only record origin for size-2 one-sided rows that can be safely rewritten
HighsInt origin = rowsize[row] == 2 && !isRanged(row) ? row : -1;
Therefore, all rows will be one-sided in this loop.
There was a problem hiding this comment.
Can't the source row get updated to become double-sided though, e.g., parallel row merging? Or all origins invalidated by such a solution path?
There was a problem hiding this comment.
@Opt-Mucca, any modification made to the row (via addToMatrix) will reset the origin. I will have a closer look and double-check.
There was a problem hiding this comment.
Helloooo @Opt-Mucca! Looks like there are a couple of cases where just the row side(s) are manipulated in presolve, which should also trigger a reset of the origin. Also, I noticed that dual row bounds are not updated in these cases, so there is more to investigate. Hoooooray!
There was a problem hiding this comment.
I was also completely missing the case where the RHS value changes.....
Description
This PR adds aggregations for implied bounds (implications) as described by Chen et al., Exploiting Variable Implications in Presolve for Mixed Integer Programming.
Note that the current code does not consider cliques, i.e. "implications" between binary variables.
Unfortunately, the effect on performance is relatively small (ratios of shifted geometric means are close to 1.0). However, the models
gfd-schedulen180f7d50m30k18andneos-4763324-toguru(where 50% of the rows are eliminated) can be solved to optimality within a time limit of two hours with the new technique.I added unit tests for the new technique.
Note that the paper also describes "implication aware" constraint propagation, which I will investigate next.
Checklist
latestbranch