Description
Test JAMS behavior on a small QVI model. Contributors: Youngdae Kim & Steve Dirkse, Feb 2018
Small Model of Type : GAMS
Category : GAMS Test library
Main file : emp28.gms
$title 'Test JAMS/EMP on QVI model' (EMP28,SEQ=742)
$onText
Test JAMS behavior on a small QVI model.
Contributors: Youngdae Kim & Steve Dirkse, Feb 2018
$offText
$if not set TESTTOL $set TESTTOL 1e-6
scalars tol / %TESTTOL% /;
file opt / 'jams.opt' /;
file info / '%emp.info%' /;
set i / 1*2 /;
alias(i,j);
table A(i,j)
1 2
1 2 [8/3]
2 [5/4] 2 ;
parameters
b(i) / 1 [100/3], 2 22.5 /
Cy(i,j) / 1.1 1, 2.2 1 /
Cx(i,j) / 1.2 1, 2.1 1 /
rhs(i) / 1 15, 2 20 / ;
variables y(j), x(j);
equations F(i), g(i);
F(i)..
sum(j, A(i,j)*y(j)) - b(i) =N= 0;
g(i)..
sum(j, Cy(i,j)*y(j)) + sum(j, Cx(i,j)*x(j)) - rhs(i) =L= 0;
model m / F, g /;
* Test QVI.
putclose info 'qvi F y x g';
putclose opt
'Dict qviDict.txt' /
'FileName qvi.gms' ;
y.lo(j) = 0;
y.up(j) = 11;
x.lo(j) = 0;
x.up(j) = 11;
m.optfile = 1;
solve m using emp;
abort$[m.solvestat <> %solveStat.normalCompletion%]
'wrong m.solvestat', m.solvestat;
abort$[m.modelstat <> %modelStat.optimal%]
'wrong m.modelstat', m.modelstat;
abort$[ abs(y.l('1')- 10) > tol ] 'bad y.l("1")', y.l;
abort$[ abs(y.l('2')- 5) > tol ] 'bad y.l("2")', y.l;
abort$[ abs(x.l('1')- 10) > tol ] 'bad x.l("1")', x.l;
abort$[ abs(x.l('2')- 5) > tol ] 'bad x.l("2")', x.l;
abort$[ smax{i, abs(g.m(i)- 0)} > tol ] 'bad g.m("i")', g.m;
y.l(j) = 0;
x.l(j) = 0;
g.m(i) = 0;
$onEcho > qvi_gms
***********************************************
* written by GAMS/JAMS at 06/21/17 12:13:40
* for more information use JAMS option "Dict"
***********************************************
Variables x1,x2,u3,u4;
Negative Variables u3,u4;
Positive Variables x1,x2;
Equations e1,e2,e3,e4;
e1.. 2*x1 + 2.66666666666667*x2 - u3 =N= 33.3333333333333;
e2.. 1.25*x1 + 2*x2 - u4 =N= 22.5;
e3.. x1 + x2 =L= 15;
e4.. x2 + x1 =L= 20;
* set non-default bounds
x1.up = 11;
x2.up = 11;
Model m / e1.x1,e2.x2,e3.u3,e4.u4 /;
m.limrow=0; m.limcol=0;
Solve m using MCP;
$offEcho
execute 'grep -v " written by GAMS" qvi_gms > qvi.gms.want'
execute 'grep -v " written by GAMS" qvi.gms > qvi.gms.got'
execute '=diff -I reslim -bw qvi.gms.want qvi.gms.got'
abort$errorlevel 'Files qvi.gms.want and qvi.gms.got differ';
$onEcho > qvi_dict
* written by GAMS/JAMS at 06/21/17 11:08:51
********************************************************************************
Contents
1 Content of EMP Information File
2 Processed EMP Information
3 Dictionary
3.1 Constraints
3.2 Variables
********************************************************************************
1 Content of EMP Information File
---------------------------------
1:qvi F y x g
2 Processed EMP Information
---------------------------
Number of VI functions specified = 2
* e1 is VI Func and perpendicular to x1
* e2 is VI Func and perpendicular to x2
3 Dictionary
------------
3.1 Constraints
---------------
e1 F(1)
e2 F(2)
e3 g(1)
e4 g(2)
3.2 Variables
--------------
x1 y(1)
x2 y(2)
x1 x(1)
x2 x(2)
u3 {new}
u4 {new}
$offEcho
execute 'grep -v " written by GAMS" qvi_dict > qvidict.txt.want'
execute 'grep -v " written by GAMS" qviDict.txt > qvidict.txt.got'
execute '=diff -bw qvidict.txt.want qvidict.txt.got'
abort$errorlevel 'Files qvidict.txt.want and qvidict.txt.got differ';
$exit
* We changed the bound-checking code in EMP-QVI: it now expects the
* bounds to be consistent, and it won't patch them up if this is not
* the case.
* Change the bounds to larger than the ones of the parameter variable.
* In this case, we should adjust those bounds to be consistent with
* the ones of the parameter variable, i.e., take the intersection.
y.lo(j) = -10;
y.up(j) = 20;
putclose opt
'Dict qviBndDict.txt' /
'FileName qviBnd.gms' ;
m.optfile = 1;
solve m using emp;
abort$[m.solvestat <> %solveStat.normalCompletion%]
'wrong m.solvestat', m.solvestat;
abort$[m.modelstat <> %modelStat.optimal%]
'wrong m.modelstat', m.modelstat;
abort$[ abs(y.l('1')- 10) > tol ] 'bad y.l("1")', y.l;
abort$[ abs(y.l('2')- 5) > tol ] 'bad y.l("2")', y.l;
abort$[ abs(x.l('1')- 10) > tol ] 'bad x.l("1")', x.l;
abort$[ abs(x.l('2')- 5) > tol ] 'bad x.l("2")', x.l;
abort$[ smax{i, abs(g.m(i)- 0)} > tol ] 'bad g.m("i")', g.m;
$onEcho > qviBnd_gms
***********************************************
* written by GAMS/JAMS at 06/21/17 12:13:40
* for more information use JAMS option "Dict"
***********************************************
Variables x1,x2,u3,u4;
Negative Variables u3,u4;
Equations e1,e2,e3,e4;
e1.. 2*x1 + 2.66666666666667*x2 - u3 =N= 33.3333333333333;
e2.. 1.25*x1 + 2*x2 - u4 =N= 22.5;
e3.. x1 + x2 =L= 15;
e4.. x2 + x1 =L= 20;
* set non-default bounds
x1.lo = 0; x1.up = 11;
x2.lo = 0; x2.up = 11;
Model m / e1.x1,e2.x2,e3.u3,e4.u4 /;
m.limrow=0; m.limcol=0;
option bratio = 0;
Solve m using MCP;
$offEcho
execute 'grep -v " written by GAMS" qviBnd_gms > qvi.gms.want'
execute 'grep -v " written by GAMS" qviBnd.gms > qvi.gms.got'
execute '=diff -I reslim -bw qvi.gms.want qvi.gms.got'
abort$errorlevel 'Files qvi.gms.want and qvi.gms.got differ';
$onEcho > qviBnd_dict
* written by GAMS/JAMS at 06/21/17 11:08:51
********************************************************************************
Contents
1 Content of EMP Information File
2 Processed EMP Information
3 Dictionary
3.1 Constraints
3.2 Variables
********************************************************************************
1 Content of EMP Information File
---------------------------------
1:qvi F y x g
2 Processed EMP Information
---------------------------
Number of VI functions specified = 2
* e1 is VI Func and perpendicular to x1
* e2 is VI Func and perpendicular to x2
3 Dictionary
------------
3.1 Constraints
---------------
e1 F(1)
e2 F(2)
e3 g(1)
e4 g(2)
3.2 Variables
--------------
x1 y(1)
x2 y(2)
x1 x(1)
x2 x(2)
u3 {new}
u4 {new}
$offEcho
execute 'grep -v " written by GAMS" qviBnd_dict > qvidict.txt.want'
execute 'grep -v " written by GAMS" qviBndDict.txt > qvidict.txt.got'
execute '=diff -bw qvidict.txt.want qvidict.txt.got'
abort$errorlevel 'Files qvidict.txt.want and qvidict.txt.got differ';