Originally posted by: SystemAdmin
Yes, you are right. If I set the integrality tolerance to 0.0, then I get the solution with objective 1 as well.
The confusing issue in your case is: both answers (optimal value 1, and optimal value 1.99979) are correct. This seems to be completely stupid and from a theoretical point of view absolutely bogus, but this is the reality when tolerances are used for floating point calculations.
Namely, the integrality tolerance (default is 1e-5) means that CPLEX can accept any solution that is integral within the tolerance, but it does not need to accept such a solution. So, an x vector with integral variable values |x_j - floor(x_j) + tol| <= tol for all j, and at least one j with x_j not exactly integral is both, feasible
and infeasible, and CPLEX can just decide what it likes better.
The same is true for the feasibility tolerance. This effect can even mean that for a given model both answers, feasible and infeasible, are correct---provided that the model is infeasible in exact arithmetics and there is a solution that is feasible within the tolerances.
Your model is particularly nasty, as all the matrix coefficients look very innocent. Nevertheless, it seems that the numerical calculations allow for a solution with fractional values of about 1e-6 away from integrality that has a significantly larger objective value than the "true" optimal solution.
Tobias
#CPLEXOptimizers#DecisionOptimization