(!******************************************** file mrp2.mos ````````````` Example from Voss/Woodruff: Supply Chain Management, Springer 2002 (c) 2002 Dash Associates author: S. Heipcke, July 2002 *********************************************!) model "MRP2" uses "mmxprs" ! Use Xpress-Optimizer for solving declarations TT: range ! Time Buckets PP: set of string ! SKUs KK: set of string ! Resources R: array(PP,PP) of real ! Number of SKUs i to produce one SKU j D: array(PP,TT) of real ! External demand for an item in a period I: array(PP) of real ! Beginning inventory of SKU i U: array(PP,KK) of real ! Fraction of res. k needed by one SKU i LT: array(PP) of real ! Lead Time of item i end-declarations initializations from 'mrp.dat' R D I U LT end-initializations finalize(TT); finalize(PP) ! Finalize index sets declarations x: array(PP,TT) of mpvar ! Number of SKUs to produce end-declarations Obj:= sum(i in PP,t in TT) (getsize(TT) - t + 1) * x(i,t) ! Demand and materials requirement forall(i in PP,t in TT) MatReq(i,t):= sum(r in TT | r <= t - LT(i)) x(i,r) + I(i) >= sum(r in TT | r <= t) ( D(i,r) + sum(j in PP) R(i,j)*x(j,r) ) ! Resource capacity limits forall(t in TT,k in KK) Capacity(t,k):= sum(i in PP) U(i,k)*x(i,t) <= 1 ! Non-negativity constraints forall(i in PP,t in TT) x(i,t) >=0 ! Solve the problem minimize(Obj) ! Solution printing writeln("Objective value: ", getobjval) writeln("Production plan:") write("Period") forall(t in TT) write(strfmt(t,5)) writeln forall(i in PP) do write(i) forall(t in TT) write(strfmt(getsol(x(i,t)),5)) writeln end-do end-model