$Title A Vinerian Model of World Trade -- Original Nonlinear System Model * 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 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); variables M(i,r) Imports X(i,r) Exports P(i) World market price E(r) Exchange rate in region r; equations mdemand, xsupply, market, caccount; mdemand(i,r).. M(i,r) =e= md0(i,r) * (P(i)*(1+t(i,r))/(E(r)*pm0(i,r)))**epsilon(i,r); xsupply(i,r).. X(i,r) =e= xs0(i,r) * (P(i)/E(r))**eta(i,r); market(i).. sum(r, M(i,r) - X(i,r)) =e= 0; caccount(r).. sum(i, P(i) * (X(i,r) - M(i,r))) + b(r) =e= 0; model wtsm /mdemand.M, xsupply.X, market.P, caccount.E/; M.l(i,r) = md0(i,r); X.l(i,r) = xs0(i,r); P.l(i) = 1; E.l(r) = 1; wtsm.iterlim = 0; solve wtsm using mcp; wtsm.iterlim = 10000; parameter surplus Changes in various components of social surplus; alias (rfta,r); loop(rfta, t(i,r) = pm0(i,r) - 1; t(i,rfta) = 0; solve wtsm using mcp; surplus(rfta,r,"Tariff") = sum(i, P.L(i)*t(i,r)*M.L(i,r)/E.L(r) - (pm0(i,r)-1)*md0(i,r)); surplus(rfta,r,"consumer") = sum(i, (pm0(i,r)-P.L(i)*(1+t(i,r))/E.L(r))*(md0(i,r)+M.L(i,r))/2); surplus(rfta,r,"producer") = sum(i, (P.L(i)/E.L(r)-1) * (xs0(i,r)+X.L(i,r))/2); ); set s /Tariff, Consumer, Producer/; parameter summary Summary of the welfare impact of unilateral free trade; summary(r,"Region","Tariff") = round(surplus(r,r,"Tariff"),1); summary(r,"Region","Consumer") = round(surplus(r,r,"consumer"),1); summary(r,"Region","Producer") = round(surplus(r,r,"producer"),1); summary(r,"Region","Total") = sum(s, summary(r,"Region",s)); alias (r,rr); summary(r,"World","Consumer") = round(sum(rr,surplus(r,rr,"consumer")),1); summary(r,"World","Producer") = round(sum(rr,surplus(r,rr,"producer")),1); summary(r,"World","Tariff") = round(sum(rr,surplus(r,rr,"Tariff")),1); summary(r,"World","Total") = sum(s, summary(r,"World",s)); option summary:1:1:2; display summary; execute_unload 'worldmodel.gdx', summary; $if not exist results.xls $exit execute 'gdxxrw i=worldmodel.gdx o=results.xls par=summary rng=Unilateral!a4 merge cdim=2';