\$title 'SELKIE test suite: proximal perturbation' (SELKIE15,SEQ=771) \$ontext Test various proximal perturbation. We solve the following two agent problem: min_u1 0.5*u1^2 - u1*u2 - 4*u1 s.t. u1 + u2 = 1 min_u2 0.5*u2^2 - u1*u2 - 3*u1 Contributor: Youngdae Kim (09.28.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 /; alias(i,j); variable obj(i), u(i); equation defobj(i), cons; parameter p(i) / 1 4, 2 3 /; defobj(i).. obj(i) =E= 0.5*sqr(u(i)) - prod(j, u(j)) - p(i)*u('1'); cons.. sum(i, u(i)) =E= 1; model m / defobj, cons /; put info 'equilibrium'; loop(i, put / 'min', obj(i), u(i), defobj(i); if (ord(i) eq 1, put cons; ); ); putclose; * Solve with fixed primal proximal perturbation. putclose opt 'proximal_use {{1,2}:fixedprimal(0.1)}'; m.optfile = 1; option emp = selkie; solve m using emp; abort\$[ smax{i, abs(u.l(i) - 0.5)} > tol ] 'bad u.l', u.l; \$onecho > agent1_p_gms Variables x1,x3,x4,x5,x3_l; Equations e1,e3; e1.. -(0.5*sqr(x3) - x3*x4 - 4*x3) + x1 - x5*(sqr(x3 - x3_l)) =E= 0; e3.. x3 + x4 =E= 1; * set non-default levels and fix prox terms x3_l.fx = 0; x5.fx = 0.1; * fix levels belonging to other agents x4.fx = 0; Model m / e1,e3 /; Solve m using nlp minimizing x1; \$offecho execute 'cat agent1_p_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_p_gms Variables x2,x3,x4,x5,x4_l; Equations e2; e2.. -(0.5*sqr(x4) - x3*x4 - 3*x3) + x2 - x5*(sqr(x4 - x4_l)) =E= 0; * set non-default levels and fix prox terms x4_l.fx = 0; x5.fx = 0.1; * fix levels belonging to other agents x3.fx = 0; Model m / e2 /; Solve m using nlp minimizing x2; \$offecho execute 'cat agent2_p_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; defobj.m(i) = 0; u.l(i) = 0; u.m(i) = 0; cons.m = 0; * Solve with fixed dual proximal perturbation. putclose opt 'proximal_use {{1,2}:fixeddual(0.1)}'; m.optfile = 1; option emp = selkie; solve m using emp; abort\$[ smax{i, abs(u.l(i) - 0.5)} > tol ] 'bad u.l', u.l; \$onecho > agent1_d_gms Variables x3,x4,u3,u4,u3_l; Equations e3,dL_dx3; e3.. x3 + x4 + u4*(u3 - u3_l) =E= 1; dL_dx3.. (-(-4 + x3 - x4))/(-1) - u3 =E= 0; * set non-default levels and fix prox terms u3_l.fx = 0; u4.fx = 0.1; * fix levels belonging to other agents x4.fx = 0; Model m / e3.u3,dL_dx3.x3 /; Solve m using mcp; \$offecho execute 'cat agent1_d_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_d_gms Variables x2,x3,x4; Equations e2; e2.. -(0.5*sqr(x4) - x3*x4 - 3*x3) + x2 =E= 0; * fix levels belonging to other agents x3.fx = 0; Model m / e2 /; Solve m using nlp minimizing x2; \$offecho execute 'cat agent2_d_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; defobj.m(i) = 0; u.l(i) = 0; u.m(i) = 0; cons.m = 0; * Solve with fixed primal-dual proximal perturbation. putclose opt 'proximal_use {{1,2}:fixedprimaldual(0.1,0.1)}'; m.optfile = 1; option emp = selkie; solve m using emp; abort\$[ smax{i, abs(u.l(i) - 0.5)} > tol ] 'bad u.l', u.l; \$onecho > agent1_pd_gms Variables x3,x4,u3,x5,x3_l,u4,u3_l; Equations e3,dL_dx3; e3.. x3 + x4 + u4*(u3 - u3_l) =E= 1; dL_dx3.. (-(-4 + x3 - x4))/(-1) - u3 + x5*(x3 - x3_l) =E= 0; * set non-default levels and fix prox terms x3_l.fx = 0; u3_l.fx = 0; x5.fx = 0.1; u4.fx = 0.1; * fix levels belonging to other agents x4.fx = 0; Model m / e3.u3,dL_dx3.x3 /; Solve m using mcp; \$offecho execute 'cat agent1_pd_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_pd_gms Variables x2,x3,x4,x5,x4_l; Equations e2; e2.. -(0.5*sqr(x4) - x3*x4 - 3*x3) + x2 - x5*(sqr(x4 - x4_l)) =E= 0; * set non-default levels and fix prox terms x4_l.fx = 0; x5.fx = 0.1; * fix levels belonging to other agents x3.fx = 0; Model m / e2 /; Solve m using nlp minimizing x2; \$offecho execute 'cat agent2_pd_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';