Description
This mini version of ORANI, a multisector price endogenous model of Australia, demonstrates the percentage change formulation first applied by Johansen.
Small Model of Type : LP
Category : GAMS Model library
Main file : orani.gms
$title A Miniature Version of Orani 78 (ORANI,SEQ=40)
$onText
This mini version of ORANI, a multisector price endogenous model of
Australia, demonstrates the percentage change formulation first
applied by Johansen.
Kendrick, D, Style in Multisector Modeling. In Hughes-Hallet, J, Ed,
Applied Decision Analysis and Economic Behavior. Kluwer and Nijhoff,
Boston and The Hague, 1984.
Keywords: linear programming, macro economics, australian economy, multisector modeling,
price endogenous modeling
$offText
Set
c 'commodities' / food, clothing /
ca(c) 'agricultural commodities' / food /
cm(c) 'manufacturing commodities' / clothing /
f 'factors' / labor, capital /
h 'households' / families /
i 'industries' / agric 'agriculture'
manuf 'manufacturing' /
s 'sources' / domestic, imported /
ce(c,c) 'diagonal';
Alias (c,cp), (s,sp), (i,ip);
ce(c,c) = yes;
display ce;
Table amc(c,s,*) 'accounting matrix for commodities'
* industries households exports import
agric manuf families exp duty
food.domestic 10 8 17 19
clothing.domestic 15 1 34 1
food.imported 1 8 1 -1
clothing.imported 5 2 10 -5;
Table amf(f,i) 'accounting matrix for factors'
agric manuf
labor 20 20
capital 10 5;
Table amq(c,i) 'accounting matrix for outputs'
agric manuf
food 45 9
clothing 16 35;
Table epsilon(c,s) 'income elasticities'
domestic imported
food 1. 1.
clothing 1. 1.;
Parameter
amt(i) 'accounting matrix for column totals'
gamma(c) 'export demand parameters' / food .5, clothing .05 /
wl(i) 'share of total employment' / agric .5, manuf .5 /
theta 'wage rate adjustment parameter';
amt(i) = sum((c,s), amc(c,s,i)) + sum(f, amf(f,i));
amc(c,s,"total") = sum(i, amc(c,s,i)) + amc(c,s,"families") + amc(c,s,"exp") + amc(c,s,"duty");
theta = 1;
display amt, amc;
Parameter
alpha(c,s,i) 'share of expenditure by industry'
alphak(i) 'share of expenditure on capital'
alphal(i) 'share of expenditure on labor'
alphae(c,s) 'share of good cs in expenditure on commodity c'
etabar(c,s,cp,sp) 'compensated price elasticities'
sb(c,s) 'share of good cs in household budget'
eta(c,s,cp,sp) 'uncompensated price elasticities'
elevel 'base period export level - not a rate'
m(c,i) 'industry market share'
mlevel 'base period import level - not a rate';
alpha(c,s,i) = amc(c,s,i)/sum(sp, amc(c,sp,i));
alphak(i) = amf("capital",i)/sum(f, amf(f,i));
alphal(i) = amf("labor",i)/sum(f, amf(f,i));
alphae(c,s) = amc(c,s,"families")/sum(sp, amc(c,sp,"families"));
etabar(c,s,cp,sp) = alphae(cp,sp);
etabar(c,s,c,s) = -1. + alphae(c,s);
etabar(c,s,cp,sp)$(not ce(c,cp)) = 0.;
sb(c,s) = amc(c,s,"families")/sum((cp,sp), amc(cp,sp,"families"));
eta(c,s,cp,sp) = - epsilon(c,s)*sb(cp,sp) + etabar(c,s,cp,sp);
elevel = sum((c,s), amc(c,s,"exp"));
m(c,i) = amq(c,i)/sum(ip, amq(c,ip));
mlevel = sum(c, amc(c,"imported","total"));
Parameter
mu(c,s) 'weights for cpi'
nm(c) 'share in total imports'
nx(c) 'share in total exports'
r(c,i) 'revenue share'
sc(c,s,i) 'cost share'
sk(i) 'cost share for capital'
sl(i) 'cost share for labor'
wc(c,s) 'share of consumption in demand'
we(c) 'share of exports in demand'
wi(c,s,i) 'share of intermediates in demand';
mu(c,s) = sb(c,s);
nm(c) = amc(c,"imported","total")/sum(cp, amc(cp,"imported","total"));
nx(c) = amc(c,"domestic","exp")/sum(cp, amc(cp,"domestic","exp"));
r(c,i) = amq(c,i)/sum(cp, amq(cp,i));
sc(c,s,i) = amc(c,s,i)/amt(i);
sk(i) = amf("capital",i)/amt(i);
sl(i) = amf("labor",i)/amt(i);
wc(c,s) = amc(c,s,"families")/(amc(c,s,"total") - amc(c,s,"duty"));
we(c) = amc(c,"domestic","exp")/amc(c,"domestic","total");
wi(c,s,i) = amc(c,s,i)/(amc(c,s,"total") - amc(c,s,"duty"));
display alpha, alphak, alphal, alphae, etabar, sb, eta, elevel, m, mlevel, mu, nm, nx, r, sc, sk, sl, wc, we, wi;
$sTitle Variable and Equation Declaration
* all variables are rates of change unless otherwise noted
Variable
b 'balance of trade'
cn(c,s) 'consumption - nominal'
cr 'consumption - real'
df(c) 'foreign demand shift'
e(c) 'exports of agricultural commodities'
et 'total exports'
k(i) 'capital demand'
kappa(i) 'sectoral capital stocks'
l 'total employment'
li(i) 'labor demand by industry'
mt 'total imports'
p(c,s) 'prices for commodities in domestic currency'
pc 'prices: consumer price index'
phi 'exchange rate'
pk(i) 'price of capital'
px(c) 'export price in foreign currency'
pm(c) 'import price in foreign currency'
q(c,i) 'output'
t(c) 'import duty'
v(c) 'export subsidy for the manufactures'
w 'wage rate'
ws 'wage shift'
x(c,s,i) 'intermediate commodity demands'
ye 'household expenditure'
z(i) 'industry activity level';
Equation
con(c,s) 'consumption'
expd(c) 'export demands'
supply(c,i) 'supply relations'
indc(c,s,i) 'input demand for commodities'
indcap(i) 'input demand for capital'
indlab(i) 'input demand for labor'
pric(i) 'price equations for commodities'
priexp(c) 'price equations for exports'
priimp(c) 'price equations for imports'
bald(c) 'balance equation for domestic commodities'
ballab 'balance equation for labor'
balcap(i) 'balance equation for capital'
imports 'imports'
exports 'exports'
baltrade 'balance of trade'
cpi 'consumer price index'
wage 'wage rate'
realc 'real consumption'
dummy 'nonbinding constraint to get nonzero rhs';
$sTitle Equation Definitions
con(c,s).. cn(c,s) =e= epsilon(c,s)*ye + sum((cp,sp), eta(c,s,cp,sp)*p(cp,sp));
expd(c).. px(c) =e= - gamma(c)*e(c) + df(c);
supply(c,i).. q(c,i) =e= z(i) + (p(c,"domestic") - sum(cp, r(cp,i)*p(cp,"domestic")));
indc(c,s,i).. x(c,s,i) =e= z(i) - (p(c,s) - sum(sp, alpha(c,sp,i)*p(c,sp)));
indcap(i).. k(i) =e= z(i) - (pk(i) - alphal(i)*w - alphak(i)*pk(i));
indlab(i).. li(i) =e= z(i) - (w - alphal(i)*w - alphak(i)*pk(i));
pric(i).. sum(c, r(c,i)*p(c,"domestic")) =e= sum((c,sp), sc(c,sp,i)*p(c,sp)) + sk(i)*pk(i) + sl(i)*w;
priexp(c).. p(c,"domestic") =e= px(c) + v(c) + phi;
priimp(c).. p(c,"imported") =e= pm(c) + t(c) + phi;
bald(c).. sum(i, m(c,i)*q(c,i)) =e= sum(i, wi(c,"domestic",i)*x(c,"domestic",i))
+ wc(c,"domestic")*cn(c,"domestic") + we(c)*e(c);
ballab.. sum(i, wl(i)*li(i)) =e= l;
balcap(i).. k(i) =e= kappa(i);
imports.. mt =e= sum(c, nm(c)*( pm(c) + sum(i, wi(c,"imported",i)*x(c,"imported",i))
+ wc(c,"imported")*cn(c,"imported")));
exports.. et =e= sum(c, nx(c)*px(c) + nx(c)*e(c));
baltrade.. b =e= (elevel*et - mlevel*mt)/100;
cpi.. pc =e= sum((c,s), mu(c,s)*p(c,s));
wage.. w =e= theta*pc + ws;
realc.. cr =e= ye - pc;
dummy.. pc =l= 100000;
$sTitle Exogenous Variables and Solution Reports
df.fx(c) = 1; e.fx(cm) = 1; kappa.fx(i) = 3;
phi.fx = 0; pm.fx(c) = -2; t.fx(c) = 0;
v.fx(ca) = 0; ws.fx = 0; ye.fx = 2;
Model orani / all /;
solve orani using lp minimizing pc;
Parameter
varcomm(c,*) 'commodity reports'
varindus(i,*) 'industry reports';
varcomm(c,"t") = t.l(c);
varcomm(c,"v") = v.l(c);
varcomm(c,"df") = df.l(c);
varcomm(c,"e") = e.l(c);
varcomm(c,"px") = px.l(c);
varcomm(c,"pm") = pm.l(c);
varindus(i,"k") = k.l(i);
varindus(i,"li") = li.l(i);
varindus(i,"pk") = pk.l(i);
varindus(i,"z") = z.l(i);
varindus(i,"kappa") = kappa.l(i);
display b.l, cr.l, et.l, l.l, mt.l, pc.l, w.l, phi.l, ws.l, ye.l ,q.l, x.l, cn.l, varcomm, varindus;