Embedding Dual-Fixing into Probing - #3244
Open
Opt-Mucca wants to merge 46 commits into
Open
Conversation
Add two new presolve techniques in combining probing and dual fixing
Collaborator
Author
|
@ZhaoWeiWang0319 feel like reviewing the code? I ended up changing a fair bit, but the core is the same. |
Collaborator
Author
|
I clearly still have a bug given the failing tests..... Will fix that now Edit: @ZhaoWeiWang0319 should now be good to review |
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## latest #3244 +/- ##
==========================================
+ Coverage 73.21% 73.29% +0.08%
==========================================
Files 445 445
Lines 107890 108381 +491
Branches 17278 17385 +107
==========================================
+ Hits 78990 79438 +448
- Misses 28624 28666 +42
- Partials 276 277 +1 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
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 implement the technique from https://link.springer.com/article/10.1007/s12532-026-00336-z
Locally I've observed 1.5% time improvement and 8% node improvement across all-optimal. It affects roughly 50% of the instances that solve under both settings. That seems to be a bit better than the numbers that are reported in the paper, and I'd chalk it up to (1) I'm using a 30min time limit (2) I happen to have randomly dropped some unlucky MIPLIB instances (3) My implementation is more efficient (4) I fixed some errors in the reference implementation that were missing some fixings.
Edit: Forgot good old (5). I've written incorrect code.
It seems to affect sub-mips extremely heavily, so introduces a lot of noise on instances that are racing for a primal solution. I'd not trust my results without extra testing from @fwesselm (There's not that many instances where the size of the presolved problem changes, and even for those that do, it's usually only a minor reduction)
@fwesselm I tested this before the last commit, so there's a small chance I broke something (I will test it again over the weekend). I realised that copying the object each time a domain is copied doesn't make sense because it's only used in presolve, and now have tried to get a bit fancy with the copy constructors of
HighsDomain. Hopefully this shaves off another small time improvement.Checklist
latestbranch