nsmge.gms : North-South trade and capital flows

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;