$title Test of EMP equilibrium model with vi func (EMP15,SEQ=601) $onText This model has two agents. Each agent solves min_{t_i} obj_i s.t. t_i >= 0 In addition to this, z_i is perp to F_i(z,t) = 0 This was giving JAMS trouble since dL_dt is empty (i.e. zero). Contributors: Steve Dirkse & Michael Ferris, February 2013 $offText set i agents /i1*i2/, j variables /j1*j2/; scalars d c / 0 /; $macro F ( z(j) - sqr(t('i1')-1) )$sameas(j,'j1') + \ ( -exp(z('j1')-t('i2')) + z(j) + 1 )$sameas(j,'j2') variables obj(i), z(j); positive variables t(i); equations defF(j), defobj(i); defobj(i).. obj(i) =e= sum(j$(i.ord eq j.ord), z(j)) + c * t(i); defF(j).. F =e= 0; model empmod /all/; file empinfo / 'empinfo.txt' /; put empinfo 'equilibrium' /; loop{i, put 'min ' obj(i) t(i) defobj(i) /; }; put 'vi defF z' /; putclose; file jamsopt / 'jams.op5' /; putclose jamsopt 'EMPInfoFile empinfo.txt' / 'fileName mcpTmpScalar.gms' / 'dict dict.txt' /; empmod.optfile = 5; z.l(j) = 2; t.l(i) = 5; solve empmod using emp; c = 1; solve empmod using emp; abort$[sum{i, abs(t.l(i))} > 1e-7] 'bad t, should be 0', t.l; abort$[abs(z.l('j1')-1) > 1e-7] 'bad z(j1), should be 1', z.l; d = exp(1) - 1; abort$[abs(z.l('j2')-d) > 1e-7] 'bad z(j1), should be exp(1)-1', z.l, d; abort$[abs(obj.l('i1')-1) > 1e-7] 'bad obj(i1), should be 1', obj.l; abort$[abs(obj.l('i2')-d) > 1e-7] 'bad obj(i2), should be exp(1)-1', obj.l, d; abort$[sum{j, abs(defF.l(j)-defF.lo(j))} > 1e-7] 'bad defF, should be no slack', defF.l, defF.lo; execute 'rm mcpTmpScalar*.* dict.txt empinfo.txt jams.op5';