HiGHS icon indicating copy to clipboard operation
HiGHS copied to clipboard

Postsolve "tol"

Open jajhall opened this issue 4 years ago • 1 comments

By default, postsolve uses a local tolerance "double tol = 0.0000001;", set in Presolve.h

Running master on 25fv47 with the following option settings

solver=ipm ipm_optimality_tolerance=1e-3 start_crossover_tolerance=1e-3 primal_feasibility_tolerance=1e-3 dual_feasibility_tolerance=1e-3

causes

highs: /home/jajhall/HiGHS/src/presolve/Presolve.cpp:5069: void presolve::Presolve::getDualsDoubletonEquation(int, int): Assertion `fabs(lby - valuePrimal[y]) < tol || fabs(uby - valuePrimal[y]) < tol' failed.

When looking at the numerical dependency of postsolve last summer, I introduced a set of named tolerances. These are initialised in Presolve::setNumericalTolerances(), where I discuss more appropriate values. However, all are currently set to "tol", and this is too crude. They should be related to the HiGHS primal and dual tolerances - and this is (presumably) why the assert fails.

Note that my attempt to set "better" values uses the following const double default_primal_feasiblility_tolerance = 1e-7; const double default_dual_feasiblility_tolerance = 1e-7; const double default_small_matrix_value = 1e-9; set in Presolve.h, so this isn't right. Rather than using these "default" values, postsolve should use the current HiGHS option values.

This issue has come from looking at IPM behaviour flagged up by a user. In release build postsolve continues OK, but there are 4 simplex iterations after postsolve.

jajhall avatar Mar 10 '21 09:03 jajhall

The behaviour described above also occurs with https://github.com/ERGO-Code/HiGHS/tree/mip-presolve

jajhall avatar Mar 10 '21 14:03 jajhall