$title 'Test unbounded integer variables (MIP)' (PF4MIP,SEQ=596) $onText With GAMS 23.1 the GAMS parameter PF4 was introduced to modify the default upper bound on integer variables: Pf4=0: The new default upper bound of +INF will be passed to the solver. Pf4=1: The value of 100 instead of +INF will be passed to the solver. The solvers will operate as with older GAMS versions. In addition messages will be written to the log and listing to report on the number of integer or semi-integer variables which had the new default bound of +INF reset to 100. PF4=2: The new default values of +INF will be used as with PF4=0. When a solution is returned to GAMS and the level value of an integer variable exceeds the old bound value of 100, a message will be written to the log and listing. PF4=3: The same as PF4=2 with an additional execution error issued if the solution reports a level value greater than 100 for any integer variable with a default bound of +INF. Further, PF4=0,2,3 allow to set the lower bound of an integer variable to -INF. This simple test checks that solvers are working correctly with PF4=0. Contributor: Lutz Westermann, January 2013 $offText $if not set TOL $set TOL 1e-6 $onEcho > test.gms scalar rhs; variable z; integer variable y; equation a,b; a.. z =e= y; b.. y =l= rhs; model m /all/; $offEcho $if not '%GAMS.mip%' == '' $echo option MIP = %GAMS.mip%; >> test.gms $onEcho >> test.gms rhs = 150; solve m max z use mip; abort$(abs(z.l-150) > %TOL%) 'Objective value should be 150', z.l; rhs = 200.5; solve m max z use mip; abort$(abs(z.l-200) > %TOL%) 'Objective value should be 200', z.l; y.lo = -inf; rhs = -41.1; solve m max z use mip; if( not m.solvestat = %solveStat.capabilityProblems%, abort$(abs(z.l+42) > %TOL%) 'Objective value should be -42', z.l; ); $offEcho * Check that everything works if pf4 is set to 0 $call gams test.gms lo=%GAMS.lo% pf4=0 iterlim=%gams.iterlim% reslim=%gams.reslim% $if errorlevel 1 $abort Error in test.gms! Check test.lst!