Postsolve "tol"
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.
The behaviour described above also occurs with https://github.com/ERGO-Code/HiGHS/tree/mip-presolve