orani.gms : A Miniature Version of Orani 78


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)

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

   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.;

   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;

   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"));

   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
   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';

   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;

   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;