! Infinite period newsvendor problem with lost sales,
setup cost, and lead time = 0.!(Lost_sales0.lng).
Solved by formulating as a Markov decision problem;
! Keywords: Markov decision process, inventory, lost sales;
SETS:
INVL; ! Possible inventory levels;
DD: PD; ! Possible demands & probability;
! Our decisions can only raise inventory;
DTRAN(INVL,INVL)&1 #LE# &2: CD,X;
! Nature's decisions can only lower inventory;
PTRAN(INVL,INVL)&1 #GE# &2: CP,PR;
! X(i,ir) = joint probability of entering period
in state i and ordering enough to move to state ir.
PR(ir,s)= conditional probability of nature moving
the state to s, given that we had moved
the state to ir.
CD(i,ir)= cost of making decision ir when state is i,
CP(ir,s)= expected cost when nature moves state to s given state ir
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 .02 .03 .04;
INVL = I0..I9; ! Possible inventory levels. Lowest
corresponds to 0 inventory;
ENDDATA
!;
! The sequence of events each period is:
1) Begin period with inventory level i,
2) we order enough to raise inventory to ir,
3) Demand occurs with unsatisfied demand lost,
4) Revenue, shortage penalties and holding charges are assessed;
CALC:
! Compute costs of our decisions;
@FOR(DTRAN(i,ir) : CD(i,ir) = K*(i #LT# ir) + C*(iri));
! Compute conditional probabilities and
expected costs of nature's probabilistic moves. Note, indexing
starts at 1, so index 1 corresponds to inventory or demand = 0.
Not out of stock case;
@FOR(PTRAN(ir,s)  s #gt# 1:
PR(ir,s) = @SUM(DD(i) i1 #eq# (irs): PD(i));
CP(ir,s) = H *(s1)  V*(irs);
);
! Out of stock case;
@FOR(PTRAN(ir,s)  s #eq# 1:
PR(ir,s) = @SUM(DD(i)i #ge# ir: PD(i));
);
@FOR(PTRAN(ir,s)  s #eq# 1 #and# PR(ir,s) #gt# 0:
CP(ir,s) = P*@SUM(DD(i)i #ge# ir: PD(i)*(iir))/PR(ir,s)  V*(ir1);
);
@FOR(PTRAN(ir,s)  s #eq# 1 #and# PR(ir,s) #eq# 0:
CP(ir,s) = 0;
);
ENDCALC
! Decision variables:
X(i,ir) = probability inventory level is s and we order
enough to bring it up to t, i.e., order ts.
Typically, for each s, there will only be one t
such that X(i,ir) > 0;
!Minimize the average cost per period;
MIN=@SUM(DTRAN(i,ir): CD(i,ir)*X(i,ir))
+@SUM(DTRAN(i,ir): @SUM(PTRAN(ir,s): CP(ir,s)* X(i,ir)*PR(ir,s)));
!The probabilities must sum to 1;
@SUM( DTRAN(i,ir): X(i,ir)) = 1;
!Rate at which we exit state i = rate of entry to i;
@FOR( INVL(i):
@SUM( DTRAN(i,ir): X(i,ir))=
@SUM( DTRAN(j,jr): @SUM(PTRAN(jr,i):X(j,jr)*PR(jr,i)));
);
