Description
A simple production and distribution model of the Egyptian fertilizer sector for the year 1975. This model was mainly used for data and model validation purposes.
Large Model of Type : LP
Category : GAMS Model library
Main file : ferts.gms
$title EGYPT - Static Fertilizer Model (FERTS,SEQ=13)
$onText
A simple production and distribution model of the Egyptian fertilizer
sector for the year 1975. This model was mainly used for data and
model validation purposes.
Choksi, A M, Meeraus, A, and Stoutjesdijk, A, The Planning of Investment
Programs in the Fertilizer Industry. The John Hopkins University Press,
Baltimore and London, 1980.
Keywords: linear programming, production problem, distribution problem, micro
economics, fertilizer industry, agricultural production
$offText
$sTitle Set Definitions
Set
i 'plant locations' / aswan
helwan
assiout
kafr-el-zt
abu-zaabal /
j 'demand regions' / alexandria 'alexandria'
behera 'damanhur'
gharbia 'tanta'
kafr-el-sh 'kare el-sheikh'
dakahlia 'el mansura'
damietta 'damietta'
sharkia 'zagazig'
ismailia 'ismailia'
suez 'suez'
menoufia 'shibin el kom'
kalubia 'benha'
giza 'giza'
beni-suef 'beni-suef'
fayoum 'el-fayoum'
minia 'el-minia'
assiout 'assoiut'
new-valley 'el kharga'
sohag 'sohag'
quena 'quena'
aswan 'aswan' /
m 'productive units' / sulf-a-s 'sulfuric acid: sulfur'
sulf-a-p 'sulfuric acid: pyrites'
nitr-acid 'nitric acid'
amm-elec 'ammonia: water electrolysis'
amm-c-gas 'ammonia: coke gas'
c-amm-nitr 'calcium ammonium nitrate'
amm-sulf 'ammonium sulfate'
ssp 'single superphosphate' /
p 'processes' / sulf-a-s 'sulfuric acid: sulfur'
sulf-a-p 'sulfuric acid: pyrites'
nitr-acid 'nitric acid'
amm-elec 'ammonia: water electrolysis'
amm-c-gas 'ammonia: coke gas'
can-310 'calcium ammonium nitrate: 31.0 %'
can-335 'calcium ammonium nitrate: 33.5 %'
amm-sulf 'ammonium sulfate'
ssp-155 'single superphosphate: 15.5 %' /
cq 'nutrients' / n 'nitrogen'
p2o5 'phosphorus' /
c 'commodities' / urea
can-260 'calcium ammonium nitrate: 26.0 %'
can-310 'calcium ammonium nitrate: 31.0 %'
can-335 'calcium ammonium nitrate: 33.5 %'
amm-sulf 'ammonium phosphate'
dap 'diammonium phosphate'
ssp-155 'single superphosphate: 15.5 %'
c-250-55 'compound 25-5.5-0'
c-300-100 'compound 30-10-0'
ammonia
nitr-acid 'nitric acid'
sulf-acid 'sulfuric acid'
el-aswan 'electricity from aswan dam'
coke-gas 'coke-oven gas'
phos-rock 'phosphate rock'
limestone
el-sulfur 'elemental sulfur'
pyrites
electric 'electricity'
bf-gas 'blast-furnace gas'
water 'cooling water'
steam
bags /
cf(c) 'final product'
/ urea, can-260, can-310, can-335, dap, ssp-155, c-250-55, c-300-100, amm-sulf /
ci(c) 'intermediate products' / ammonia, nitr-acid, sulf-acid /
cs(c) 'intermediates for shipment' / ammonia, sulf-acid /
cr(c) 'domestic raw materials and miscellaneous inputs'
/ el-aswan , coke-gas, phos-rock, limestone
el-sulfur, pyrites , electric , bf-gas
water , steam , bags , sulf-acid /;
Alias (i,ip);
$sTitle Consumption and Demand Data
Table cf75(j,c) 'fertilizer consumption 1974-75 (1000 tpy)'
amm-sulf urea can-260 can-310 can-335 dap ssp-155 c-250-55 c-300-100
alexandria 3.0 1.0 5.0 8.0
behera 90.0 35.0 1.0 25.0 .1 64.0 1.0 .1
gharbia 60.0 28.0 17.0 .1 57.0 1.0 .2
kafr-el-sh 45.0 22.0 1.0 10.0 25.0 2.0 .1
dakahlia 60.0 20.0 1.0 26.0 52.0 1.0
damietta 15.0 8.0 2.0 5.0
sharkia 50.0 28.0 1.0 31.0 43.0 1.0 .1
ismailia 6.0 2.0 4.0 4.0
suez 1.0 1.0
menoufia 21.0 30.0 1.0 24.0 .1 33.0 2.0 .1
kalubia 16.0 7.0 25.0 .1 22.0 1.0
giza 6.0 2.0 40.0 14.0 1.0 .1
beni-suef 1.0 20.0 1.0 15.0 13.0 3.0
fayoum 6.0 20.0 1.0 20.0 17.0 1.0
minia 1.0 41.0 2.0 15.0 35.0 .1 50.0 3.0 .2
assiout 1.0 27.0 1.0 20.0 26.0 35.0 5.0 .1
new-valley 1.0 1.0
sohag 7.0 65.0 3.0 20.0 1.0
quena 3.0 95.0 2.0 8.0
aswan 40.0 8.0 ;
Table alpha(c,cq) 'nutrient content'
n p2o5
urea .46
can-260 .26
can-310 .31
can-335 .335
amm-sulf .206
dap .18 .46
ssp-155 .155
c-250-55 .25 .055
c-300-100 .30 .10 ;
Parameter cn75(*,cq) 'consumption of nutrients 1974-75 (1000 tpy)';
cn75(j,cq) = sum(cf, alpha(cf,cq)*cf75(j,cf));
cn75("total",cq) = sum(j, cn75(j,cq));
display cn75;
$sTitle Transportation Data
Table road(j,*) 'road distances (km)'
abu-kir kafr-el-zt talkha abu-zaabal helwan assiout aswan
alexandria 16 119 187 210 244 607 1135
behera 76 42 120 50 184 547 1065
gharbia 150 20 55 65 122 485 1003
kafr-el-sh 145 20 35 105 162 525 1043
dakahlia 208 58 3 138 152 515 1033
damietta 267 131 66 216 233 596 1114
sharkia 240 78 58 60 110 473 991
ismailia 365 241 146 142 173 536 1054
suez 370 246 298 224 178 541 1059
menoufia 157 33 90 154 109 472 990
kalubia 190 66 81 97 76 439 957
giza 287 133 146 48 9 372 890
beni-suef 359 248 261 163 105 257 775
fayoum 341 230 243 145 88 308 826
minia 384 372 386 288 230 132 650
assiout 616 504 518 420 362 518
new-valley 815 703 717 619 561 199 519
sohag 715 603 617 519 461 99 419
quena 858 746 760 662 604 242 276
aswan 1134 1022 1036 938 880 518 ;
Table rail(i,i) 'interplant rail distances (kms)'
kafr-el-zt abu-zaabal helwan assiout aswan
abu-zaabal 85
helwan 142 57
assiout 504 420 362
aswan 1022 938 880 518 ;
Table impd(i,*) 'import distances (kms)'
barge road
kafr-el-zt 104 6
abu-zaabal 210 .1
helwan 183
assiout 583
aswan 1087 10;
Parameter
muf(i,j) 'transport cost (le per ton): final products'
mufv(j) 'transport cost (le per ton): imported final products'
mui(i,i) 'transport cost (le per ton): interplant shipment'
mur(i) 'transport cost (le per ton): imported raw materials';
rail(i,ip) = rail(i,ip) + rail(ip,i);
road(j,"import-pts") = road (j,"abu-kir");
muf(i,j) = ( .5 + .0144*road(j,i) )$road(j,i);
mufv(j) = ( .5 + .0144*road(j,"import-pts") )$road(j,"import-pts");
mui(i,ip) = (3.5 + .0300*rail(i,ip) )$rail(i,ip);
mur(i) = (1.0 + .0030*impd(i,"barge") )$impd(i,"barge")
+ ( .5 + .0144*impd(i,"road" ) )$impd(i,"road ");
display muf, mufv, mui, mur;
$sTitle Technology Data
Table a(c,p) 'input-output coefficients'
sulf-a-s sulf-a-p nitr-acid amm-elec amm-c-gas
el-aswan -12.0
coke-gas -2.0
pyrites -.826
el-sulfur -.334
sulf-acid 1.0 1.0
ammonia -.292 1.0 1.0
nitr-acid 1.0
electric -50 -75 -231 -1960
bf-gas -609
water -20 -60 -.6 -700
steam -4
+ ssp-155 can-310 can-335 amm-sulf
phos-rock -.62
sulf-acid - .41 -.76
ammonia -.20 -.21 -.26
nitr-acid -.71 -.76
limestone -.12 -.04
ssp-155 1.0
can-310 1.0
can-335 1.0
amm-sulf 1.0
bags -22. -23. -23. -22.
water -6. -49. -49. -17.
electric -14. -19.
steam -.4 -.4 ;
Table b(m,p) 'capacity utilization coefficients'
sulf-a-s sulf-a-p nitr-acid amm-elec amm-c-gas ssp-155 can-310 can-335 amm-sulf
sulf-a-s 1
sulf-a-p 1
nitr-acid 1
amm-elec 1
amm-c-gas 1
ssp 1
c-amm-nitr 1 1
amm-sulf 1;
$sTitle Prices
Parameter pv(c) 'import prices (cif us$ per ton 1975)' / pyrites 17.5
el-sulfur 55
urea 150
can-260 75
can-310 90
can-335 100
amm-sulf 75
dap 175
ssp-155 80
c-250-55 100
c-300-100 130 /;
Table pd(i,c) 'domestic raw material prices'
limestone coke-gas el-aswan phos-rock sulf-acid
* le/ton le/mncf le/mwh le/ton le/ton
kafr-el-zt 5.0
abu-zaabal 4.0
helwan 1.2 16 3
assiout 3.5
aswan 1.2 1 ;
$eolCom //
Parameter pmisc(c) 'miscellanous material costs' / electric .007 // le/kwh
bf-gas .0075 // le/cm
water .031 // le/cm
steam 1.25 // le/ton
bags .28 /; // le/unit
pd(i,cr)$pmisc(cr) = pmisc(cr);
display pd;
Parameter nh3;
nh3("ammonia","helwan") = 31;
$sTitle Capacity Data
Table dcap(i,m) 'design capacity of plants (t per day)'
sulf-a-s sulf-a-p nitr-acid amm-elec amm-c-gas ssp c-amm-nitr amm-sulf
aswan 800 450 1100
helwan 282 172 364 24
kafr-el-zt 200 50 600
assiout 250 600
abu-zaabal 242 227 600 ;
Parameter k(m,i) 'initial capacity (1000 tpy)';
k(m,i) = .33*dcap(i,m);
Scalar
er 'exchange rate' / .4 /
util 'utilization' / na /;
Set
mpos(m,i) 'productive units possibilities'
ppos(p,i) 'process possibilities'
cpos(c,i) 'commodity possibilities'
cposp(c,i) 'commodity production possibilities'
cposn(c,i) 'commodity consumption possibilities'
cposi(c,i,i) 'commodity consumption and production possibilities: interplant'
cposd(c,i) 'domestic raw material purchase possibilities'
cposr(c,i) 'imported input commidity possibilities';
mpos(m,i) = yes$k(m,i);
ppos(p,i) = yes$(sum(m$(not mpos(m,i)), b(m,p) ne 0) eq 0);
ppos("can-310","helwan") = no;
ppos("can-335","aswan") = no;
cposp(c,i) = yes$sum(p$ppos(p,i), a(c,p) gt 0);
cposn(c,i) = yes$sum(p$ppos(p,i), a(c,p) lt 0);
cposi(cs,i,ip) = cposp(cs,i)*cposn(cs,ip);
cposd(cr,i) = yes$(cposn(cr,i)$pd(i,cr));
cposr(cr,i) = yes$(cposn(cr,i)$pv(cr));
cpos(c,i) = cposp(c,i) + cposn(c,i);
display mpos, ppos, cposp, cposn, cpos , cposi, cposd, cposr;
Variable
z(p,i) 'process level (1000 tpy)'
xf(c,i,j) 'domestic shipment activity: final products (1000 tpy)'
xi(c,i,i) 'domestic shipment activity: intermediates (1000 tpy)'
vf(c,j) 'imports: final products (1000 tpy)'
vr(c,i) 'imports: raw materials (1000 tpy)'
u(c,i) 'domestic raw material purchases (units)'
psi 'discounted total cost (1000 le)'
psip 'domestic recurrent cost (1000 le per year)'
psil 'transport cost (1000 le per year)'
psii 'import cost (1000 le per year)';
Positive Variable zl, xf, xi, vf, vr, u;
* define scenario for scenario 1 as stated in reference: no interplant shipments and capacity utilization of 85%
xi.fx(cs,i,ip) = 0;
util = .85;
$sTitle Equations
Equation
obj 'objective function (1000 le discounted)'
ap 'accounting: domestic recurrent cost (1000 le per year)'
al 'accounting: transport cost (1000 le per year)'
ai 'accounting: import cost (1000 le per year)'
mbd(cq,j) 'material balance on demand: nutrient (1000 tpy)'
mbdb(c,j) 'material balance on demand: material (1000 tpy)'
mb(c,i) 'material balance (1000 tpy)'
cc(m,i) 'capacity constraint (1000 tpy)';
obj.. psi =e= psip + psil + psii;
ap.. psip =e= sum((cr,i)$cposd(cr,i), pd(i,cr)*u(cr,i));
al.. psil =e= sum(cf, sum((i,j)$cposp(cf,i), muf(i,j)*xf(cf,i,j)) + sum(j, mufv(j)*vf(cf,j)))
+ sum((cs,i,ip)$cposi(cs,i,ip), mui(i,ip)*xi(cs,i,ip))
+ sum((cr,i)$cposr(cr,i), mur(i)*vr(cr,i));
ai.. psii/er =e= sum((cf,j), pv(cf)*vf(cf,j)) + sum((cr,i)$cposr(cr,i), pv(cr)*vr(cr,i));
mbd(cq,j).. sum(cf, alpha(cf,cq)*( sum(i$cposp(cf,i), xf(cf,i,j)) + vf(cf,j)$pv(cf))) =g= cn75(j,cq);
mbdb(cf,j)$cf75(j,cf).. sum(i$cposp(cf,i), xf(cf,i,j)) + vf(cf,j)$pv(cf) =g= cf75(j,cf);
mb(c,i).. sum(p$ppos(p,i), a(c,p)*z(p,i))
+ sum(ip, xi(c,ip,i)$cposi(c,ip,i) - xi(c,i,ip)$cposi(c,i,ip))
+ vr(c,i)$cposr(c,i) + u(c,i)$cposd(c,i)
- sum(j$cposp(c,i), xf(c,i,j))$cf(c) =g= 0;
cc(m,i)$mpos(m,i).. sum(p$ppos(p,i), b(m,p)*z(p,i)) =l= util*k(m,i);
Model
stat2 / all - mbd /
stat4 / all - mbdb /;
solve stat2 minimizing psi using lp;
Parameter
rxf(i,j,c) 'domestic shipment activity : final products (1000 tpy)'
tds 'total domestic supply : final products (1000 tpy)'
tif 'total import : final product (1000 tpy)'
tl 'transportation load (1000 ton_km)';
rxf(i,j,cf) = xf.l(cf,i,j);
tds = sum((cf,i,j), xf.l(cf,i,j));
tif = sum((cf,j), vf.l(cf,j));
tl("rail") = sum((cs,i,ip), rail(i,ip)*xi.l(cs,i,ip));
tl("road") = sum((cr,i), vr.l(cr,i)*impd(i,"road"))
+ sum((cf,i,j), xf.l(cf,i,j)*road(j,i))
+ sum((cf,j), vf.l(cf,j)*road(j,"import-pts"));
tl("barge") = sum((cr,i), vr.l(cr,i)*impd(i,"barge"));
display mbdb.lo, mbdb.m, mb.m, cc.up, cc.m, rxf, tds, tif, vf.l, z.l, vr.l, u.l, tl;