selkie16.gms : SELKIE test suite: obj variable setting

Description

Test if the value of the objective variable is set correctly after solve.

Contributor: Youngdae Kim (11.07.2017)


Small Model of Type : GAMS


Category : GAMS Test library


Main file : selkie16.gms

$title 'SELKIE test suite: obj variable setting'  (SELKIE16,SEQ=772)

$ontext

Test if the value of the objective variable is set correctly after solve.

Contributor: Youngdae Kim (11.07.2017)

$offtext

$if not set TESTTOL $set TESTTOL 1e-4
scalar tol / %TESTTOL% /;
file opt   / 'selkie.opt' /;
file info  / '%emp.info%' /;

set i / 1*2 /;
variable obj(i), x(i);
equation defobj(i);

defobj(i)..
    obj(i) =E= sqr(x(i)-1) + 2;

model m / defobj /;

put info 'equilibrium';
loop(i,
    put / 'min', obj(i), x(i), defobj(i);
);
putclose;

putclose opt 'use_mcpopt yes';
m.optfile = 1;

option emp = selkie;
solve m using emp;

abort$[ smax{i, abs(x.l(i)   - 1)} > tol ] 'bad x.l', x.l;
abort$[ smax{i, abs(obj.l(i) - 2)} > tol ] 'bad obj.l', obj.l;

$onecho > agent1_gms

Variables  x3;

Equations  dL_dx3;

dL_dx3.. (-2*(-1 + x3))/(-1) =E= 0;



Model m / dL_dx3.x3 /;

Solve m using mcp;

$offecho

execute 'cat agent1_gms > agent1.gms.want';
execute 'cat "%gams.scrdir%agent1.gms" > agent1.gms.got';
execute '=diff -bw agent1.gms.want agent1.gms.got';
abort$errorlevel 'Files agent1.gms.want and agent1.gms.got differ';

$onecho > agent2_gms

Variables  x4;

Equations  dL_dx4;

dL_dx4.. (-2*(-1 + x4))/(-1) =E= 0;



Model m / dL_dx4.x4 /;

Solve m using mcp;

$offecho

execute 'cat agent2_gms > agent2.gms.want';
execute 'cat "%gams.scrdir%agent2.gms" > agent2.gms.got';
execute '=diff -bw agent2.gms.want agent2.gms.got';
abort$errorlevel 'Files agent2.gms.want and agent2.gms.got differ';

obj.l(i) = 0;
x.l(i) = 0;

putclose opt 'agent_group {{1,2}}';
m.optfile = 1;

option emp = selkie;
solve m using emp;

abort$[ smax{i, abs(x.l(i)   - 1)} > tol ] 'bad x.l', x.l;
abort$[ smax{i, abs(obj.l(i) - 2)} > tol ] 'bad obj.l', obj.l;

$onecho > agent3_gms

Variables  x3,x4;

Equations  dL_dx3,dL_dx4;

dL_dx3.. (-2*(-1 + x3))/(-1) =E= 0;

dL_dx4.. (-2*(-1 + x4))/(-1) =E= 0;



Model m / dL_dx3.x3,dL_dx4.x4 /;

Solve m using mcp;

$offecho

execute 'cat agent3_gms > agent3.gms.want';
execute 'cat "%gams.scrdir%agent3.gms" > agent3.gms.got';
execute '=diff -bw agent3.gms.want agent3.gms.got';
abort$errorlevel 'Files agent3.gms.want and agent3.gms.got differ';

obj.l(i) = 0;
x.l(i) = 0;

* Finally, test the case where we have no explicit objective variable.

variable y;
equation cons;

cons..
    sqr(y-2) =l= 1;

model m2 / defobj, cons /;

put info 'equilibrium';
loop(i,
    put / 'min', obj(i), x(i), defobj(i);
);
put / 'min', y, cons;
putclose;

putclose opt 'use_mcpopt yes';
m2.optfile = 1;

option emp = selkie;
solve m2 using emp;

abort$[ smax{i, abs(x.l(i) - 1)}   > tol ] 'bad x.l', x.l;
abort$[ smax{i, abs(obj.l(i) - 2)} > tol ] 'bad obj.l', obj.l;
abort$[ abs(y.l - 1)               > tol ] 'bad y.l', y.l;

$onecho > agent3_y_gms

Variables  x5,u3;

Negative Variables  u3;

Equations  e3,dL_dx5;

e3.. sqr((-2) + x5) =L= 1;

dL_dx5.. 1 - (2*(-2 + x5))*u3 =E= 0;



Model m / e3.u3,dL_dx5.x5 /;

Solve m using mcp;

$offecho

execute 'cat agent3_y_gms > agent3.gms.want';
execute 'cat "%gams.scrdir%agent3.gms" > agent3.gms.got';
execute '=diff -bw agent3.gms.want agent3.gms.got';
abort$errorlevel 'Files agent3.gms.want and agent3.gms.got differ';