[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Bug-glpk] Bug in glpk 4.21?
From: |
Andrew Makhorin |
Subject: |
Re: [Bug-glpk] Bug in glpk 4.21? |
Date: |
Sat, 1 Sep 2007 00:12:19 +0400 |
> 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