vietman.gms : Vietoriscz Manne Fertilizer Model 1961
This model is designed to find the optimal size and location
of ammonia and fertilizer plants. Three formulations are suggested.
MIP, expanded LP and enumeration are used.
Reference:
- Manne, A S, and Vietoriscz, T, Chemical Processes, Plant Location, and Economies of Scale. In Manne, A S, and Markowitz, H M, Eds, Studies in Process Analysis. John Wiley and Sons, New York and London, 1963, p. 136.
Large Model of Types: MIP rmip
$Title Vietorisz/Manne Fertilizer Model 1961 (VIETMAN,SEQ=30)
$Ontext
This model is designed to find the optimal size and location
of ammonia and fertilizer plants. Three formulations are suggested.
MIP, expanded LP and enumeration are used.
Manne, A S, and Vietoriscz Thomas, Chemical Processes, Plant Location,
and Economies of Scale. In Manne, A S, and Markowitz, H M, Eds,
Studies in Process Analysis. John Wiley and Sons, New York and London,
1963, p. 136.
$Offtext
Sets i sources of ammonia and fertilizer / 0*5 /
id(i) domestic sources - plants / 1*5 /
k demand centers / 1*12 /
Alias (i,j),(id,jd)
Table fc(i,*) fixed cost of plant erection
ammonia fertilizer
1 1760 810
2 1656 951
3 1626 754
4 1784 856
5 1782 852
Table c(i,j) production and shipping cost for ammonia
1 2 3 4 5
0 56.0 47.4 47.6 54.4 51.0
1 20.4 33.6 34.5 26.9 29.5
2 33.4 20.2 26.7 31.3 28.1
3 35.3 27.7 21.2 35.0 32.2
4 41.8 46.4 49.1 35.3 42.1
5 43.0 41.8 44.9 40.7 33.9
Table d(j,k) production and shipping cost for fertilizer
1 2 3 4 5 6 7 8 9 10 11 12
0 86.1 76.4 76.8 87.0 83.6 90.3 75.4 76.4 81.2 96.4 82.4 86.4
1 32.2 44.0 45.8 31.5 34.1 42.0 43.0 40.3 37.8 42.9 36.6 30.8
2 36.6 24.4 29.2 37.6 34.2 41.0 26.1 24.2 29.9 48.9 31.9 37.6
3 37.0 27.9 23.1 41.3 38.4 40.9 24.7 26.8 29.6 52.8 32.6 41.3
4 38.5 41.9 48.0 23.2 32.2 48.5 44.6 44.1 43.1 34.5 42.4 28.9
5 44.0 35.3 41.1 33.2 29.8 54.1 37.7 37.1 42.8 44.6 44.4 32.6
Parameter r(k) fertilizer demand / 1 9.2, 7 168.6
2 59.9, 8 50.0
3 95.8, 9 34.0
4 185.3, 10 11.1
5 344.1, 11 109.5
6 66.1, 12 47.0 /
Scalar bigm; bigm = sum(k, r(k)); Display bigm;
$Stitle model
Variables x(i,jd) ammonia shipment
y(j,k) fertilizer shipments
u(i,j,k) tagged product shipments
z(jd) fertilizer decision
w(id) ammonia decision
tc total cost
Positive Variables x, y, u;
Binary variables z, w;
Equations fd(k) final demand balance
fd1(k) final demand balance (tagged)
ab(jd) ammonia balance
ia(id) integer constraint ammonia
ia1(id,k) integer constraint ammonia (tagged)
ifu(jd) integer constraint fertilizer
ift(jd,k) integer constraint fertilizer (tagged)
ta total cost balance
ta1 total cost balance (tagged) ;
$Double
ab(jd).. sum(i, x(i,jd)) =g= sum(k, y(jd,k));
fd(k).. sum(j, y(j,k)) =g= r(k);
ia(id).. bigm*w(id) =g= sum(jd, x(id,jd));
ifu(jd).. bigm*z(jd) =g= sum(k, y(jd,k));
ta.. tc =e= sum(id, fc(id,"ammonia")*w(id)) + sum(jd, fc(jd,"fertilizer")*z(jd))
+ sum((i,jd), c(i,jd)*x(i,jd)) + sum((j,k), d(j,k)*y(j,k));
fd1(k) .. sum((i,j), u(i,j,k)) =g= r(k) ;
ia1(id,k).. r(k)*w(id) =g= sum(jd, u(id,jd,k)) ;
ift(jd,k).. r(k)*z(jd) =g= sum(i, u(i,jd,k)) ;
ta1.. tc =e= sum(id, fc(id,"ammonia")*w(id)) + sum(jd, fc(jd,"fertilizer")*z(jd))
+ sum((i,j,k), (c(i,j)+d(j,k))*u(i,j,k));
$Single
Models vietmip mip version / fd,ab,ia,ifu,ta /
viettag expanded version / fd1,ia1,ift,ta1 /
Solve vietmip minimizing tc using mip;
Solve viettag minimizing tc using rmip;
$Stitle enumeration
Sets c32 labels 1 to 32 / 1*32 /
type product types / ammonia, fertilizer /
Alias (c32,c32p)
Parameters pow2(id) powers of 2
com32(c32,i) combinations
tfix(c32,type) total fixed cost at location
minamm(c32,i) minimum ammonia cost
minfer(c32,c32p) minimum fertilizer cost
fccom(c32,c32p) fixed cost combinations
tcost(c32,c32p) total costs
best lowest cost
best3p(c32,c32p) best combinations within 3 percent;
pow2(id) = power(2,card(id)-ord(id));
com32(c32,i) = 1;
com32(c32,id) = mod(floor((ord(c32)-1)/pow2(id)+.001),2);
tfix(c32,type) = sum(id, fc(id,type)*com32(c32,id));
minamm(c32,id) = smin(i$com32(c32,i), c(i,id));
minfer(c32,c32p) = sum(k, r(k)*smin(i$com32(c32p,i), d(i,k) + minamm(c32,i)));
fccom(c32,c32p) = tfix(c32,"ammonia") + tfix(c32p,"fertilizer");
tcost(c32,c32p) = fccom(c32,c32p) + minfer(c32,c32p);
best = smin((c32,c32p), tcost(c32,c32p));
best3p(c32,c32p) = tcost(c32,c32p)$(tcost(c32,c32p) le 1.03*best);
Display pow2, com32, tfix, minamm, minfer, fccom, tcost, best, best3p;