Description
With $onEps (compile time) and option zeroToEps=on one can change the data loading behavior, so that 0 values get loaded as EPS. This influences non-scalar parameters and sets. Contributor: Lutz Westermann, May 2020
Small Model of Type : GAMS
Category : GAMS Test library
Main file : zerotoeps1.gms
$title Test data loading with $onEps and option zeroToEps (zerotoeps1,SEQ=821)
$onText
With $onEps (compile time) and option zeroToEps=on one can change the data loading
behavior, so that 0 values get loaded as EPS. This influences non-scalar
parameters and sets.
Contributor: Lutz Westermann, May 2020
$offText
$log --- Using Python library %sysEnv.GMSPYTHONLIB%
Set s,t;
Parameter p(s<,t<);
$gdxIn zeropar.gdx
$onText
P looks like this:
t1 t2 t3
s1 0 0.843267
s2 0.224053 0.349831 0
s3 0 5
$offText
$load p
abort$(card(p)<>4) 'By default, p should ignore the 0 values and have 4 records', p;
Set sp(s,t);
$load sp=p
abort$(card(sp)<>7) 'sp get records also for zeros and should have 7 records', sp;
Parameter pEC(s);
$onEmbeddedCode Python:
p = [('s1',1), ('s3',0)]
gams.set('pEC',p)
$offEmbeddedCode pEC
abort$(card(pEC)<>1) 'By default, pEC should ignore the 0 values and have 1 record', pEC;
$onEps
Parameter pOnEps(s,t);
$load pOnEps=p
abort$(card(pOnEps)<>7) 'With $onEps, 0 values should be read as EPS and pOnEps should have 7 records', pOnEps;
Set spOnEps(s,t);
$load spOnEps=p
abort$(card(spOnEps)<>7) 'spOnEps get records also for zeros and should have 7 records', spOnEps;
Parameter pECOnEps(s);
$onEmbeddedCode Python:
p = [('s1',1), ('s3',0)]
gams.set('pECOnEps',p)
$offEmbeddedCode pECOnEps
abort$(card(pECOnEps)<>2) 'With $onEps, 0 values should be read as EPS and pECOnEps should have 2 records', pECOnEps;
Parameter pET(s,t);
Set spET(s,t);
Execute_load 'zeropar.gdx', pET=p, spET=p;
abort$(card(pET) <>4) 'By default, pET should ignore the 0 values and have 4 records', pET;
abort$(card(spET)<>4) 'By default, spET should ignore the 0 values and have 4 records', spET;
Parameter pECET(s);
EmbeddedCode Python:
p = [('s1',1), ('s3',0)]
gams.set('pECET',p)
endEmbeddedCode pECET
abort$(card(pECET)<>1) 'By default, pECET should ignore the 0 values and have 1 record', pECET;
option zeroToEps=on;
Parameter pETOnEps(s,t);
Set spETOnEps(s,t);
Execute_load 'zeropar.gdx', pETOnEps=p, spETOnEps=p;
abort$(card(pETOnEps) <>7) 'With zeroToEps=on, pETOnEps should read the 0 values as EPS and have 7 records', pETOnEps;
abort$(card(spETOnEps)<>7) 'With zeroToEps=on, spETOnEps should read the 0 values as EPS and have 7 records', spETOnEps;
Parameter pECETOnEps(s);
EmbeddedCode Python:
p = [('s1',1), ('s3',0)]
gams.set('pECETOnEps',p)
endEmbeddedCode pECETOnEps
abort$(card(pECETOnEps)<>2) 'With zeroToEps=on, pECETOnEps should read the 0 values as EPS and have 2 records', pECETOnEps;