Skip to content
Snippets Groups Projects
Commit cc89fe9a authored by Peter Alexander's avatar Peter Alexander
Browse files

Demand GAMS code

parent 97724a4d
No related branches found
No related tags found
No related merge requests found
SET com / monogastrics, ruminants, wheat, maize, rice, oilcrops, pulses, starchyRoots /;
ALIAS (com, com2);
ALIAS (com, com3);
SCALAR income / 100 /;
TABLE subElasticities(com, com2)
ruminants wheat maize rice oilcrops pulses starchyRoots
monogastrics 0.7 0.15 0.1 0.1 0.1 0.1 0.1
ruminants 0.1 0.1 0.1 0.1 0.1 0.1
wheat 0.6 0.6 0.4 0.4 0.4
maize 0.6 0.4 0.4 0.4
rice 0.4 0.4 0.4
oilcrops 0.5 0.5
pulses 0.5 ;
subElasticities(com, com2)$subElasticities(com2, com) = subElasticities(com2, com);
PARAMETER calories(com)
/ monogastrics 3,
ruminants 5,
wheat 1,
maize 1,
rice 1,
oilcrops 2,
pulses 1,
starchyRoots 1 / ;
calories(com) = 1;
PARAMETER idealDiet(com)
/ monogastrics 1,
ruminants 1,
wheat 1,
maize 1,
rice 1,
oilcrops 1,
pulses 1,
starchyRoots 1 / ;
PARAMETER price(com)
/ monogastrics 4,
ruminants 5,
wheat 2,
maize 2,
rice 2,
oilcrops 2,
pulses 1,
starchyRoots 1 / ;
PARAMETER comUtility(com);
comUtility(com) = 1;
Variables
consumption(com)
diffIncrease(com)
diffDecrease(com)
subIncrease(com, com2) proportion of each off-setting or substitution consumption matrix
subDecrease(com, com2) proportion of each off-setting or substitution consumption matrix
totalCost
foodUtility
netUtility;
Positive Variable consumption, subIncrease, subDecrease, diffIncrease, diffDecrease;
Equations
budget_constraint
diff_constrainta(com)
diff_constraintb(com)
diff_constraintc(com)
diff_constraintd(com) can not decrease more than whole ideal consumption as would imply negative consumption
subs_constraint1a(com)
subs_constraint1b(com)
subs_constraint2a(com)
subs_constraint2b(com)
subs_constraint3a(com2) the different to ideal adds to the total used for substituting for alternative commodities
subs_constraint3b(com2) the different to ideal adds to the total used for substituting for alternative commodities
food_utility_change_calc
total_cost_calc
net_utility_calc;
budget_constraint .. totalCost =l= income;
diff_constrainta(com) .. diffIncrease(com) =g= (consumption(com) - idealDiet(com));
diff_constraintb(com) .. diffDecrease(com) =g= -(consumption(com) - idealDiet(com));
diff_constraintc(com) .. diffIncrease(com) - diffDecrease(com) =e= consumption(com) - idealDiet(com);
diff_constraintd(com) .. diffDecrease(com) =l= idealDiet(com);
subs_constraint1a(com) .. subIncrease(com, com) =e= 0;
subs_constraint1b(com) .. subDecrease(com, com) =e= 0;
subs_constraint2a(com) .. sum(com2, subDecrease(com, com2) * calories(com2)) =e= diffIncrease(com) * calories(com);
subs_constraint2b(com) .. sum(com2, subIncrease(com, com2) * calories(com2)) =e= diffDecrease(com) * calories(com);
subs_constraint3a(com2) .. sum(com, subDecrease(com, com2) * calories(com)) =e= diffDecrease(com2) * calories(com2);
subs_constraint3b(com2) .. sum(com, subIncrease(com, com2) * calories(com)) =e= diffIncrease(com2) * calories(com2);
food_utility_change_calc .. foodUtility =e= sum(com,
comUtility(com) * ( (diffIncrease(com) + diffDecrease(com))**2 -
sum(com2, (subIncrease(com, com2) + subDecrease(com, com2))**2 * subElasticities(com, com2))
) );
total_cost_calc .. totalCost =e= sum(com, consumption(com) * price(com));
net_utility_calc .. netUtility =e= ((totalCost/income)) * 25 + foodUtility;
MODEL DEMAND /ALL/ ;
consumption.l(com) = idealDiet(com);
SOLVE DEMAND USING NLP MINIMIZING netUtility;
display foodUtility.l, totalCost.l, subElasticities, idealDiet, subDecrease.l, subIncrease.l, consumption.l, diffIncrease.l, diffDecrease.l;
PARAMETER diff(com);
diff(com) = consumption.l(com) - idealDiet(com);
display diff;
PARAMETER check(com);
check(com) = 0;
*display check;
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment