! Infinite period newsvendor problem with lost sales,
setup cost, and lead time = 1.!(Lost_sales1.lng).
Solved by formulating as a Markov decision problem;
! Keywords: Markov decision process, inventory, lost sales;
SETS:
INVL; ! Possible inventory levels;
ORDER; ! Possible order amounts;
DD: PD; ! Possible demands & probability;
! Our decision transitions: Given a current inventory level, the
next state is the inventory level & order level;
DTRAN(INVL, ORDER): CD, X;
! Probabilistic transitions: given I0 and R0, the demand D gives
the new inventory level I1 = max(0,I0D0) + R, so
R <= I1 <= I0 + R;
PTRAN(INVL,ORDER, INVL) &2 #LE# &3 #AND# &3 #LE# &1 + &2  1 : CP, PR;
! Notation:
X(i,r) = joint probability of entering period
in with inventory i available to satisfy today's demand
and deciding to order an amount r to be delivered tomorrow.
PR(i,r,s)= probability of having an amount s available for tomorrow,
given there is i available today, and amount r on order
for tomorrow.
CD(i,r)= cost of making decision t when state is s,
CP(i,r,s)= expected cost when nature moves state to u given state i,r
PD(d) = probability demand is d1, for d = 1, 2, ...;
ENDSETS DATA:
V = 18; ! Revenue per unit sold;
P = 2; ! Explicit shortage penalty on each lost sale;
H = .7; ! Holding cost/unit per period;
C = 3; ! Purchase cost per unit;
K = 1; ! Fixed order cost;
! Demand distribution. Lowest corresponds to 0 demand;
DD = D0 D1 D2 D3 D4;
PD = .01 .90 .04 .03 .02;
ORDER = R0..R5;
INVL = I0..I7; ! Possible inventory levels. Lowest
corresponds to 0 inventory;
ENDDATA
!;
! The sequence of events each day is:
1) Begin period with an amount i, including order about to
arrive, available to satisfy today's demand,
2) We order an amount r for delivery tomorrow,
3) Order scheduled for today arrives,
3) Demand occurs and revenue is realized,
4) Shortage penalties or holding charges are assessed;
CALC:
! Compute costs of our decisions or deterministic transitions,
note order size is r1;
@FOR(DTRAN(i,r): CD(i,r) = K*(r#GT#1) + C*(r1));
! Compute conditional probabilities and
expected costs of nature's moves, or Probabilistic transitions,
with i = current inventory level, r = order size, s = new
inventory level available tomorrow. Note, indexing starts at 1,
so index 1 corresponds to inventory or demand = 0;
! No stockout today case;
ND = @SIZE(DD);
@FOR(PTRAN(i,r,s)  r #LT# s:
PR(i,r,s) = @IF(i+rs #LE# ND,PD(i+rs),0);
CP(i,r,s) = H *(sr)  V*(i+rs1);
);
! Out of stock today case;
@FOR(PTRAN(i,r,s)  r #eq# s:
PR(i,r,s) = @SUM(DD(u) u #ge# i: PD(u));
@IFC( PR(i,r,s) #GT# 0:
CP(i,r,s) = P*@SUM(DD(u) u #ge# i: PD(u)*(ui))/PR(i,r,s)  V*(i1);
@ELSE
CP(i,r,s) = 0;
);
);
ENDCALC
!Minimize the average cost per period;
MIN=@SUM(DTRAN( i,r): CD(i,r)*X(i,r))
+ @SUM(PTRAN(i,r,s): CP(i,r,s)*X(i,r)*PR(i,r,s));
!The probabilities must sum to 1;
@SUM( DTRAN(i,r): X( i,r)) = 1;
!Rate at which we exit state i = rate of entry to i;
@FOR( INVL(i):
@SUM( DTRAN(i,r): X(i,r))=
@SUM( PTRAN(i0,r0,s1)s1 #EQ# i: X(i0,r0)* PR(i0,r0,i))
);
