Skip to content
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

Incorrectly detected infeasibility with pre-solve turned off #1959

Open
apfelix opened this issue Oct 4, 2024 · 4 comments
Open

Incorrectly detected infeasibility with pre-solve turned off #1959

apfelix opened this issue Oct 4, 2024 · 4 comments
Assignees

Comments

@apfelix
Copy link

apfelix commented Oct 4, 2024

Hi,

as a workaround to #1958 I started using HiGHS with pre-solve turned off.

However, I found a model model for which infeasibility is reported when pre-solve is turned off:
highs_model_for_debugging_infeasible_with_presolve_off.mps.txt
Tested via highspy on version 1.7.2 and branch latest.

A solution is found by

  • turning on pre-solve
  • using SCIP
  • using Gurobi

In contrast to #1958 I was able to find an instance with <1000 vars and constraints.

@fwesselm
Copy link
Contributor

fwesselm commented Oct 4, 2024

I can reproduce this using the latest branch. However, the problem is solved to optimality when I reduce the mip_feasibility_tolerance:

highs.setOptionValue("mip_feasibility_tolerance", 1e-09);

@apfelix
Copy link
Author

apfelix commented Oct 4, 2024

@fwesselm Thanks for the check and also the tip with the feasibility tolerance. This helps a lot as a work-around!

@rschwarz
Copy link

rschwarz commented Oct 4, 2024

To make sure I understand this correctly: Changing the feasibility tolerance from 1e-6 (the default) to 1e-9 actually means that HiGHS is more strict when evaluating solution candidates, right? So there are candidates that would be rejected with 1e-9 but accepted as feasible with 1e-6.

It is somewhat counter-intuitive to me that this change would help find a solution (and not declare the problem infeasible), but maybe some bound propagation steps (or similar) are performed in a more conservative fashion with the restrictive tolerance.

@jajhall
Copy link
Member

jajhall commented Oct 4, 2024

Any perturbation to the MIP solver can change the way it behaves. It may well be that reducing the feasibility tolerance means that the state in which infeasibility was previously declared incorrectly doesn't occur.

Try running with different values of random_seed as an indication of how the code can run differently.

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

No branches or pull requests

4 participants