chenery.gms : Substitution and Structural Change

Description

This model follows conventional input-output formulations for production
with nonlinear demand functions, import and export functions and production
functions for direct factor use.


Reference

  • Chenery, H B, and Raduchel, W J, Substitution and Structural Change. In Chenery, H B, Ed, Structural Change and Development Policy. Oxford University Press, New York and Oxford, 1981.

Small Model of Type : NLP


Category : GAMS Model library


Main file : chenery.gms

$title Substitution and Structural Change (CHENERY,SEQ=33)

$onText
This model follows conventional input-output formulations for production
with nonlinear demand functions, import and export functions and production
functions for direct factor use.


Chenery, H B, and Raduchel, W J, Substitution and Structural Change.
In Chenery, H B, Ed, Structural Change and Development Policy. Oxford
University Press, New York and Oxford, 1979.

Keywords: nonlinear programming, econometrics, economic development
$offText

Set
   i    'sectors'               / light-ind, food+agr, heavy-ind, services /
   t(i) 'tradables'             / light-ind, food+agr, heavy-ind /
   lmh  'possible elasticities' / low, medium, high /
   sde  'other parameters'      / subst, distr, effic /;

Alias (i,j);

Table aio(i,i) 'input coefficients'
               light-ind  food+agr  heavy-ind  services
   food+agr           .1
   heavy-ind          .2        .1
   services           .2        .3         .1          ;

* In the next 3 tables data is specified for many different possible
* hypotheses about the economy. One particular subset is used for any
* individual model. See assignment statements below.

Table pdat(lmh,*,sde,i) 'production data'
                    light-ind  food+agr  heavy-ind  services
   low.a.subst
   low.a.distr           .915      .944      2.60     .80
   low.a.effic          3.83      3.24       4.0     1.8
   low.b.subst
   low.b.distr           .276     1.034      2.60     .77
   low.b.effic          2.551     3.39       4.0     1.77
   medium.a.subst        .11       .29        .2      .05
   medium.a.distr        .326      .443       .991    .00798
   medium.a.effic       3.97      3.33       1.67    1.84
   medium.b.subst        .22       .58        .4      .1
   medium.b.distr        .41       .47        .92     .08
   medium.b.effic       3.99      3.33       1.8     1.89
   high.a.subst          .45      1.15        .4      .2
   high.a.distr          .456      .483       .917    .23
   high.a.effic         4.0       3.33       1.8     1.92
   high.b.subst          .93      1.15        .8      .4
   high.b.distr          .484      .483       .769    .344
   high.b.effic         4.0       3.33       1.96    1.96   ;

Table ddat(lmh,*,i) 'demand parameters'
                            light-ind  food+agr  heavy-ind  services
   (low,medium,high).ynot        100      230         220       450
   medium.p-elas                -.674     -.246      -.587     -.352
   high  .p-elas               -1        -1         -1        -1    ;

Table tdat(lmh,*,t) 'trade parameters'
                     light-ind  food+agr  heavy-ind
   medium.alp            .005      .001      .01
   high  .alp            .0025     .0005     .00178
   (medium,high).gam    1.0       1.1       1.0
   (medium,high).xsi     .005      .0157     .00178;

Parameter
   mew(t)  'intercept on import cost function'
   xsi(t)  'slope of import cost function'
   gam(t)  'intercept on export revenue function'
   alp(t)  'slope of export revenue function'
   ynot(i) 'demands in base year'
   sig(i)  'elasticity of substitution capital to labor'
   thet(i) 'price elasticity of demand'
   rho(i)  'substitution parameter in production functions'
   del(i)  'distribution parameter in production functions'
   efy(i)  'efficiency parameter in production functions';

Scalar
   lbar    'total supply of labor' / 750 /
   plab    'price of labor'        /   1 /
   kbar    'capital stock'         / 500 /
   dbar    'trade deficit'         /   0 /;

Variable
   x(i)    'quantity of output'
   v(i)    'value added per unit output at current prices'
   y(i)    'final consumption'
   p(i)    'prices'
   l(i)    'labor use per unit of output'
   k(i)    'capital use per unit of output'
   e(i)    'quantity of exports'
   m(i)    'quantity of imports'
   g(t)    'foreign exchange cost of imports'
   h(t)    'foreign exchange value of exports'
   pk      'nominal market price of capital'
   pi      'factor price ratio'
   pd      'price deflator'
   td      'total demand'
   vv(i)   'intermediate result';

Positive Variable x, y, e, m, g, h, p, k, l, v;

