Description
A nonlinear programming model is used to find the market equilibrium for a model with activity analysis containing multiple production technologies. The calibration or reconciliation calculations are not shown in this version. In practice it may be necessary to solve another nlp in order to find a consistent initial point. Also, the shadow prices on commodity balances and resource constraints are not always as reported in the reference. only if some variables (and equations) are substituted out and all constraints are set to =e= will the reported relationship hold.
Small Model of Type : NLP
Category : GAMS Model library
Main file : prolog.gms
$title Market Equilibrium and Activity Analysis (PROLOG,SEQ=41)
$onText
A nonlinear programming model is used to find the market
equilibrium for a model with activity analysis containing
multiple production technologies. The calibration or reconciliation
calculations are not shown in this version. In practice it may
be necessary to solve another nlp in order to find a consistent
initial point. Also, the shadow prices on commodity balances
and resource constraints are not always as reported in the reference.
only if some variables (and equations) are substituted out and
all constraints are set to =e= will the reported relationship hold.
Norton, R D, and Scandizzo, P L, Market Equilibrium Computations in
Activity Analysis Models. Operations Research 29, 2 (1981).
Keywords: nonlinear programming, market equilibrium, activity analysis,
economic development
$offText
Set
i 'commodities' / food, h-industry, l-industry /
g(i) 'goods demanded' / food, l-industry /
k 'resources' / labor, capital /
h 'households' / workers, enterpr /
t 'technologies' / tech-1*tech-3 /;
Alias (i,j), (g,gp);
Table a(i,j) 'input-output matrix'
food h-industry l-industry
food .060 .244
h-industry .064 .420 .172
l-industry .048 .247 .084;
Table d(i,k,t) 'resource technology matrix'
labor.tech-1 capital.tech-1 labor.tech-2 capital.tech-2 labor.tech-3 capital.tech-3
food 1.0 2.0 1.2 1.8 .8 2.2
h-industry 2.0 3.0 1.8 3.5 2.4 2.3
l-industry 3.0 3.0 2.7 3.2 3.2 2.7;
Table bb(h,k) 'resource endowment and ownership'
labor capital
workers .900 .100
enterpr .100 .900;
Table x0(i,h) 'initial consumption'
workers enterpr
food 352.0 430.0
l-industry 222.0 292.0;
Parameter
b(k) 'total resource endowment' / labor 3712, capital 5000 /
p0(i) 'initial prices' / food .5942, h-industry 1.6167, l-industry 1.31077 /
y0(h) 'initial income'
q0(i) 'initial production'
r0 'initial marginal product';
y0(h) = sum(g, x0(g,h)*p0(g));
r0 = sum(h, y0(h))/sum(k, b(k));
display y0, r0;
$sTitle Calibration of Demand System and aggregation Tests
Parameter
gamma(g,h) 'les parameter'
beta(g,h) 'les parameter'
alpha(g,h) 'budget shares'
al(g,h) 'linear demand intercept'
cl(g,h) 'income demand slope'
s(g,gp,h) 'cross price demand slope'
an(g,h) 'nonlinear demand constant'
eta(g,gp,h) 'price elasticities';
Table epsi(i,h) 'income elasticities'
workers enterpr
food .8 .6
l-industry 1.14 1.26;
Scalar omega 'money flexibility - frish' / -2 /;
alpha(g,h) = p0(g)*x0(g,h)/y0(h);
epsi(g,h) = epsi(g,h)/sum(gp, epsi(gp,h)*alpha(gp,h));
beta(g,h) = epsi(g,h)*alpha(g,h);
gamma(g,h) = x0(g,h) + beta(g,h)*y0(h)/p0(g)/omega;
eta(g,gp,h) = -gamma(gp,h)*p0(gp)*beta(g,h)/p0(g)/x0(g,h);
eta(g,g ,h) = gamma(g ,h)*(1 - beta(g,h))/x0(g,h) - 1;
display alpha, epsi, beta, gamma, eta;
an(g,h) = x0(g,h)/prod(gp, p0(gp)**eta(g,gp,h))/y0(h)**epsi(g,h);
cl(g,h) = epsi(g,h)*x0(g,h)/y0(h);
s(g,gp,h) = eta(g,gp,h)*x0(g,h)/p0(gp);
al(g,h) = x0(g,h) - sum(gp, s(g,gp,h)*p0(gp)) - cl(g,h)*y0(h);
display an, cl, s, al;
Parameter
etest(h) 'Engel aggregation test'
htest(g,h) 'homogeneity test'
ctest(g,h) 'Cournot aggregation test';
etest(h) = sum(g, epsi(g,h)*alpha(g,h)) -1;
htest(g,h) = sum(gp, eta(g,gp,h)) + epsi(g,h);
ctest(g,h) = sum(gp, alpha(gp,h)*eta(gp,g,h)) + alpha(g,h);
display etest, htest, ctest;
$sTitle Model Definitions
Variable
z 'expenditure minus factor income'
p(i) 'prices of goods'
x(i,h) 'quantities consumed'
r(k) 'marginal product'
q(i,t) 'quantities produced'
y(h) 'income';
Positive Variable x, q, p, r, y;
Equation
cb(i) 'commodity balances'
rc(k) 'resource constraint'
de(g,h) 'demand - linear expenditure system'
dl(g,h) 'demand - linear demand function'
dn(g,h) 'demand - nonlinear demand function'
bc(h) 'budget constraint'
id(h) 'income definition'
mp(i,t) 'marginal pricing condition'
zdef 'objective definition';
cb(i).. sum(h$g(i), x(i,h)) =l= sum(t, q(i,t) - sum(j, a(i,j)*q(j,t)));
rc(k).. sum((i,t), d(i,k,t)*q(i,t)) =l= b(k);
de(g,h).. x(g,h) =l= gamma(g,h) + beta(g,h)*( y(h) - sum(gp, gamma(gp,h)*p(gp)))/p(g);
dl(g,h).. x(g,h) =l= al(g,h) + sum(gp, s(g,gp,h)*p(gp)) + cl(g,h)*y(h);
dn(g,h).. x(g,h) =l= an(g,h)*prod(gp, p(gp)**eta(g,gp,h))*y(h)**epsi(g,h);
bc(h).. sum(g, x(g,h)*p(g)) =l= y(h);
id(h).. y(h) =l= sum(k, bb(h,k)*b(k)*r(k));
mp(i,t).. p(i) =l= sum(j, a(j,i)*p(j)) + sum(k, d(i,k,t)*r(k));
zdef.. z =e= sum((g,h), x(g,h)*p(g)) - sum(k, b(k)*r(k));
Model
nortone 'eles version' / cb, rc, de, bc, id, mp, zdef /
nortonl 'linear version' / cb, rc, dl, bc, id, mp, zdef /
nortonn 'nonlinear version' / cb, rc, dn, bc, id, mp, zdef /;
x.l(i,h) = x0(i,h);
p.l(i) = p0(i);
y.l(h) = y0(h);
r.l(k) = r0;
* lower bounds are placed on price to avoid the trivial solution p=0.
p.lo(i) = .2;
Parameter
wp(g) 'weights for price index'
pi 'price index'
yp 'real income';
wp(g) = sum(h, x0(g,h)*p0(g))/sum(h, y0(h));
display wp;
solve nortonl maximizing z using nlp;
pi("linear") = sum(g, wp(g)*p.l(g))/sum(g, wp(g)*p0(g));
yp("linear") = sum(h, y.l(h))/pi("linear");
display pi, yp;
solve nortone maximizing z using nlp;
pi("les") = sum(g, wp(g)*p.l(g))/sum(g, wp(g)*p0(g));
yp("les") = sum(h, y.l(h))/pi("les");
display pi, yp;
solve nortonn maximizing z using nlp;
pi("nonlin") = sum(g, wp(g)*p.l(g))/sum(g, wp(g)*p0(g));
yp("nonlin") = sum(h, y.l(h))/pi("nonlin");
display pi, yp;