* * PROTOCD.GMS * Sep 96 (PJW) * * GAMS program to solve several experiments using the PROTO model with * Cobb-Douglas production. * * * Turn off the symbol table and symbol listing. Also turn off the * equation and variable listing produced by the solve statement. * Generally this should only be done after a model is working properly. * $OFFSYMXREF OFFSYMLIST OPTION LIMROW=0, LIMCOL=0; * * OK, now define the model's parameters: * SCALAR a Utility function parameter / 0.285 /; SCALAR alpha Level of technology in production / 2.000 /; SCALAR g Capital exponent in production / 0.500 /; * * These are exogenous variables: * SCALAR h Total endowment of hours / 100.0 /; SCALAR p Numeraire price / 1.000 /; SCALAR tc Initial consumption tax rate / 0.200 /; SCALAR tx Initial intermediate tax rate / 0.0 /; SCALAR tw Initial wage tax rate / 0.0 /; * * Now add some scalars to save base case information so that welfare * calculations can be done for subsequent simulations. The initial * values of these are not used so they are all set to 1 for simplicity. * Setting these up as scalars rather than variables makes them a little * easier to use and can be done because they do not appear in the * actual equations of the model. * SCALAR pbase Base case purchasers price p*(1+t) / 1.000 /; SCALAR wbase Base case wage rate / 1.000 /; SCALAR ybase Base case income / 1.000 /; SCALAR ev Equivalent variation / 1.000 /; * * OK, now set up the endogenous variables: * VARIABLES y Income w Wage rate s Subsidy to households c Quantity consumed l Labor supplied j Leisure consumed q Quantity produced x Intermediate goods demand pc Purchasers price for consumers px Purchasers price for firms wh After-tax wage walras Difference between RHS and LHS of Walras Law equation util Utility z Dummy for solver ; * * Here are the equations: * EQUATIONS income Household income accounting identity consum Household demand for goods leisure Household demand for leisure laborsup Household supply of labor labordem Demand for labor by firms intdem Intermediate goods demand price Price from firm's cost function govbudget Government budget constraint p_con Purchaser's price to consumers p_int Purchaser's price to firms w_hh Household after-tax wage utileq Indirect utility function walraschk Calculate error in Walras Law dummy Dummy equation for solver ; income.. y =e= wh*h + s ; consum.. pc*c =e= a*y ; leisure.. wh*j =e= (1-a)*y ; laborsup.. wh*l =e= a*y - s ; labordem.. l =e= (q/alpha)*( (1-g)*px/(g*w) )**g ; intdem.. x =e= (q/alpha)*( g*w/((1-g)*px) )**(1-g) ; price.. p =e= (1/alpha)*((px/g)**g)*((w/(1-g))**(1-g)); govbudget.. s =e= tc*p*c + tx*p*x + tw*w*l ; p_con.. pc =e= p*(1+tc) ; p_int.. px =e= p*(1+tx) ; w_hh.. wh =e= w*(1-tw) ; utileq.. util =e= (c)**a * (j)**(1-a) ; walraschk.. walras =e= q - x - c ; dummy.. z =e= 1000 ; * * The model consists of all of the equations: * MODEL proto /ALL/; * * Set initial values of variables appearing in denominators because * GAMS will choose zero if we don't. Also, set a few other variables * to help it find the solution. * w.L = 1 ; px.L = 1 ; q.L = 50 ; y.L = 105 ; * * Constrain a few varialbles to be non-negative so that GAMS doesn't * run into numerical errors. * w.lo = 0.1 ; c.lo = 0.0 ; j.lo = 0.0 ; * * Solve it using Nonlinear programming. Must give the * algorithm something to minimize so use a dummy variable. * SOLVE proto USING NLP MINIMIZING z; * * Now save some base case variables for welfare calculations. Need to * use the .L suffix for variables but don't need it with scalars. * pbase = pc.L ; wbase = w.L ; ybase = y.L ; * * Alternative 1: a 50% increase in the numeraire. * * Increase p to 1.5 and solve. After solving, calculate the * equivalent variation for the experiment using the new utility * and the base case prices and income. The EV for this experiment * should be zero but calculate it just to check. * p = 1.5 ; SOLVE proto USING NLP MINIMIZING z; ev = util.L * (pbase/a)**a * (wbase/(1-a))**(1-a) - ybase ; display ev ; p = 1.0 ; * * Alternative 2: an increase in the consumption tax rate. * tc = 0.3 ; SOLVE proto USING NLP MINIMIZING z; ev = util.L * (pbase/a)**a * (wbase/(1-a))**(1-a) - ybase ; display ev ; tc = 0.2 ; * * Alternative 3: an increase in the intermediate goods tax. * tx = 0.1 ; SOLVE proto USING NLP MINIMIZING z; ev = util.L * (pbase/a)**a * (wbase/(1-a))**(1-a) - ybase ; display ev ; tx = 0.0 ; * * Alternative 4: an increase in the wage tax. * tw = 0.1 ; SOLVE proto USING NLP MINIMIZING z; ev = util.L * (pbase/a)**a * (wbase/(1-a))**(1-a) - ybase ; display ev ; tw = 0.0 ;