Description
Minimizing Total Average Cycle Stock.
Large Model of Type : MIP
Category : GAMS Model library
Main file : stockcc.gms
$title Minimizing Total Average Cycle Stock (STOCKCC,SEQ=225)
$onText
Minimizing Total Average Cycle Stock.
Silver, E A, and Moon, I, A Fast Heuristic for Minimizing Total
Average Cycle Stock Subject to Practical Constraints. Journal
of the Operational Research Society 50 (1999), 789-796.
Keywords: mixed integer linear programming, cycle stock, inventory
$offText
Set
nn 'items' / n1*n48 /
mm 'reorder intervals' / i1*i9 /;
Scalar N 'max total number of replenishments' / 100 /;
Parameter
Y(mm) 'possible number of orders'
/ i1 3, i2 6, i3 9, i4 12, i5 18
i6 36, i7 52, i8 78, i9 156 /
Dv(nn) 'demand rate times unit cost of item nn'
/ n1 20.04, n2 21.72, n3 37.92, n4 54.12
n5 61.80, n6 81.24, n7 94.20, n8 119.40
n9 171.60, n10 208.80, n11 415.27, n12 470.23
n13 1212 , n14 1393.2 , n15 1496.4 , n16 1600
n17 1702.4 , n18 1714.5 , n19 1870.5 , n20 1977.8
n21 2647.12, n22 3143.82, n23 4173 , n24 4347.78
n25 4917 , n26 5048.3 , n27 5397.2 , n28 6692.4
n29 6837.6 , n30 8003.1 , n31 8449.5 , n32 9152
n33 13236.3 , n34 13970 , n35 15327.6 , n36 16368
n37 19765 , n38 20470.3 , n39 23182.2 , n40 25026
n41 31675.6 , n42 56734.2 , n43 69040.4 , n44 75192
n45 97066.5 , n46 99803.2 , n47 105984 , n48 106465 /;
Variable
x(nn) 'number of orders per unit time'
z(nn,mm) 'discrete orders choices'
obj 'objective variable';
Binary Variable z;
Equation
defobj
capacity
defx(nn)
defsos(nn);
defobj.. obj =e= sum(nn, 1.5*Dv(nn)/x(nn));
capacity.. sum(nn, x(nn)) =l= 3*N;
defx(nn).. sum(mm, z(nn,mm)*Y(mm)) =e= x(nn);
defsos(nn).. sum(mm, z(nn,mm)) =e= 1;
x.lo(nn) = Y('i1');
x.up(nn) = Y('i9');
Model stock / all /;
* solve stock minimizing obj using minlp;
$onText
This is the alternative formulation that becomes an easy to solve MIP
model.
First we note that defsos means that exactly one nn index value is
matched with each mm index.
Second, defx says that x(nn) must be equal to Y(mm) corresponding
to this match.
Third, the objective term 1.5*Dv(nn)/x(nn) is therefore equal to
1.5*Dev(nn)/Y(mm) for the selected (nn,mm) match. Since the match
is defined by z, the objective can be redefined using z with the
coefficient 1.5*Dv(nn)/Y(mm), and x is no longer needed.
$offText
Parameter CostZ(nn,mm) 'cost for item nn with order schedule mm';
CostZ(nn,mm) = 1.5*Dv(nn)/Y(mm);
Equation defobjmip;
defobjmip.. obj =e= sum((nn,mm), Costz(nn,mm)*z(nn,mm));
Model stockmip / defobjmip, capacity, defx, defsos /;
solve stockmip miniminzing obj using mip;