In a previous post I showed how to write and solve a unit loss function G(k). Here I show how to use it.

Here I solve some (s,Q) inventory models. These models have a variable Q: order quantity. It is sometimes argued to use the EOQ order quantity for this. EOQ stands for Economic Order Quantity. In the model I try to see how much difference it makes when we use this EOQ or just solve for Q in the (s,Q) models directly.

The results are:

---- 155 PARAMETER results EOQ Qendog Qeoq EOQ .Q 5200.000 |

We can see for two inventory models (Cost per Stockout Event – CSOE and Cost per Item Short – CIS) the differences in Q and s are significant. However the effect on total cost and relevant cost is more limited: things are pretty flat out there.

In practice formulas based on the first order conditions are used to solve these inventory models. However I think there is a case to be made to look at the original cost functions and optimize these directly. This relates more to the original problem and also we may be a little bit more flexible if we want to add a few more wrinkles. In some cases there are closed solutions, e.g. the well known EOQ formula is:

In the model below again we use the original cost function and minimize that for Q. Note that for other cases it may not be that easy to find closed solutions.

$ontext We evaluate two inventory models: (1) Cost per Stockout Event (CSOE) Model (2) Cost per Item Short (CIS) Model It is sometimes suggested to input Q*=EOQ into these models opposed to optimizing directly for Q. Here we try to see how much a difference this makes. $offtext scalars D 'mean demand ($/year)' /62000/ sigma_D 'standard deviation of demand' /8000/ c 'cost per item ($/item)' /100/ cK 'order cost ($/order)' /3270.9678/ ci 'annual inventory cost' h 'holding charge (% of unit cost)' /0.15/ mu_dl 'mean over lead time' sigma_dl 'sigma over lead time' L 'lead time (days)' /14/ B1 'CSOE penalty' /50000/ cs 'Item short cost' /45/ Qeoq 'EOQ' ; ci = h*c; mu_dl = D/(365/L); sigma_dl = sigma_D/sqrt(365/L); parameter results(*,*,*); *------------------------------------------------------ * Deterministic EOQ model *------------------------------------------------------ variables tc 'total cost' Q 'order quantity' ; * prevent division by zero Q.lo = 0.1; equations costdef1 'total cost calculation for simple deterministic case' ; costdef1.. tc =e= c*D + cK*(D/Q) + ci*(Q/2); model eoq /costdef1/; solve eoq minimizing tc using nlp; Qeoq = Q.l; results('EOQ','Q','EOQ') = Qeoq; *------------------------------------------------------ * Cost per Stockout Event Model *------------------------------------------------------ positive variables k PStockout 'P[x>=k]' s 'order point' ; equations costdef2 'CSOE total cost function' cdf 'this implements P[x>=k]' sdef 'calculation of order point s' ; costdef2.. tc =e= c*D + cK*(D/Q) + ci*(Q/2+k*sigma_dl) + B1*(D/Q)*PStockOut; cdf.. Pstockout =e= 1-errorf(k); sdef.. s =e= mu_dl + k*sigma_dl; model csoe /costdef2,cdf,sdef/; *------------------------------------------------------ * Cost per Item Short (CIS) Model *------------------------------------------------------ variables G 'unit loss function' ; equations costdef3 'CIS total cost function' Gdef 'this implements G(k)' ; costdef3.. tc =e= c*D + cK*(D/Q) + ci*(Q/2+k*sigma_dl) + cs*sigma_dl*G*(D/Q); Gdef.. G =e= 1/sqrt(2*pi)*exp(-0.5*sqr(k)) - k * (1-errorf(k)); model cis /costdef3,sdef,Gdef/; *------------------------------------------------------ * Results with Q endogenous *------------------------------------------------------ solve csoe minimizing tc using nlp; results('CSEO','Total Cost','Qendog') = TC.L; results('CSEO','Inv+Short Cost','Qendog') = TC.L-c*D; results('CSEO','Q','Qendog') = Q.L; results('CSEO','s','Qendog') = s.L; results('CSEO','k','Qendog') = k.L; solve cis minimizing tc using nlp; results('CIS','Total Cost','Qendog') = TC.L; results('CIS','Inv+Short Cost','Qendog') = TC.L-c*D; results('CIS','Q','Qendog') = Q.L; results('CIS','k','Qendog') = k.L; results('CIS','s','Qendog') = s.L; *------------------------------------------------------ * Results with Q fixed to EOQ *------------------------------------------------------ Q.fx = Qeoq; solve csoe minimizing tc using nlp; results('CSEO','Total Cost','Qeoq') = TC.L; results('CSEO','Inv+Short Cost','Qeoq') = TC.L-c*D; results('CSEO','Q','Qeoq') = Q.L; results('CSEO','k','Qeoq') = k.L; results('CSEO','s','Qeoq') = s.L; solve cis minimizing tc using nlp; results('CIS','Total Cost','Qeoq') = TC.L; results('CIS','Inv+Short Cost','Qeoq') = TC.L-c*D; results('CIS','Q','Qeoq') = Q.L; results('CIS','k','Qeoq') = k.L; results('CIS','s','Qeoq') = s.L; display results; |