Description
Materials Requirement Planning Model.
Small Model of Types : MIP lp
Category : GAMS Model library
Main file : mrp2.gms
$title Materials Requirement Planning (MRP) Formulations (MRP2,SEQ=207)
$onText
Materials Requirement Planning Model.
Voss, S, and Woodruff, D L, Introduction to Computational
Optimization Models for Production Planning in a Supply Chain.
Keywords: linear programming, mixed integer linear programming, production
planning, material requirement planning
$offText
Set
PP 'SKU numbers' / AJ8172, LQ8811, RN0098, NN1100, WN7342 /
TT 'time buckets' / 1jan01*8jan01 /
KK 'resources' / HR-101, MT-402 /;
Alias (TT,TTp), (PP,PPp);
Table R(PP,PP) 'number of i to make one j'
AJ8172 LQ8811 RN0098 NN1100 WN7342
AJ8172
LQ8811 2
RN0098 1
NN1100 1
WN7342 1 ;
Table demand(PP,TT) 'external demand for an item in a period'
1jan01 2jan01 3jan01 4jan01 5jan01 6jan01 7jan01 8jan01
AJ8172 20 30 10 20 30 20 30 40
LQ8811
RN0098
NN1100
WN7342 ;
Parameter
lev(PP) 'level in the production tree'
TD(PP) 'total demand extern plus implicit';
Scalar runlev 'level iteration' / 0 /;
* Root node get level 0, all other get -1
lev(PP)$(sum(PPp,R(PP,PPp))) = -1;
TD(PP)$(lev(PP) = 0) = sum(TT,demand(PP,TT));
loop(PP$(lev(PP) = runlev),
runlev = runlev + 1;
lev(PPp)$R(PPp,PP) = runlev;
TD(PPp)$R(PPp,PP) = sum(TT,demand(PPp,TT)) + R(PPp,PP)*TD(PP);
);
Parameter
LT(PP) 'lead time'
I(PP) 'beginning inventory'
LS(PP) 'lot size';
Table SKUdata(PP,*)
LT LS I
AJ8172 2 100 90
LQ8811 3 400 300
RN0098 4 100 100
NN1100 1 1 0
WN7342 12 1000 900;
LT(PP) = SKUdata(PP,'LT');
LS(PP) = SKUdata(PP,'LS');
I(PP) = SKUdata(PP, 'I');
Table U(PP,KK) 'fraction of resource k needed by one i'
HR-101 MT-402
AJ8172 0.00208333 0.000104166
LQ8811 0.000333333
RN0098
NN1100 0.000001000;
Parameter M(PP) 'big M for equation defprod';
M(PP) = max(TD(PP),LS(PP));
Binary Variable d(PP,TT) 'production indicator';
Positive Variable x(PP,TT) 'number of SKUs to produce';
Variable obj;
Equation
defobj 'objective function'
defreq(PP,TT) 'material requirement'
deflot(PP,TT) 'lot size'
defprod(PP,TT) 'production indicator'
defcap(TT,KK) 'capacity';
defobj.. obj =e= sum((PP,TT), (card(TT) - ord(TT) + 1)*x(PP,TT));
defreq(PP,TT).. sum(TTp$(ord(TTp) <= ord(TT) - LT(PP)), x(PP,TTp)) + I(PP)
=g= sum(TTp$(ord(TTp) <= ord(TT)), demand(PP,TTp)
+ sum(PPp, R(PP,PPp)*x(PPp,TTp)));
deflot(PP,TT).. x(PP,TT) =g= d(PP,TT)*LS(PP);
defprod(PP,TT).. x(PP,TT) =l= d(PP,TT)*M(PP);
defcap(TT,KK).. sum(PP, U(PP,KK)*x(PP,TT)) =l= 1;
Model
mrp / defobj, defreq, deflot, defprod /
mrp2 / defobj, defreq, defcap /
mrp2l / defobj, defreq, deflot, defprod, defcap /;
option optCr = 0.0;
solve mrp minimizing obj using mip;
solve mrp2 minimizing obj using lp;
solve mrp2l minimizing obj using mip;