$Title A Vinerian Model of World Trade -- MCP Version for Free Trade * Read the XL workbook if the GDX data file is not found: $onecho >gdxxrw.txt set=i rng=sets!i2 rdim=1 cdim=0 set=r rng=sets!b2 rdim=1 cdim=0 par=eta rng=eta!b2 par=epsilon rng=epsilon!b2 par=t rng=t!b2 par=xs0 rng=xs0!b2 par=md0 rng=md0!b2 $offecho $if not exist tradedata.gdx $call gdxxrw i=tradedata.xls o=tradedata.gdx @gdxxrw.txt $gdxin 'tradedata.gdx' set i(*) Commodities, r(*) Regions; $load i r parameter md0(i,r) Base year import demand, xs0(i,r) Base year exports, t(i,r) Tariff rate, epsilon(i,r) Import demand elasticity, eta(i,r) Export supply elasticity; $load md0 xs0 t epsilon eta set k(r) States creating the FTA /ALB, BIH, BGR, HRV, MKD, MDA, ROM, YUG, TUR, UKR, EUO /, fta(r) States in FTA in the model, nfta(r) States outside the FTA; parameter b(r) Current account deficit pm0(i,r) Reference price of imports, xsd(i) Excess demand; b(r) = sum(i, md0(i,r)-xs0(i,r)); xsd(i) = sum(r, md0(i,r) - xs0(i,r)); display xsd; pm0(i,r) = 1 + t(i,r); fta(r) = no; nfta(r) = (not fta(r)); positive variables M(i,r) Imports X(i,r) Exports MFTA(i,r) Imports XFTA(i,r) Exports X(i,r) Exports P(i) World market price PFTA(i) Market price within the FTA zone PM(i,r) Import price PX(i,r) Export price E(r) Exchange rate in region j; equations mdemand, meq, mftaeq, xsupply, xeq, xftaeq, ftamarket, market, caccount; mdemand(i,r).. M(i,r) + MFTA(i,r)$fta(r) =e= md0(i,r) * (PM(i,r) /(E(r)*pm0(i,r)))**epsilon(i,r); meq(i,r).. P(i) * (1+t(i,r)) =G= PM(i,r); mftaeq(i,r)$fta(r).. PFTA(i) =G= PM(i,r); xsupply(i,r).. X(i,r) + XFTA(i,r)$fta(r) =e= xs0(i,r) * (PX(i,r) /E(r))**eta(i,r); xeq(i,r).. PX(i,r) =G= P(i); xftaeq(i,r)$fta(r).. PX(i,r) =G= PFTA(i); ftamarket(i)$card(fta).. sum(fta(r), MFTA(i,r) - XFTA(i,r)) =E= 0; market(i).. sum(r, M(i,r) - X(i,r)) =E= 0; caccount(r).. sum(i, P(i) * (X(i,r) - M(i,r)) + (PFTA(i) * (XFTA(i,r) - MFTA(i,r)))$fta(r)) + b(r) =e= 0; model global /mdemand.PM, meq.M, mftaeq.MFTA, xsupply.PX, xeq.X, xftaeq.XFTA, ftamarket.PFTA, market.P, caccount.E/; M.l(i,r) = md0(i,r); X.l(i,r) = xs0(i,r); P.l(i) = 1; PM.L(i,r) = pm0(i,r); PX.L(i,r) = 1; E.l(r) = 1; PFTA.l(i) = 1; global.iterlim = 0; solve global using mcp; E.LO(r) = 0.001; P.LO(i) = 0.001; PFTA.LO(i) = 0.001; PM.LO(i,r) = 0.001; PX.LO(i,r) = 0.001; fta(k) = yes; nfta(r) = (not fta(r)); global.iterlim = 10000; solve global using mcp; parameter ssummary Sectoral Results Summary (% change), rsummary Regional Results Summary (% change); ssummary(i,"P") = 100 * (P.l(i)-1); ssummary(i,"PFTA") = 100 * (PFTA.l(i)-1); ssummary(i,"Trade") = 100 *(sum(r, M.l(i,r)+MFTA.L(i,r))/sum(r, md0(i,r))-1); rsummary(r,"E") = 100 * (E.L(r)-1); rsummary(r,"M") = 100 * (sum(i, M.L(i,r)+MFTA.L(i,r))/sum(i,md0(i,r))-1); rsummary(r,"X") = 100 * (sum(i, X.L(i,r)+XFTA.L(i,r))/sum(i,xs0(i,r))-1); display ssummary,rsummary; parameter surplus Social surplus impacts of FTA; surplus(r,"Tariff") = round(sum(i, P.L(i)*t(i,r)*M.L(i,r)/E.L(r) - (pm0(i,r)-1)*md0(i,r)),1); surplus(r,"Consumer") = sum(i, (pm0(i,r)-PM.L(i,r)/E.L(r)) * (md0(i,r)+M.L(i,r))/2); surplus(r,"Producer") = sum(i, (PX.L(i,r)/E.L(r)-1) * (xs0(i,r)+X.L(i,r))/2); set s /Tariff,Consumer,Producer/; surplus(r,"Total") = sum(s, surplus(r,s)); surplus("FTA",s) = sum(fta, surplus(fta,s)); surplus("nFTA",s) = sum(nfta, surplus(nfta,s)); surplus("FTA","Total") = sum(s,surplus("FTA",s)); surplus("nFTA","Total") = sum(s, surplus("NFTA",s)); option surplus:1; display surplus; $if not exist results.xls $exit execute_unload 'ftamodel.gdx', ssummary, rsummary, surplus; $if not exist results.xls $exit execute 'gdxxrw i=ftamodel.gdx o=results.xls par=ssummary rng=FTA!B5 merge par=rsummary rng=FTA!B36 merge par=surplus rng=FTA!B71 merge';