-
Peter Alexander authoredPeter Alexander authored
elasticDemand.gms 2.36 KiB
$ondotl
Set i(*);
ALIAS (i,j);
PARAMETER
alpha(i) Parameter of MAIDADS
beta(i) Parameter of MAIDADS
kappa Parameter of MAIDADS
delta(i) Parameter of MAIDADS
tau(i) Parameter of MAIDADS
omega Parameter of MAIDADS
previousU
previousSubs(i)
previousDisc(i)
;
$gdxin %gdx_parameters%
$load i, alpha, beta, kappa, delta, tau, omega
$gdxin
VARIABLE
u Utility;
POSITIVE VARIABLE
DiscretionaryC(i) Discretionary consumption
SubsistenceC(i) Subsistence consumption
w(i) Budget share by commodity
;
PARAMETER
p(i) Price,
m GDP per capita
maxIncomePropFoodSpend Maximum proportion of income spent on food,
desiredConsumpFactor Affordable consumption used when below minimum subsistence level
;
$gdxin %gdx_prices_and_gdp%
*$gdxin "../../GAMS/PricesAndGdp.gdx"
$load maxIncomePropFoodSpend, p=price, m=gdp_pc, previousU, previousSubs, previousDisc
$gdxin
display maxIncomePropFoodSpend, p, m, alpha, beta, kappa, delta, tau, omega;
w.up(j) = 1;
EQUATIONS
EQ_w(i) "Definition of budget share"
EQ_u "Implicit definition of utility"
EQ_DiscretionaryC(i)
EQ_SubsistenceC(j)
;
EQ_w(j)..
w(j) =e= (SubsistenceC(j)+DiscretionaryC(j))*p(j)/m;
EQ_u..
sum(i, (alpha(i)+beta(i)*exp(u))/(1+exp(u))*log(DiscretionaryC(i)))-u =e= kappa ;
EQ_DiscretionaryC(i)$p(i).. DiscretionaryC(i) =e=
[(alpha(i)+beta(i)*exp(u))/(1+exp(u))]/p(i)*
[m-sum(j,p(j)*SubsistenceC(j))];
EQ_SubsistenceC(j)..
SubsistenceC(j) =e= (delta(j)+tau(j)*exp(omega*u))/(1+exp(omega*u));
model MAIDADS_Sim "MAIDADS model for simulation" /
EQ_w.w
EQ_u.u
EQ_DiscretionaryC.DiscretionaryC
EQ_SubsistenceC.SubsistenceC
/ ;
MAIDADS_Sim.optfile = 1;
option cns=path;
desiredConsumpFactor = m * maxIncomePropFoodSpend / sum(i, p(i)*delta(i));
display desiredConsumpFactor;
Scalar ms 'model status', ss 'solve status';
u = previousU;
If (desiredConsumpFactor > 1.0,
SubsistenceC(i) = previousSubs(i);
DiscretionaryC(i) = previousDisc(i);
DiscretionaryC.LO(i) = 1E-11;
SubsistenceC.LO(j) = 0;
w(j) = (SubsistenceC(j)+DiscretionaryC(j))*p(j)/m;
desiredConsumpFactor = 1;
solve MAIDADS_Sim using cns;
ms=MAIDADS_Sim.modelstat;
ss=MAIDADS_Sim.solvestat;
else
SubsistenceC(i) = delta(i) * desiredConsumpFactor;
);
display SubsistenceC.l, DiscretionaryC.l;