! Single product Capacitated lot sizing with backlogging in LINGO.
Decide how much to produce each period of a single
product so as to
Minimise setup, holding, and backlogging costs,
subject to:
each period:
satisfying demand,
not exceeding production capacity,
not exceeding inventory capacity
not exceeding backlogging limit;
! Keywords: Lot sizing, Capacitated lot sizing, Production planning, Backlogging,
Backorder;
SETS:
TIME:
DEM, ! Demand each time period;
MAKE, ! Amount to produce each period;
INV, ! Amount in inventory at end of period;
BKL, ! Amount backlogged at end of period;
Y; ! = 1 if anything is produced in period, else 0;
ENDSETS DATA:
TIME = 1..15;
PCAP = 200; ! Production Capacity per period;
ICAP = 100; ! Inventory upper limit each period;
BCAP = 75; ! Upper limit on backlogging each period;
SC = 280 ; ! Setup cost to produce > 0 in a period;
HC = 2 ; ! Holding cost per unit per period;
BC = 3; ! Backlogging cost per unit per period;
I0 = 9; ! Initial inventory;
DEM = 15 60 130 0 100 200 111 210 5 121 10 10 90 5 5; ! Demands;
! Assume initial inventory is 0;
ENDDATA
!------------------------------------;
! The straightforward formulation;
! The objective;
MIN = SCOST + ICOST + BCOST;
SCOST = @SUM( TIME(t): SC*Y(t));
ICOST = @SUM( TIME(t): HC*INV(t));
BCOST = @SUM( TIME(t): BC*BKL(t));
! Inventory balance constraints;
I0 + MAKE(1) = DEM(1) + INV(1) - BKL(1); ! Period 1 starts with I0 inventory;
@FOR( TIME(t) | t #GT# 1: ! Subsequent periods;
INV(t-1) - BKL(t-1) + MAKE(t) = DEM(t) + INV(t) - BKL(t);
);
! Assume all demand must be satisfied at the end;
BKL(@SIZE(TIME)) = 0;
@FOR( TIME(t):
! Inventory capacity;
INV(t) <= ICAP;
! Backlogging limit;
BKL(t) <= BCAP;
! Production capacity and setup forcing;
MAKE(t) <= @SMIN( PCAP, @SUM( TIME(s): DEM(s)))*Y(t);
! Make the Y's binary (0 or 1);
@BIN( Y(t));
);
|