[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