Description
North-South Trade and Capital Flows.
Large Model of Types : MPSGE mcp
Category : GAMS Model library
Main file : nsmge.gms
$title North-South Trade and Capital Flows (NSMGE,SEQ=150)
$onText
North-South Trade and Capital Flows.
Manne, A S, and Preckel, P V, North-South Trade, Capital Flows and
Economic Growth: An Almost Neoclassical Model. In Syrquin, S, Taylor, L,
and Westphal, L E, Eds, Economic Structure and Performance. Academic
Press, 1984.
Keywords: mixed complementarity problem, international trade, GAMS - MPSGE framework,
capital flows, economic growth
$offText
Set
T 'time periods' / T1*T11 /
R 'regions' / N, S /
NORTH(R) 'capital exporting region'
SOUTH(R) 'capital importing region'
IP(T) 'endogenous investment period (all but final)'
TFIRST(T) 'first period'
TLAST(T) 'final period';
Alias (TT,T), (R,RR);
TLAST(T) = yes$(ord(T) = card(T));
TFIRST(T) = yes$(ord(T) = 1);
IP(T) = yes$(ord(T) < card(T));
NORTH("N") = yes;
SOUTH("S") = yes;
Parameter
GNP0(R) 'benchmark gross output' / N 6.142, S 0.914 /
BMROR(R) 'benchmark rates of return' / N 0.05, S 0.10 /
DELTA(R) 'capital depreciation rates' / N 0.04, S 0.04 /
GAMMA(R) 'potential growth rates' / N 0.03, S 0.05 /
THETA(R) 'one period discount factors' / N 0.95, S 0.89 /
KRATIO(R) 'capital:GDP ratio' / N 3.0, S 3.00 /
X0(R) 'benchmark export levels' / N 0.138, S 0.095 /
M0(R) 'benchmark import levels'
DEF(T) 'permissible deficit'
LS(R,T) 'labor supply'
QREF(R,T)
PREF(R,T) 'reference price (for scaling)';
* ONE REGION'S EXPORTS IS THE OTHER REGION'S IMPORTS:
M0(R) = X0(R++1);
Parameter
PKBAR(R) 'base year gross rate of return'
K1(R) 'base year capital stock'
L1(R) 'base year labor supply'
SRVSHR(R) 'one period capital survival share';
PKBAR(R) = BMROR(R) + DELTA(R);
K1(R) = KRATIO(R)*(GNP0(R) - X0(R));
L1(R) = GNP0(R) - X0(R++1) - K1(R)*PKBAR(R);
* ONE PERIOD CAPITAL SURVIVAL SHARE:
SRVSHR(R) = 1 - 3*DELTA(R);
PREF(R,T) = THETA(R)**(ord(T) - 1);
PREF(R,TLAST) = PREF(R,TLAST)/(1 - THETA(R));
QREF(R,T) = (1 + 3*GAMMA(R))**(ord(T) - 1);
LS(R,T) = L1(R)*(1 + 3*GAMMA(R))**(ord(T) - 1);
$onText
$MODEL:NS
$COMMODITIES:
PU(R) ! Utility price index
PL(R,T) ! Wage index
PO(R,T) ! Output price index
PM(R,T) ! Import price index
PK(R,T) ! Capital price index
RK(R,T) ! Return to capital
$SECTORS:
U(R) ! Utility index
Y(R,T) ! Output index
X(R,T) ! Export index
K(R,T) ! Capital stock
I(R,T)$IP(T) ! Investment
$AUXILIARY:
TAU(T)$IP(T) ! Balance of payments premium
TAUL
$CONSUMERS:
RA(R) ! Representative agent
* MACRO PRODUCTION FUNCTIONS.
$PROD:Y(R,T) s:1
O:PO(R,T) Q:GNP0(R)
I:RK(R,T) Q:K1(R) P:PKBAR(R)
I:PL(R,T) Q:L1(R)
I:PM(R,T) Q:M0(R)
$PROD:X(R,T)
O:PM(RR,T)$(ord(RR) <> ord(R)) Q:X0(R)
I:PO(R,T) Q:X0(R) A:RA("S")
+ N:TAU(T)$IP(T) M:(-1$SOUTH(R) + 1$NORTH(R))$IP(T)
+ N:TAUL M:(+1$SOUTH(R) - 1$NORTH(R))
$PROD:K(R,T)
I:PK(R,T)
I:PO(R,T)$TLAST(T) Q:(GAMMA(R) + DELTA(R))
O:RK(R,T)
O:PK(R,T+1) Q:SRVSHR(R)
$PROD:I(R,T)$IP(T)
I:PO(R,T)
O:PK(R,T+1) Q:3
* UTILITY:
$PROD:U(R) s:1
O:PU(R) Q:(GNP0(R)*sum(T, PREF(R,T)))
I:PO(R,T) Q:GNP0(R) P:PREF(R,T)
* ENDOWMENTS:
$DEMAND:RA(R)
E:PK(R,TFIRST) Q:K1(R)
E:PL(R,T) Q:LS(R,T)
D:PU(R)
* BALANCE OF PAYMENTS CONSTRAINT:
$CONSTRAINT:TAU(T)$IP(T)
X0("S")*X("S",T)*PO("S",T) - X0("N")*X("N",T)*PO("N",T) =g= DEF(T)*PO("N",T);
* OVERALL TRADE BALANCE CONSTRAINT:
$CONSTRAINT:TAUL
sum(T, X0("N")*X("N",T)*PO("N",T)) =g= sum(T, X0("S")*X("S",T)*PO("S",T));
$offText
$sysInclude mpsgeset NS
* SPECIFY INITIAL ESTIMATES FOR PRICES AND OUTPUT LEVELS.
* BASED ON BALANCED GROWTH.
PO.l(R,T) = PREF(R,T);
PL.l(R,T) = PREF(R,T);
PK.l(R,T) = PREF(R,T);
RK.l(R,T) = PKBAR(R)*PREF(R,T);
Y.l(R,T) = QREF(R,T);
K.l(R,T) = K1(R)*QREF(R,T);
I.l(R,T) = (GAMMA(R) + DELTA(R))*K.l(R,T);
* INITIAL GUESS AT RELATIVE INCOMES:
RA.l(R) = GNP0(R)*sum(T, PREF(R,T));
* SPECIFY THE PERMISSIBLE DEFICIT:
DEF(T) = 0.043;
$onText
* OPTION "PRE-SOLVE" TO HELP OUT THE SOLUTION ALGORITHM.
* DYNAMIC MODELS CAN BE DIFFICULT TO SOLVE. ONE
* STRATEGY IS TO DO A "PRESOLVE" USING THE FIXED-INCOME
* RELAXATION. FOR THIS MODEL, WE DO THIS AS FOLLOWS:
RA.fx(R) = RA.l(R);
$include NS.GEN
solve NS using mcp;
RA.up(R) = +inf;
RA.lo(R) = 0;
$offText
$include NS.GEN
solve NS using mcp;
Parameter REPORT(T,*);
REPORT(T,"YEAR") = 3*(ord(T) - 1);
REPORT(T,"PI_N") = PO.l("N",T)/ PO.l("N","T1");
REPORT(T,"PI_S") = PM.l("N",T)/ PO.l("N","T1");
REPORT(T,"PREM") = TAU.l(T)$IP(T) - TAUL.l;
display REPORT;