Description
Contributer: Arne Drud, December 2010
Small Model of Type : GAMS
Category : GAMS Test library
Main file : interval.gms
$title Test for interval evaluation (INTERVAL,SEQ=506)
$onText
Contributer: Arne Drud, December 2010
$offText
$onEchoV > decr.gms
$eolCom !
*
* Monotonely decreasing function in various combinations
*
$if not set global $set global 0
Scalar Global 1 if solver is global and 0 otherwise / %global% /
LOpt_Stat Model Status for locally optimal solutions / 2 /
LInfeas_Stat Model Status for locally infeasible solutions / 5 /
GOpt_Stat Model Status for globally optimal solutions / 1 /
GInfeas_Stat Model Status for globally infeasible solutions / 4 /
Opt_Stat Model Status for optimal solutions used here
Infeas_Stat Model Status for infeasible solutions used here ;
set case / high, mid, low /;
parameter RhsV(case)
scalar Rhs;
variable x;
$if not set case $abort Parameter case must define an existing include file
$include %case%
abort$(x.lo >= x.up) "lower and upper bounds are not consistent", x.lo, x.up;
*
* Define Rhsv such that it is above function value at lower end of the
* interval and belowe the function value at the upper end of the interval
* and matches the function value in the middle for rhsv(mid):
Rhsv("high") = func(x.lo) + 1.0;
Rhsv("mid") = func(((x.lo+x.up)/2));
Rhsv("low") = func(x.up) - 1.0;
equation e_eq;
e_eq .. func(x) =E= Rhs;
model decr_eq / e_eq /;
equation e_gt;
e_gt .. func(x) =G= Rhs;
model decr_gt / e_gt /;
equation e_lt;
e_lt .. func(x) =L= Rhs;
model decr_lt / e_lt /;
*
* Desired Model Status for local solver: 2 = Locally optimal, 5 = Locally infeasible
*
Parameter Mstat_eq(Case) / high 5
mid 2
low 5 /;
Parameter Mstat_gt(Case) / high 5
mid 2
low 2 /;
Parameter Mstat_lt(Case) / high 2
mid 2
low 5 /;
*
* Translate into Global return codes if relevant
*
if ( Global,
option nlp=conopt4;
Opt_Stat = GOpt_Stat; Infeas_Stat = GInfeas_Stat;
Mstat_eq(case)$(Mstat_eq(case) eq LOpt_Stat) = Opt_Stat;
Mstat_eq(case)$(Mstat_eq(case) eq LInfeas_Stat) = Infeas_Stat;
Mstat_gt(case)$(Mstat_gt(case) eq LOpt_Stat) = Opt_Stat;
Mstat_gt(case)$(Mstat_gt(case) eq LInfeas_Stat) = Infeas_Stat;
Mstat_lt(case)$(Mstat_lt(case) eq LOpt_Stat) = Opt_Stat;
Mstat_lt(case)$(Mstat_lt(case) eq LInfeas_Stat) = Infeas_Stat;
else
option nlp=conopt3;
Opt_Stat = LOpt_Stat; Infeas_Stat = LInfeas_Stat;
);
*
* Characteristics for solution for optimal models:
* 1: Variable at upper bound
* 2: Variable determined by constraint as equality
*
Parameter Char_eq(case) / mid 2 /;
Parameter Char_gt(case) / mid 2, low 1 /;
Parameter Char_lt(case) / high 1, mid 1 /;
option limrow = 0, limcol = 0;
loop( case,
Rhs = RhsV(case);
if(not Global,x.l = (x.up+x.lo)/2;);
solve decr_eq using nlp maximizing x;
abort$(decr_eq.solvestat ne 1) "Solver Status is not 1";
abort$(decr_eq.modelstat ne Mstat_eq(case)) "Model Status is not as expected";
if ( decr_eq.modelstat eq Opt_Stat,
if ( Char_eq(case) eq 1,
abort$(abs(x.l-x.up) > 1.e-7) "Solution value is not as expected"; );
if ( Char_eq(case) eq 2,
abort$(abs(func(x.l)-RhsV(case)) > 1.e-7) "Solution value is not as expected"; );
);
if(not Global,x.l = (x.up+x.lo)/2;);
solve decr_gt using nlp maximizing x;
abort$(decr_gt.solvestat ne 1) "Solver Status is not 1";
abort$(decr_gt.modelstat ne Mstat_gt(case)) "Model Status is not as expected";
if ( decr_gt.modelstat eq Opt_Stat,
if ( Char_gt(case) eq 1,
abort$(abs(x.l-x.up) > 1.e-7) "Solution value is not as expected"; );
if ( Char_gt(case) eq 2,
abort$(abs(func(x.l)-RhsV(case)) > 1.e-7) "Solution value is not as expected"; );
);
if(not Global,x.l = (x.up+x.lo)/2;);
solve decr_lt using nlp maximizing x;
abort$(decr_lt.solvestat ne 1) "Solver Status is not 1";
abort$(decr_lt.modelstat ne Mstat_lt(case)) "Model Status is not as expected";
if ( decr_lt.modelstat eq Opt_Stat,
if ( Char_lt(case) eq 1,
abort$(abs(x.l-x.up) > 1.e-7) "Solution value is not as expected"; );
if ( Char_lt(case) eq 2,
abort$(abs(func(x.l)-RhsV(case)) > 1.e-7) "Solution value is not as expected"; );
);
);
$offEcho
$onEcho > dcase1.gms
$macro func(x) -log(x)
x.lo = 0.1; x.up = 2;
$offEcho
$onEcho > dcase2.gms
$macro func(x) -power(x,3)-x
x.lo = 0.0; x.up = 1.0;
$offEcho
$onEcho > dcase3.gms
$macro func(x) -power(x,3)
x.lo = -1.0; x.up = -0.1;
$offEcho
$onEcho > dcase4.gms
$macro func(x) -power(x,3)
x.lo = -1.0; x.up = 0;
if(not Global,x.l = -1;);
$offEcho
$onEcho > dcase5.gms
$macro func(x) -exp(x)
x.lo = -1; x.up = 2;
$offEcho
$onEcho > dcase6.gms
$macro func(x) -exp(x)+exp(-x)
x.lo = -1; x.up = 2;
$offEcho
$onEcho > dcase7.gms
$macro func(x) 1-errorf(x)
x.lo = 0.1; x.up = 2;
$offEcho
$onEcho > dcase8.gms
$macro func(x) sqr(x)
x.lo = -2.0; x.up = -0.1;
$offEcho
$onEcho > dcase9.gms
$macro func(x) sqr(x)-power(x,3)
x.lo = -1.0; x.up = -0.1;
$offEcho
$onEcho > dcase10.gms
$macro func(x) -power(x,3)-x
x.lo = -1.0; x.up = 1.0;
$offEcho
$onEcho > dcase11.gms
$macro func(x) -power(x,3)
x.lo = -1.0; x.up = 1.2;
$offEcho
$onEcho > dcase12.gms
$macro func(x) -power(x,3)
x.lo = 0.0; x.up = 1.2;
$offEcho
$call gams decr --case=dcase1 --global=1 lo=2 o=dcase1.lst
$if errorlevel 1 $abort 'dcase1 --global=1 failed, see dcase1.lst'
$call gams decr --case=dcase2 --global=1 lo=2 o=dcase2.lst
$if errorlevel 1 $abort 'dcase2 --global=1 failed, see dcase2.lst'
$call gams decr --case=dcase3 --global=1 lo=2 o=dcase3.lst
$if errorlevel 1 $abort 'dcase3 --global=1 failed, see dcase3.lst'
$call gams decr --case=dcase4 --global=1 lo=2 o=dcase4.lst
$if errorlevel 1 $abort 'dcase4 --global=1 failed, see dcase4.lst'
$call gams decr --case=dcase5 --global=1 lo=2 o=dcase5.lst
$if errorlevel 1 $abort 'dcase5 --global=1 failed, see dcase5.lst'
$call gams decr --case=dcase6 --global=1 lo=2 o=dcase6.lst
$if errorlevel 1 $abort 'dcase6 --global=1 failed, see dcase6.lst'
$call gams decr --case=dcase7 --global=1 lo=2 o=dcase7.lst
$if errorlevel 1 $abort 'dcase7 --global=1 failed, see dcase7.lst'
$call gams decr --case=dcase8 --global=1 lo=2 o=dcase8.lst
$if errorlevel 1 $abort 'dcase8 --global=1 failed, see dcase8.lst'
$call gams decr --case=dcase9 --global=1 lo=2 o=dcase9.lst
$if errorlevel 1 $abort 'dcase9 --global=1 failed, see dcase9.lst'
$call gams decr --case=dcase10 --global=1 lo=2 o=dcase10.lst
$if errorlevel 1 $abort 'dcase10 --global=1 failed, see dcase10.lst'
$call gams decr --case=dcase11 --global=1 lo=2 o=dcase11.lst
$if errorlevel 1 $abort 'dcase11 --global=1 failed, see dcase11.lst'
$call gams decr --case=dcase12 --global=1 lo=2 o=dcase12.lst
$if errorlevel 1 $abort 'dcase12 --global=1 failed, see dcase12.lst'
$call gams decr --case=dcase1 --global=0 lo=2 o=dcase1.lst
$if errorlevel 1 $abort 'dcase1 --global=0 failed, see dcase1.lst'
$call gams decr --case=dcase2 --global=0 lo=2 o=dcase2.lst
$if errorlevel 1 $abort 'dcase2 --global=0 failed, see dcase2.lst'
$call gams decr --case=dcase3 --global=0 lo=2 o=dcase3.lst
$if errorlevel 1 $abort 'dcase3 --global=0 failed, see dcase3.lst'
$call gams decr --case=dcase4 --global=0 lo=2 o=dcase4.lst
$if errorlevel 1 $abort 'dcase4 --global=0 failed, see dcase4.lst'
$call gams decr --case=dcase5 --global=0 lo=2 o=dcase5.lst
$if errorlevel 1 $abort 'dcase5 --global=0 failed, see dcase5.lst'
$call gams decr --case=dcase6 --global=0 lo=2 o=dcase6.lst
$if errorlevel 1 $abort 'dcase6 --global=0 failed, see dcase6.lst'
$call gams decr --case=dcase7 --global=0 lo=2 o=dcase7.lst
$if errorlevel 1 $abort 'dcase7 --global=0 failed, see dcase7.lst'
$call gams decr --case=dcase8 --global=0 lo=2 o=dcase8.lst
$if errorlevel 1 $abort 'dcase8 --global=0 failed, see dcase8.lst'
$call gams decr --case=dcase9 --global=0 lo=2 o=dcase9.lst
$if errorlevel 1 $abort 'dcase9 --global=0 failed, see dcase9.lst'
$call gams decr --case=dcase10 --global=0 lo=2 o=dcase10.lst
$if errorlevel 1 $abort 'dcase10 --global=0 failed, see dcase10.lst'
$call gams decr --case=dcase11 --global=0 lo=2 o=dcase11.lst
$if errorlevel 1 $abort 'dcase11 --global=0 failed, see dcase11.lst'
$call gams decr --case=dcase12 --global=0 lo=2 o=dcase12.lst
$if errorlevel 1 $abort 'dcase12 --global=0 failed, see dcase12.lst'