HiGHS icon indicating copy to clipboard operation
HiGHS copied to clipboard

Fix dualtol in HEkkDual::computeExactDualObjectiveValue()

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

In SCIP we sometimes use tighter dual feasibility tolerances; with 1e-10, I discovered this inconsistent use of dual tolerance in computeExactDualObjectiveValue() and the subsequent correctDualInfeasibilities().

Without this fix, the assert

      // no shifts should have occurred
      assert(!ekk_instance_.info_.costs_shifted);

is triggered on instance milo-v12-6-r2-40-1 from MIPLIB 2017.

ambros-gleixner avatar Feb 24 '23 23:02 ambros-gleixner

Strange: I'll look at this. If I remember correctly, computeExactDualObjectiveValue() is only used to determine the dual objective value with unperturbed costs to determine whether to terminate via the dual bound, so I'm puzzled how the assert is then avoided.

jajhall avatar Feb 25 '23 09:02 jajhall

The reason is that using the correct (=tighter) tolerance makes computeExactDualObjectiveValue() return minus infinity, so correctDualInfineasibilities() is not called.

ambros-gleixner avatar Feb 25 '23 23:02 ambros-gleixner

OK I guessed something significant had triggered your interest in this. I need to do some sanity performance checks on latest - since I don't think I've done anything to compromise it - and then I'll merge this.

jajhall avatar Feb 26 '23 07:02 jajhall

Thanks!

ambros-gleixner avatar Feb 27 '23 08:02 ambros-gleixner