Equation
   dty     'total demand: definition'
   mb(i)   'material balance'
   tb      'trade balance'
   dg(t)   'definition of imports'
   dh(t)   'definition of exports'
   dem(i)  'demand equations'
   lc      'labor constraint'
   kc      'capital constraint'
   sup(i)  'supply equations'
   fpr     'factor price ratio definition'
   dvv(i)  'definition of vv'
   dl(i)   'definition of labor coefficient'
   dk(i)   'definition of capital coefficient'
   dv(i)   'value added';

* The naming convention followed below is -
* endogenous variables have 1 or 2 character names
* exogenous parameters have 3 or more characters

dty..    td   =e= sum(i, y(i));

mb(i)..  x(i) =g= y(i) + sum(j, aio(i,j)*x(j)) + (e(i) - m(i))$t(i);

tb..     sum(t, g(t)*m(t) - h(t)*e(t)) =l= dbar;

dg(t)..  g(t) =e= mew(t) + xsi(t)*m(t);

dh(t)..  h(t) =e= gam(t) - alp(t)*e(t);

dem(i).. y(i) =e= ynot(i)*(pd*p(i))**thet(i);

lc..     sum(i, l(i)*x(i)) =l= lbar;

kc..     sum(i, k(i)*x(i)) =e= kbar;

sup(i).. p(i) =e= sum(j, aio(j,i)*p(j)) + v(i);

fpr..    pi   =e= pk/plab;

dvv(i)$(sig(i) <> 0).. vv(i) =e= (pi*(1 - del(i))/del(i))**(-rho(i)/(1 + rho(i)));

dl(i)..  l(i)*efy(i) =e= ((del(i)/vv(i) + (1 - del(i)))**(1/rho(i)))$(sig(i) <> 0) + 1$(sig(i) = 0);

dk(i)..  k(i)*efy(i) =e= ((del(i) + (1 - del(i))*vv(i))**(1/rho(i)))$(sig(i) <> 0) + del(i)$(sig(i) = 0);

dv(i)..  v(i) =e= pk*k(i) + plab*l(i);

Model chenrad 'chenery raduchel model' / all /;

* bounds for variables
y.up(i)  = 2000;
x.up(i)  = 2000;
e.up(t)  =  400;
m.up(t)  =  400;
g.up(t)  =    4;
h.up(t)  =    4;
p.up(i)  =  100;
p.lo(i)  =    0.1;
l.up(i)  =    1;
k.up(i)  =    1;
pk.lo    =    0.25;
pk.up    =    4;
pi.lo    =    0.25;
pi.up    =    4;
v.up(i)  =  100;
vv.lo(i) =    0.001;

* select coefficient values for this run
mew(t)  = 1.0;
xsi(t)  = tdat("medium","xsi",t);
gam(t)  = tdat("medium","gam",t);
alp(t)  = tdat("medium","alp",t);
ynot(i) = ddat("medium","ynot",i);
thet(i) = ddat("medium","p-elas",i);
sig(i)  = pdat("medium","a","subst",i);
del(i)  = pdat("medium","a","distr",i);
efy(i)  = pdat("medium","a","effic",i);
rho(i)$(sig(i) <> 0) = 1./sig(i) - 1.;

* initial values for variables
y.l(i) = 250;
x.l(i) = 200;
e.l(t) =   0;
m.l(t) =   0;
g.l(t) = mew(t) + xsi(t)*m.l(t);
h.l(t) = gam(t) - alp(t)*e.l(t);
pd.l   =   0.3;
p.l(i) =   3;
pk.l   =   3.5;
pi.l   = pk.l/plab;

vv.l(i)$sig(i) = (pi.l*(1 - del(i))/del(i))**(-rho(i)/(1 + rho(i)));

l.l(i) = (((del(i)/vv.l(i) + (1 - del(i)))**(1/rho(i)))$(sig(i) <> 0)
         + 1$(sig(i) = 0))/efy(i);

k.l(i) = (((del(i) + (1 - del(i))*vv.l(i))**(1/rho(i)))$(sig(i) <> 0)
         + del(i)$(sig(i) = 0))/efy(i);

v.l(i) = pk.l*k.l(i) + plab*l.l(i);

* add bounds to avoid function evaluation errors
pd.lo   = 0.01;
p.lo(i) = 0.1;

solve chenrad using nlp maximizing td;

Scalar
   cva 'total value added at current prices'
   rva 'real value added'
   fve 'foreign exchange value of exports'
   emp 'total employment'
   cli 'cost of living index';

cva = sum(i, v.l(i)*x.l(i));
fve = sum(t, e.l(t)*h.l(t));
emp = sum(i, l.l(i)*x.l(i));
cli = sum(i, p.l(i)*ynot(i))/sum(i, ynot(i));
rva = cva/cli;

display cli, cva, rva, fve, emp;