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