$TITLE Shubik-Quint General Equilibrium Model with Money (2 x 3) SET T Time periods /T1*T3/, I Agents /I1*I2/, TF(T) Final period; * Symbols T and TT will refer to the same set: ALIAS(T,TT); * Indentify prior periods: * TF is a subset of T which includes only one period, the last: TF(T) = YES$(ORD(T) EQ CARD(T)); * Identify scenarios according to characteristics of demand * (Low, Medium or High) over the three periods: SET SC Alternative values for delta /LMH,LHM,MLH,MHL,HLM,HML/; SET MDL Alternative models / MODEL1 Return the money -- no borrowing, MODEL2 Keep the money -- no borrowing MODEL3 Return the money -- outside borrowing MODEL4 Keep the money -- outside borrowing /; SET CASE(MDL) Identifier of current model; TABLE DELTAVAL(SC,T) Demand intensity parameters T1 T2 T3 LMH 0.2 0.4 0.8 LHM 0.2 0.8 0.4 MLH 0.4 0.2 0.8 MHL 0.4 0.8 0.2 HLM 0.8 0.2 0.4 HML 0.8 0.4 0.2; *---------------------------------------------------------------------- PARAMETER M0(I) Initial and final money /I1 100, I2 100/; TABLE C(I,T) Commodity endowments T1 T2 T3 I1 100 100 100 I2 100 100 100; SCALARS BETA Discount parameter /0.95/; *---------------------------------------------------------------------- PARAMETER DELTA(I,T) Utility weighting factor THETA(I,T) Cobb-Douglas budget shares, MT(I) Terminal money requirement; SCALAR RHO Interest rate; RHO = 1 / BETA - 1; POSITIVE VARIABLES W(I,T) Market sales, X(I,T) Consumption, S(I,T) Stock, P_MCON(I,T) Liquidity constraint, P_SDEF(I,T) Stock evolution, PC(T) Market price, P_TERM(I) Terminal money, U(I,T) Lending (deposit), V(I,T) Borrowing (withdrawl); EQUATIONS WOPT(I,T) Optimal sales, XOPT(I,T) Optimal consumption, SOPT(I,T) Optimal stock, MTERM(I) Terminal money, MCON(I,T) Liquidity constraint, SDEF(I,T) Stock evolution, MKT(T) Spot market clearance, UOPT(I,T) Optimal lending, VOPT(I,T) Optimal borrowing; *--------------------------------------------------------------------------- * Supply is at least as great as demand: MKT(T).. SUM(I, W(I,T)) =G= SUM(I, X(I,T)); * Money at the start plus net borrowing plus MCON(I,T).. M0(I) + V(I,T) - U(I,T) + SUM(TT$(ORD(TT) LT ORD(T)), PC(TT)*(W(I,TT)-X(I,TT)) + RHO*(U(I,TT)-V(I,TT))) =G= PC(T)*X(I,T); * Stock evoluation: SDEF(I,T).. S(I,T) + C(I,T) - W(I,T) =G= S(I,T+1); * Optimality condition for X: XOPT(I,T).. X(I,T) * PC(T) * (SUM(TT$(ORD(TT) GE ORD(T)),P_MCON(I,TT))+P_TERM(I)) =G= THETA(I,T); * Terminal constraint on money: MTERM(I).. M0(I) + SUM(T, PC(T)*(W(I,T)-X(I,T)) + RHO*(U(I,T)-V(I,T)) ) =G= MT(I)*M0(I); * Optimality conditions for borrowing or lending at a fixed * interest rate apply only in models with outside bank: UOPT(I,T)$(CASE("MODEL3")+CASE("MODEL4")).. P_MCON(I,T) =G= SUM(TT$(ORD(TT) GT ORD(T)),RHO*P_MCON(I,TT)) + RHO * P_TERM(I); VOPT(I,T)$(CASE("MODEL3")+CASE("MODEL4")).. RHO * P_TERM(I) + SUM(TT$(ORD(TT) GT ORD(T)),RHO*P_MCON(I,TT)) =G= P_MCON(I,T); WOPT(I,T).. P_SDEF(I,T) =G= PC(T) * (SUM(TT$(ORD(TT) GT ORD(T)), P_MCON(I,TT)) + P_TERM(I)); SOPT(I,T).. P_SDEF(I,T-1) =G= P_SDEF(I,T); X.LO(I,T) = 0.0001; X.L(I,T) = 1; PC.L(T) = 1; S.FX(I,T)$(ORD(T) EQ 1) = 0; MODEL MONEY / SOPT.S, XOPT.X, WOPT.W, UOPT.U, VOPT.V, SDEF.P_SDEF, MCON.P_MCON, MTERM.P_TERM, MKT.PC/; MONEY.ITERLIM = 10000; MONEY.WORKSPACE = 5; $ONTEXT FILE MOPT /MILES.OPT/; PUT MOPT 'SCALE .TRUE.'/; PUTCLOSE MOPT; FILE POPT /PATH.OPT/; PUT POPT 'nms_mstep_frequency 1'/; PUT POPT 'preprocessing_method none'/; PUTCLOSE POPT; $OFFTEXT PARAMETER RESULTS SUMMARY OF RESULTS, M(*,T) MONEY HOLDINGS BY TIME PERIOD, BID(*,T) BIDS BY PERIOD; LOOP(MDL, CASE(MDL) = YES; LOOP(SC, * OMIT LENDING AND BORROWING IF THERE IS NO OUTSIDE BANK, * MODELS 1 AND 2: IF ((CASE("MODEL1")+CASE("MODEL2")), U.UP(I,T) = 0; V.UP(I,T) = 0; ELSE U.UP(I,T) = +INF; V.UP(I,T) = +INF; ); * SET THE TERMINAL MODEL STOCK TO ZERO FOR MODELS 2 AND 4: IF ((CASE("MODEL2")+CASE("MODEL4")), MT(I) = 0; ELSE MT(I) = 1; ); DELTA(I,T) = DELTAVAL(SC,T); THETA(I,T) = BETA**(ORD(T)-1) * DELTA(I,T); THETA(I,T) = THETA(I,T) / SUM(TT, THETA(I,TT)); PC.FX(T) = PC.L(T); SOLVE MONEY USING MCP; PC.LO(T) = 0; PC.UP(T) = +INF; SOLVE MONEY USING MCP; execerror = 0; M(I,T) = M0(I) + SUM(TT$(ORD(TT) LT ORD(T)),PC.L(TT)*(W.L(I,TT)-X.L(I,TT))); M("TOTAL",T) = SUM(I, M(I,T)); BID(I,T) = X.L(I,T) * PC.L(T); OPTION DECIMALS = 5; DISPLAY W.L, X.L, S.L, PC.L, P_TERM.L, M, BID; IF (MONEY.MODELSTAT EQ 1, RESULTS(MDL,SC,"PC","_",T) = PC.L(T); RESULTS(MDL,SC,"BID",I,T) = BID(I,T); RESULTS(MDL,SC,"X",I,T) = X.L(I,T); RESULTS(MDL,SC,"S",I,T) = S.L(I,T); RESULTS(MDL,SC,"M",I,T) = M(I,T); ELSE * WHEN A MODEL FAILS TO SOLVE, REINSTALL AN INITIAL POINT * SO THAT WE DON'T CREATE PROBLEMS FOR THE NEXT MODEL: PC.L(T) = 1; X.L(I,T) = 1; S.L(I,T) = 1; W.L(I,T) = 0; P_MCON.L(I,T) = 0; P_SDEF.L(I,T) = 0; P_TERM.L(I) = 0; U.L(I,T) = 0; V.L(I,T) = 0; ); ); CASE(MDL) = NO; ); SET ROW /PC,BID,X,S,M/, COL /"_"/; COL(I) = YES; * FILE ssout /money.sol/; * $BATINCLUDE gams2txt.inc ssout results MDL SC row col t * DISPLAY RESULTS;