HiGHS icon indicating copy to clipboard operation
HiGHS copied to clipboard

Assertion `new_infeasibility < 0' failed in HEkkPrimal.cpp:2813: void HEkkPrimal::shiftBound()

Open ambros-gleixner opened this issue 2 years ago • 6 comments

Running SCIP with HiGHS in debug mode on https://miplib.zib.de/instance_details_traininstance2.html runs into the above assert.

The attached log traininstance2.txt shows that SCIP initially calls the dual simplex, HiGHS reaches the objective limit, and then switches the primal.

In rebuild() -> correctPrimal() the assert fails because the bound is huge and adding the small perturbation of 1e-6 gets lost. Maybe the perturbation added should be scaled up by the size of the bound, if you want to break degeneracy in this case.

ambros-gleixner avatar Feb 09 '23 17:02 ambros-gleixner

Thanks, I'll take a look in due course

jajhall avatar Feb 09 '23 21:02 jajhall

One suggestion, not sure what you think: use a combination of relative and absolute perturbation:

  • for bounds with abs. value smaller than X keep as now
  • for larger bounds multiply the perturbation with (abs. value of the bound / X) X could be something like 1e4 then, the perturbation would be at least 1e-10 times the bound and would not disappear when added.

ambros-gleixner avatar Feb 15 '23 09:02 ambros-gleixner

I implemented this suggestion in pull request #1175 ; it resolves the problem in this issue.

ambros-gleixner avatar Feb 22 '23 00:02 ambros-gleixner

What do you think?

ambros-gleixner avatar Feb 22 '23 00:02 ambros-gleixner

I'll look at it, but will have to be sure that it doesn't lead to other problems or impair general performance

jajhall avatar Feb 22 '23 00:02 jajhall

Of course.

ambros-gleixner avatar Feb 22 '23 06:02 ambros-gleixner