pf4minlp.gms : Test upper bound of +INF on integer variables (MINLP)

Description

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.

This simple test checks that solvers are working correctly with PF4=0.

Contributor: Lutz Westermann, January 2013


Small Model of Type : MINLP


Category : GAMS Test library


Main file : pf4minlp.gms

$title 'Test unbounded integer variables (MINLP)' (PF4MINLP,SEQ=597)

$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.

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.minlp%' == '' $echo option MINLP = %GAMS.minlp%; >> test.gms

$onEcho >> test.gms
rhs = 150;
solve m max z use minlp;
abort$(abs(z.l-150) > %TOL%) 'Objective value should be 150', z.l;

rhs = 200.5;
solve m max z use minlp;
abort$(abs(z.l-200) > %TOL%) 'Objective value should be 200', z.l;

y.lo = -inf;
rhs = -41.1;
solve m max z use minlp;
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!