$TITLE M8-6b.GMS: 2x2x2 of M8-6a in set notation *$ONTEXT TABLE BENCH(*,*) XHH YHH XHF YHF XFF YFF XFH YFH UH UF CONSH CONSF PXH 150 -50 -100 PYH 50 50 -100 PXF 50 50 -100 PYF 150 -50 -100 PUH 200 -200 PUF 200 -200 PLH -120 -10 130 PKH -30 -40 70 PLF -40 -30 70 PKF -10 -120 130; *$OFFTEXT DISPLAY BENCH; SETS I /1, 2/ J /1, 2/ C /H, F/; ALIAS (J,JJ), (I,II); PARAMETERS VS(J,C) endowment of factor j in country c TC(I) trade cost of importing good i for country c BETA(I,J) share of factor j in the production of good i GAMMA(I) share of good i in the utility function WELW(C) welfare weight of country c in world welfare RESULTS(*,*) assemble the results; VS("1", "H") = BENCH("PLH", "CONSH"); VS("2", "H") = BENCH("PKH", "CONSH"); VS("1", "F") = BENCH("PLF", "CONSF"); VS("2", "F") = BENCH("PKF", "CONSF"); BETA("1","1") = -BENCH("PLH", "XHH")/ BENCH("PXH", "XHH"); BETA("1","2") = -BENCH("PKH", "XHH")/ BENCH("PXH", "XHH"); BETA("2","1") = -BENCH("PLH", "YHH")/ BENCH("PYH", "YHH"); BETA("2","2") = -BENCH("PKH", "YHH")/ BENCH("PYH", "YHH"); GAMMA("1") = -BENCH("PXH", "UH")/ BENCH("PUH", "UH"); GAMMA("2") = -BENCH("PYH", "UH")/ BENCH("PUH", "UH"); WELW("H") = BENCH("PUH", "UH")/(BENCH("PUH", "UH")+BENCH("PUF", "UF")); WELW("F") = BENCH("PUF", "UF")/(BENCH("PUH", "UH")+BENCH("PUF", "UF")); DISPLAY VS, BETA, GAMMA, WELW; TC(I) = 1.0001; VARIABLES JWELMAX joint welfare maximization WELMAXH welfare of country H WELMAXF welfare of country F TR(I,C) tariff of country c; POSITIVE VARIABLES X(I,C) Activity level for prduction of I by C M(I,C) Activity level for imports of I by C E(I,C) Activity level for exports of I by C U(C) Activity level for sector U in country C PX(I,C) Price of commodity I in country C PW(I) World price of commodity I PV(J,C) Price of factor J in country C PU(C) Price of welfare (expenditure function) in country C CONS(C) Aggregate income; EQUATIONS OBJJ OBJH, OBJF PRX(I,C) Zero profit for sector I in country J PRM(I,C) Zero profit for imports of I by country j PRE(I,C) Zero profit for exports of I by country j PRU(C) Zero profit for sector U MKX(I,C) Supply-demand balance for commodity I MKW(I) Supply-demand balance for imports and exports of I MKV(J,C) Supply-demand balance for primary factor V1 MKU(C) Supply-demand balance for welfare (aggregate demand) ICONS(C) Income definition for CONS; OBJJ.. JWELMAX =E= PROD(C, U(C)**WELW(C)); OBJH.. WELMAXH =E= U("H"); OBJF.. WELMAXF =E= U("F"); * Zero profit inequalities PRX(I,C).. PROD(J, PV(J,C)**BETA(I,J)) =G= PX(I,C); PRM(I,C).. PW(I)*TC(I)*TR(I,C) =G= PX(I,C); PRE(I,C).. PX(I,C) =G= PW(I); PRU(C).. PROD(I, PX(I,C)**GAMMA(I)) =G= PU(C); * Market clearance inequalities MKX(I,C).. X(I,C)- E(I,C) + M(I,C)/TC(I) =G= PROD(II, PX(II,C)**GAMMA(II))*(GAMMA(I)/PX(I,C)) * U(C); MKW(I).. SUM(C, E(I,C) - M(I,C)) =G= 0; MKV(J,C).. VS(J,C) =G= SUM(I, PROD(JJ, PV(JJ,C)**BETA(I,JJ))*(BETA(I,J)/PV(J,C)) * X(I,C)); MKU(C).. U(C) =E= CONS(C) / PU(C); * Income balance equations ICONS(C).. CONS(C) =E= SUM(J, VS(J,C)*PV(J,C)) + SUM(I, PW(I)*(TR(I,C) - 1)*M(I,C)); MODEL MCP /PRX.X, PRM.M, PRE.E, PRU.U, MKX.PX, MKW.PW, MKV.PV, MKU.PU, ICONS.CONS/; MODEL MPEC /OBJJ, OBJH, OBJF, PRX.X, PRM.M, PRE.E, PRU.U, MKX.PX, MKW.PW, MKV.PV, MKU.PU, ICONS.CONS/; PU.L(C) = 1; PU.FX("H") = 1; * Set initial values of variables: X.L(I,C) =100; M.L(I,C) =100; E.L(I,C) =100; U.L(C) =200; PX.L(I,C) =1; PW.L(I) =1; PV.L(J,C) =1; PV.L(J,C) =1; CONS.L(C) =200; WELMAXH.L =U.L("H"); WELMAXF.L =U.L("F"); JWELMAX.L = 1; * fix tariffs at zero (meaning TR = 1) to solve for free trade TR.FX(I,C) = 1; OPTION MPEC = nlpec; SOLVE MPEC USING MPEC MAXMIZING JWELMAX; RESULTS("WELJ", "FREETR") = JWELMAX.L/200; RESULTS("WELH", "FREETR") = U.L("H")/200; RESULTS("WELF", "FREETR") = U.L("F")/200; RESULTS("TARIFFH", "FREETR") = TR.L("2","H")-1; RESULTS("TARIFFF", "FREETR") = TR.L("1","F")-1; DISPLAY RESULTS; * show that this can be done with the mcp version when TR variables are fixed SOLVE MCP USING MCP; TR.FX(I,"H") = 1.2; SOLVE MCP USING MCP; *solve for the optimal tariff for country h when TRF is still fixed at zero. TR.UP("2", "H") = +INF; TR.LO("2", "H") = -INF; SOLVE MPEC USING MPEC MAXIMIZING WELMAXH; RESULTS("WELJ", "UNIH") = JWELMAX.L/200; RESULTS("WELH", "UNIH") = U.L("H")/200; RESULTS("WELF", "UNIH") = U.L("F")/200; RESULTS("TARIFFH", "UNIH") = TR.L("2","H")-1; RESULTS("TARIFFF", "UNIH") = TR.L("1","F")-1; DISPLAY RESULTS; *$EXIT SETS K iterative procedure to determine Nash tariffs /K1*K10/; TR.FX(I,C) = 1; LOOP(K, TR.UP("2", "H") = +INF; TR.LO("2", "H") = -INF; TR.FX("1", "F") = TR.L("1", "F"); SOLVE MPEC USING MPEC MAXIMIZING WELMAXH; TR.UP("1", "F") = +INF; TR.LO("1", "F") = -INF; TR.FX("2", "H") = TR.L("2", "H"); SOLVE MPEC USING MPEC MAXIMIZING WELMAXF; ); RESULTS("WELJ", "NASH") = JWELMAX.L/200; RESULTS("WELH", "NASH") = U.L("H")/200; RESULTS("WELF", "NASH") = U.L("F")/200; RESULTS("TARIFFH", "NASH") = TR.L("2","H")-1; RESULTS("TARIFFF", "NASH") = TR.L("1","F")-1; DISPLAY RESULTS; $LIBINCLUDE XLDUMP RESULTS M8.XLS SHEET2!A3