```\$TITLE A SEE/WTSM Model of World Trade -- MCP Version for Free Trade Area (FTA)

\$ontext

> In the attached version of the model, I have enforced the condition
> that the US dollar is the numeraire currency, and computed all
> surpluses in dollar terms.

Yes, there is a degree of indeterminancy in the model which permits us
to fix one of the regional price indices.  Note that when this price
is fixed, the equation is omitted, but you can see in the solution
listing that even though the equation is omitted, it is still
satisified in the model solution.

---- VAR E  Exchange rate in region j (\$-fc)

LOWER          LEVEL          UPPER         MARGINAL
...
USA         1.0000         1.0000         1.0000   1.921308E-11  < **
...

**  Note that the zero marginal indicates that the omitted equation is
in balance .

> Under an FTA, the original coding misses the economic gains to
> regional producers and consumers arising from duty-free intrabloc

I don't think that I had this wrong.  Here is the basic logic of the
consumer surplus calculation:

CS = (p0-p*) * (q0+q*)/2

in which p0 is the reference price level, pm0 in the code, and p* is
the equilibrium price level.  I believe that the relevant equilibrium
price is p*=PM.L(i,r)/E.L(r) which is defined in terms of local
currency.  Similarly, q0 is the reference demand quantity, md0 in the
code, and q* is the equilibrium quantity demand, i.e.

q* = M.l(i,r) + MFTA.l(i,r)\$fta(r)

Note that this quantity accounts for all three types of imports.

The producer surplus calculation is analogous:

PS = (p*-1) * (q0+q*)/2

In this calculation, we take the reference price level equal to unity,
and p* is defined as:

p*=PX.L(i,r)/E.L(r).

I've modified the reporting code accordingly.

-------------------------------------------------------------------
In going through the model a second time, I came across an important logical
problem with the FTA formulation

The homogeneous goods formulation we have written down leads to
significant levels of "reimports" in the computed equilibrium.
Note that in the model we had been using, there would be significant
economic effects of free trade areas defined over a single region --
nothing in the model formulation prevents a country from "exporting to
itself", and if the selected country has high tariffs there is a
significant economic impact.

We can see that this occurs in the present FTA calculation in which
EUO, in which there is a substantial reduction in EUO tariff revenues,
consumer and producer surplus, even though EUO trade with the other
FTA states is negligible in the benchmark:

----    481 PARAMETER surpluspct  Social surplus as % of benchmark consumption

Tariff    Consumer    Producer   Cons+Prod	  Total
ALB       -11.0         1.9         3.2         5.1        -5.9
BIH       -10.6         2.5         4.1         6.5        -4.1
BGR        -8.7         2.9         5.3         8.3        -0.4
HRV        -9.6         2.0         3.8         5.8        -3.8
MKD        -8.3         3.3         4.6         7.8        -0.5
MDA       -10.0         4.2         6.1        10.2         0.2
ROM       -10.1         4.0         6.2        10.1
YUG        -9.1         1.8         3.5         5.3        -3.7
TUR                    -0.1        -0.1        -0.2        -0.2
UKR                     0.1        -0.1
EUO        -3.1         1.1         2.1         3.3         0.2
---------------------------------------------------------------
EUN                                            -0.1        -0.1
BLR                    -0.2        -0.1        -0.3        -0.3
RUS                    -0.4         0.1        -0.3        -0.3
CHE                     0.1                     0.1         0.1
USA                     0.1                     0.1         0.1
JPN                     0.3                     0.3         0.3
CHN                    -0.2        -0.1        -0.3        -0.3
DCO                    -0.1        -0.1        -0.2        -0.2
EMP                    -0.1        -0.1        -0.2        -0.2
WAO                    -0.2        -0.1        -0.3        -0.3
AFO                                -0.1        -0.1        -0.1
ASC                    -0.3        -0.1        -0.4        -0.4
AMO                                -0.1        -0.1        -0.1
ROW                     0.1                     0.1         0.1
FTA        -3.2         1.2         2.2         3.4         0.1

A simple constraint can be applied to prevent "own-region
cross-hauling" through the FTA.  I do this with the following
constraint applying to imports from FTA markets:

mshr_fta(i,r)\$fta(r)..
sum(fta(rr)\$(not sameas(rr,r)), XFTA(i,rr)) =G= MFTA(i,r);

This requires that no region import from the FTA an amount greater
than exports of all other FTA member states.  The shadow value on this
constraint is the non-negative price LAMDA(i,r).  This price then
enters into the equilibrium (arbitrage) condition for imports from the
FTA:

mftaeq(i,r)\$fta(r)..

PFTA(i) + LAMDA(i,r) =G= PM(i,r);

Likewise, the price of exports from an fta member states includes
premia for any of the partners into which it is able to sell:

xftaeq(i,r)\$fta(r)..

PX(i,r) =G= PFTA(i) + sum(fta(rr)\$(not sameas(r,rr)), LAMDA(i,rr));

After having applied this (loose) constraint on trade flows, we find
(as expected) that the FTA has a negligible influence on the EUO
economy, nor does the trade agreement affect any other regions in the
model:

Tariff    Consumer    Producer   Cons+Prod       Total
ALB       -11.0         3.8         3.7         7.5        -3.5
BIH       -10.6         4.3         4.7         9.0        -1.6
BGR        -8.7         5.3         6.2        11.5         2.8
HRV        -9.6         3.7         4.7         8.3        -1.3
MKD        -8.3         5.5         5.4        11.0         2.6
MDA       -10.0         8.1         7.5        15.5         5.6
ROM       -10.1         6.3         7.0        13.2         3.1
YUG        -9.1         3.7         4.3         8.0        -1.1
EUO        -0.1                                            -0.1
FTA        -0.3         0.1         0.2         0.3

This change in the model formulation assures that the Ricardian logic
carries through: benefits captured as a result of a regional trade
agreement are captured by the smaller country.

We can also explore the impact of changing the set of countries
included in the FTA.  For example, if Ukraine is added, the economic
impact becomes:

Tariff    Consumer    Producer   Cons+Prod       Total
ALB       -11.0         3.8         3.7         7.5        -3.5
BIH       -10.6         4.3         4.7         8.9        -1.7
BGR        -8.7         5.3         6.2        11.5         2.8
HRV        -9.6         3.7         4.7         8.3        -1.3
MKD        -8.3         5.5         5.4        11.0         2.6
MDA       -10.0         8.1         7.5        15.5         5.6
ROM       -10.1         6.3         7.0        13.2         3.1
YUG        -9.1         3.7         4.3         8.0        -1.1
UKR        -8.4         7.0         6.8        13.8         5.3
EUO        -0.1                                            -0.1
FTA        -0.4         0.1         0.2         0.4

There are substantial benefits for Ukraine, and there is virtually no
impact on the other member states.

\$offtext

sets      i Commodities  /
an      Live animals & animal products
ve      Vegetable products
fa      Fats & oils
fs      Manufactured foodstuffs
mn      Mineral products
ch      Chemical
rp      Rubber & plastics
hl      Hides & leather products
cw      Cork & wood articles
pp      Pulp & paper products
ta      Textiles & apparel
fw      Footwear & other made-up articles
sp      Stone & mineral products
ps      Precious stones & jewellery
mt      Base metals & metal products
ma      Machinery
te      Transport equipment
pe      Professional equipment
aa      Arms & ammunition
mm      Miscellaneous manufactures
wa      Works of art
ot      Goods nes /,

r     Country and regions /

ALB     Albania,
BIH     Bosnia-Herzegovina,
BGR     Bulgaria,
HRV     Croatia,
MKD     TFYR Macedonia,
MDA     Republic of Moldova,
ROM     Romania,
YUG     Serbia-Montenegro,
TUR     Turkey,
UKR     Ukraine,
EUO     EU-15,

EUN     EU-10,
BLR     Belarus,
RUS     Russian Federation,
CHE     Switzerland,
USA     United States,
JPN     Japan,
CHN     China,
DCO     Other developed,
EMP     Euro-Med partners,
WAO     Other West Asia,
AFO     Other Africa,
ASC     Central Asia,
ASO     Other Asia,
AMO     Other America,
ROW     Rest of World/

kfta(r)  States creating the FTA /ALB, BIH, BGR, HRV, MKD, MDA, ROM, YUG, EUO/,
kfta2(r) States creating the FTA /ALB, BIH, BGR, HRV, MKD, MDA, ROM, YUG, UKR, EUO/,

fta(r)        States in FTA in the model;

alias (r,rr);

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;

\$onecho >gdxxrw.txt
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

\$load md0 xs0 t epsilon eta

*	------ md0, xs0 scaled by 1.0E+6; tariff rates are decimal fractions

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;

positive
variables
M(i,r)          Imports (Imports from non-FTA & non-CU)
X(i,r)          Exports (Exports to non-FTA & non-CU)
MFTA(i,r)       FTA Imports
XFTA(i,r)       FTA Exports
P(i)            World market price (\$)
PFTA(i)         Market price within the FTA zone (\$)
PM(i,r)         Import price (\$)
LAMDA(i,r)	Limit on own-commodity imports in the FTA
PX(i,r)		Export price (\$)
E(r)            Exchange rate in region j (\$-fc);

equations       mdemand, meq, mftaeq, xsupply, xeq, xftaeq,
ftamarket, market, caccount, mshr_fta;

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);

xsupply(i,r)..                  xs0(i,r) * (PX(i,r)/E(r))**eta(i,r)
=E= X(i,r) + XFTA(i,r)\$fta(r);

meq(i,r)..                      P(i) * (1+t(i,r))   =G= PM(i,r);

mftaeq(i,r)\$fta(r)..            PFTA(i) + LAMDA(i,r) =G= PM(i,r);

xeq(i,r)..                      PX(i,r) =G= P(i);

xftaeq(i,r)\$fta(r)..            PX(i,r) =G= PFTA(i) + sum(fta(rr)\$(not sameas(r,rr)), LAMDA(i,rr));

mshr_fta(i,r)\$fta(r)..		sum(fta(rr)\$(not sameas(rr,r)), XFTA(i,rr)) =G= MFTA(i,r);

ftamarket(i)\$card(fta)..        sum(fta(r), XFTA(i,r) - MFTA(i,r)) =E= 0;

market(i)..                     sum(r,      X(i,r)    - M(i,r)) =E= 0;

caccount(r)..                   0 =e= sum(i, P(i) * (X(i,r)-M(i,r))
+ (PX(i,r)*XFTA(i,r)-PM(i,r)*MFTA(i,r))\$fta(r) ) + b(r);

model global /mdemand.PM, meq.M, mftaeq.MFTA,
xsupply.PX, xeq.X, xftaeq.XFTA,
ftamarket.PFTA, market.P, caccount.E,
mshr_fta.LAMDA /;

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;
E.FX("usa") = 1;

PFTA.l(i) = 1;

global.iterlim = 0;
solve global using mcp;

E.LO(r) = 0.001;
P.LO(i) = 0.0001;
PFTA.LO(i) = 0.0001;
PM.LO(i,r) = 0.0001;
PX.LO(i,r) = 0.0001;

*	Normalize prices:

E.FX("usa") = 1;

*	Declare parameters for model output:

parameter       ssummary        Sectoral summary,
rsummary        Regional results summary (% change),
surplus		Social surplus impacts (local currency),
surpluspct	Social surplus as % of consumption;

set	s   /Tariff,Consumer,Producer,Cons+Prod,Total/;

set rs(*)/FTA,nFTA/; rs(r) = yes;

*	Create a temporary batinclude file with reporting code which
*	can subsequently be accessed through a \$batinclude "call":

*	This command permits us to "write" a file containing "%1":

\$escape =
\$onecho >"%gams.scrdir%report.scr"

ssummary("%=1",i,"P")     = P.l(i);
ssummary("%=1",i,"PFTA")  = PFTA.l(i);

rsummary("%=1",r,"E")     = E.L(r);
rsummary("%=1",r,"M")     = 100 * (sum(i, M.L(i,r)+MFTA.L(i,r)\$fta(r))/sum(i,md0(i,r))-1);
rsummary("%=1",r,"X")     = 100 * (sum(i, X.L(i,r)+XFTA.L(i,r)\$fta(r))/sum(i,xs0(i,r))-1);

surplus("%=1",r,"Tariff") = round(sum(i, P.L(i)/E.l(r)*t(i,r)*M.L(i,r)
- (pm0(i,r)-1)*md0(i,r)), 3);

surplus("%=1",r,"Consumer") = round(sum(i, (pm0(i,r)-PM.L(i,r)/E.L(r)) *
(md0(i,r)+M.l(i,r) + MFTA.l(i,r)\$fta(r))/2),3);

surplus("%=1",r,"Producer") = round(sum(i, (PX.L(i,r)/E.L(r)-1) *
(xs0(i,r)+X.l(i,r) + XFTA.l(i,r)\$fta(r))/2),3);

surplus("%=1","FTA",s)       = sum(fta, surplus("%=1",fta,s));
surplus("%=1","nFTA",s)    = sum(r\$(not fta(r)), surplus("%=1",r,s));
surplus("%=1",rs,"Cons+Prod") = surplus("%=1",rs,"Consumer") + surplus("%=1",rs,"Producer");
surplus("%=1",rs,"Total") = surplus("%=1",rs,"Tariff") + surplus("%=1",rs,"Cons+Prod");
surpluspct("%=1",r,s) = 100 * surplus("%=1",r,s)
/sum(i,md0(i,r)*pm0(i,r));
surpluspct("%=1","nFTA",s) = 100 * surplus("%=1","nFTA",s)
/sum((i,r)\$(not fta(r)), md0(i,r)*pm0(i,r));
surpluspct("%=1","FTA",s)\$sum((i,r)\$fta(r), md0(i,r)*pm0(i,r))
= 100 * surplus("%=1","FTA",s)/sum((i,r)\$fta(r), md0(i,r)*pm0(i,r));
surpluspct("%=1",rs,s) = round(surpluspct("%=1",rs,s),1);
option surplus:3,surpluspct:1;

\$offecho

*	Generate a report of benchmark values:

\$batinclude "%gams.scrdir%report.scr" BMK

*	The following PATH options improve algorithmic efficiency.
*	Michael Ferris could probably explain why this is true.  I
*	found these by simply reading the PATH documentation and trying a
*	few of the suggested specifications:

\$onecho >path.opt
crash_method none;
crash_perturb no;
\$offecho

*	Instruct PATH to read its options file:

global.optfile=1;
global.iterlim = 50000;

*	Solve scenarios and generate reports:

fta(kfta) = yes;

LAMDA.FX(i,r) = 0;
solve global using mcp;
\$batinclude "%gams.scrdir%\report.scr" FTA_xhaul

LAMDA.up(i,r) = inf;
solve global using mcp;
\$batinclude "%gams.scrdir%report.scr" FTA

fta(kfta2) = yes;
solve global using mcp;
\$batinclude "%gams.scrdir%\report.scr" UKR

option ssummary:3:1:1, rsummary:3:1:1, surplus:3:1:1;
display ssummary, rsummary, surplus, surpluspct;

```