Both CPLEX and Gurobi have a default "relative mipgap tolerance" of 1e-4 (0.0001). They stop when the "absolute mipgap" -- the difference between the current best bound and best integer solution -- is less than 1e-4 times the best bound. But as you have seen, CPLEX distinguishes the case of stopping with a gap that's positive (though within the tolerance) from the case of stopping with a gap of zero, while Gurobi reports "optimal solution" in both cases so long as the gap is within the tolerance.
Thus in your example, Gurobi may also be returning with a positive absmipgap and relmipgap -- but it's just not reporting them. To see the gap values for Gurobi, set
option gurobi_options 'bestbound=1';
To force the gap to 0 in the results, use the following settings:
option cplex_options 'mipgap 0';
option gurobi_options 'mipgap 0';
Bob Fourer
am...@googlegroups.com
=======