[Coin-discuss] OsiGlpk Not Correctly Reporting Infeasibility
Joseph Young
josyoun at nmt.edu
Fri Jul 15 19:39:27 EDT 2005
Hi,
Currently, OsiGlpk does not always correctly report if a problem
is infeasible. Specifically, if GLPK can determine that the problem is
infeasible during preprocessing, this information is lost.
During initialSolve(), the preprocessor is turned on. This
changes what error codes lpx_simplex() will return. Two such error codes
that may be returned are LPX_E_NOPFS and LPX_E_NODFS which mean primal and
dual infeasibility respectively. These error codes must be trapped, or
the information that this problem is primal or dual feasible will be lost.
According the documentation in GLPK:
Note that the presolver is able to recover only optimal solutions. If a
computed solution is infeasible or non-optimal, the corresponding solution
of the original problem cannot be recovered and therefore remains
undefined. If the user needs to know a basic solution even if it is
infeasible or non-optimal, the presolver must be disabled.
This means that subsequent calls to isProvenPrimalInfeasible() and
isProvenDualInfeasible() within OSI will return false even when the
problem is primal or dual infeasible. This happens because
lpx_get_status(),lpx_get_prim_stat(), lpx_get_dual_stat() will return
LPX_UNDEF, LPX_P_UNDEF, and LPX_D_UNDEF respectively when the problem is
determined to be infeasible during preprocessing.
In order to fix this, the error codes from lpx_simplex() must be
trapped and a flag set within OsiGlpk. Then, this flag must be checked
within the routines isProvenPrimalInfeasible() and
isProvenDualInfeasible(). This is a little bit tricky since there are
several places within the code where the flag needs to be reset (such as
when the problem is modified.)
Sinc, Joseph Young
More information about the Coin-discuss
mailing list