Skip to content

Add two new presolve techniques in combining probing and dual fixing - #3212

Merged
jajhall merged 29 commits into
ERGO-Code:probe-dual-fixfrom
ZhaoWeiWang0319:latest
Aug 11, 2026
Merged

Add two new presolve techniques in combining probing and dual fixing#3212
jajhall merged 29 commits into
ERGO-Code:probe-dual-fixfrom
ZhaoWeiWang0319:latest

Conversation

@ZhaoWeiWang0319

Copy link
Copy Markdown
Contributor

This PR implements two presolve techniques that combine probing and dual fixing in HiGHS: dual fixing augmented probing and generalized dual fixing, described in our paper: Enhancing Presolve in Mixed Integer Programming by Combining Probing and Dual Fixing.

The first technique embeds dual fixing into the probing framework, allowing more tentative bound changes to be detected during probing. The second extends classical dual fixing and uses probing to efficiently detect additional variable fixings.

The implementation is mainly integrated into HighsDomain and HighsImplications, with two new options, presolve_dfprobing and presolve_gdf, for controlling the two techniques.

Note that compared with our implementation of the paper in here, the code is re-implemented so that
(1) the changes on existing HiGHS are minimal, and
(2) it is consistent with current HiGHS architecture, as HiGHS continues to evolve with many new features and improvements.

We greatly appreciate the continued development and maintenance of HiGHS and hope these techniques can provide a useful addition to the presolve framework. We would be very happy to contribute this work to the HiGHS community and welcome any feedback or suggestions!

@ZhaoWeiWang0319
ZhaoWeiWang0319 marked this pull request as draft August 10, 2026 15:24
@jajhall jajhall self-assigned this Aug 10, 2026
@jajhall jajhall added the Enhancement New feature or request label Aug 10, 2026
@jajhall jajhall added the MIP label Aug 10, 2026
@jajhall

jajhall commented Aug 10, 2026

Copy link
Copy Markdown
Member

Thanks for this. Although I appreciate that this is still only a draft PR, I hope that @Opt-Mucca and @fwesselm can give some initial opinions on its suitability for inclusion in HiGHS, and make an assessment of the potential performance gain.

@Opt-Mucca

Copy link
Copy Markdown
Collaborator

@jajhall I can look into this tomorrow.

@ZhaoWeiWang0319 thanks for responding to my email request so quickly! Do you mind if we take the code (keeping contribution for your commits) and make changes ourselves? For example, I'd probably remove presolve_gdf entirely.

@Opt-Mucca
Opt-Mucca self-requested a review August 10, 2026 15:43
@ZhaoWeiWang0319

Copy link
Copy Markdown
Contributor Author

Thanks @jajhall, @Opt-Mucca! Not at all! Please feel free to take the code and make any changes you think are appropriate!

@codecov

codecov Bot commented Aug 10, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 91.21864% with 49 lines in your changes missing coverage. Please review.
✅ Project coverage is 72.84%. Comparing base (57e5065) to head (0385e82).
⚠️ Report is 92 commits behind head on latest.

Files with missing lines Patch % Lines
highs/mip/HighsDomain.cpp 92.51% 28 Missing ⚠️
highs/mip/HighsImplications.cpp 84.04% 15 Missing ⚠️
highs/mip/HighsImplications.h 90.90% 4 Missing ⚠️
highs/lp_data/HighsOptions.h 66.66% 2 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           latest    #3212      +/-   ##
==========================================
+ Coverage   72.77%   72.84%   +0.06%     
==========================================
  Files         444      444              
  Lines      107464   108020     +556     
  Branches    17288    17410     +122     
==========================================
+ Hits        78208    78686     +478     
- Misses      28979    29056      +77     
- Partials      277      278       +1     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@ZhaoWeiWang0319
ZhaoWeiWang0319 marked this pull request as ready for review August 11, 2026 01:20
@jajhall
jajhall changed the base branch from latest to probe-dual-fix August 11, 2026 08:41
@jajhall
jajhall merged commit 660fc8a into ERGO-Code:probe-dual-fix Aug 11, 2026
369 checks passed
@jajhall

jajhall commented Aug 11, 2026

Copy link
Copy Markdown
Member

Thanks, I've merged this into the probe-dual-fix branch so that we can properly evaluate your code and determine what will be merged into latest

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Enhancement New feature or request MIP

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants