libminizinc icon indicating copy to clipboard operation
libminizinc copied to clipboard

float_EPS=0.0 leads to strong presolve

Open glebbelov opened this issue 1 year ago • 0 comments

The following model arguably should produce optimal obj value 10 with MIP at default solver's tolerance settings and -Dfloat_EPS=0.0:

array [1..2] of var 0.0..100.0: x;

solve maximize
    if x[1]<=4.9999999 /\ x[2]>=5.0000001
        then x[1]+x[2] else 0.0 endif;
        
constraint x[1]==x[2];

output [
  "OBJ_SOLVER: \(_objective), x[]: \(x), "
  ++ "OBJ_ACTUAL: \(if x[1]<=4.9999999 /\ x[2]>=5.0000001
        then x[1]+x[2] else 0 endif)"
];

However the conjunction is presolved as false, as can be seen from the LP file. Moreover, it is not presolved out at default setting of float_EPS (1e-6) which only strengthens the inequalities.

glebbelov avatar Apr 04 '24 04:04 glebbelov