> For the attached testcase, we obtain that
> $ glpsol p0033.mps --max -o output.gomory --gomory
> gives an optimum of 5201, while
> $ glpsol p0033.mps --max -o output.intopt --intopt
> gives an optimum of 5131. The optimum 5201 is confirmed
> by a completely different MIP solver.
> Does this behavior indicate there is a bug somewhere?
Thank you very much for your bug report.
The bug appears only in 4.21 in the mip preprocessor (which is part
of the routine glp_intopt).
To fix the bug please replace the fragment in the routine
ios_preprocess_node (file src/glpios02.c) between #if 0 and #else
by the corresponding fragment between #else and #endif as follows:
/* determine original row bounds */
L = xcalloc(1+m, sizeof(double));
U = xcalloc(1+m, sizeof(double));
#if 0
switch (mip->mip_stat)
{ case GLP_UNDEF:
L[0] = -DBL_MAX, U[0] = +DBL_MAX;
break;
case GLP_FEAS:
switch (mip->dir)
{ case GLP_MIN:
L[0] = -DBL_MAX, U[0] = mip->mip_obj;
break;
case GLP_MAX:
L[0] = mip->mip_obj, U[0] = +DBL_MAX;
break;
default:
xassert(mip != mip);
}
break;
default:
xassert(mip != mip);
}
#else
L[0] = -DBL_MAX, U[0] = +DBL_MAX;
#endif
for (i = 1; i <= m; i++)
{ L[i] = glp_get_row_lb(mip, i);
U[i] = glp_get_row_ub(mip, i);
}
/* determine original column bounds */
and then compile the package as usual.
Andrew Makhorin
_______________________________________________
Bug-glpk mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/bug-glpk