! Perishable product inventory management;
! Our product has a finite shelf life, after which it goes to waste.
We must order product in batches or cases. Not all demand need
be satisfied, so that there may be lost sales;
! Keywords: Perishable inventory, Shelf life, Lot sizing, Lost sales;
SETS:
Period: EI, Waste, Order, Sales, Demand, Y;
ENDSETS DATA:
Life = 2; ! Shelf life = number periods in which product
can be sold, before it is outofdate;
FCost = 200; ! Fixed cost of placing an order;
SPrice = 75; ! Selling price per unit;
PCost = 35; ! Purchase cost per unit;
InCase = 12; ! Case size or batch size for ordering, assume >= 1;
Demand = 33, 21, 63, 32, 13, 17, 53, 15;
ENDDATA
! Order(t) = number cases ordered and arriving at
beginning of period t,
Y(t) = 1 if we place an order to arrive in period t,
EI( t) = units in ending inventory in period t,
Waste(t) = number units going to waste/perish in period t;
! Maximize revenues  ( cost/unit of purchase + fixed cost of purchases);
MAX = @SUM( Period(t): SPrice*Sales(t)  PCost*InCase*Order(t)
 FCost*Y(t));
! For period 1, Initial inventory is 0;
EI(1) + Waste(1) = InCase*Order(1)  Sales(1);
Sales(1) <= Demand(1);
Order(1) <= Y(1)* @SUM( Period(s)  s #LE# Life: Demand(s));
! Subsequent periods;
@FOR( Period( t)  t #GT# 1:
EI(t) + Waste(t) = EI(t1) + InCase*Order(t)  Sales(t);
Sales(t) <= Demand(t);
! (Useful) Ending inventory can be no greater than
demand over its shelf life. Any more goes to waste;
EI(t) <= @SUM( Period(s)  t #LE# s #AND# s #LT# t+Life: Demand(t));
! Where p = number periods of shelf life;
! Fixed cost forcing (this could be tighter);
Order(t) <= Y(t)* @SUM( Period(s)  t #LE# s #AND# s #LT# t+Life: Demand(t));
);
@FOR( Period(t):
@GIN( Order(t));
@BIN( Y(t));
);
