# The Economic Order Quantity Model with BackloggingΒΆ

We consider an Economic Order Quantity (EOQ) model with backlogging. This is like the normal EOQ model, but we do not order when the inventory level is 0, but equal to some level \(s\leq 0\). This extra degree of freedom should make the average cost per unit time smaller provided \(s\) is chosen appropriately. We are going to check this on this page.

We use the following notation:

\[\begin{split}\begin{split}
Q &= \text{ordering amount} \\
D &= \text{Demand rate} \\
s &= \text{Order level} \\
h &= \text{holding cost per item per unit time} \\
b &= \text{backlogging cost per item per unit time} \\
K &= \text{Ordering cost}
\end{split}\end{split}\]

```
from __future__ import division
from math import sqrt
def averageCost(Q, D, s, h, b, K):
I = (Q-s)/2. # average inventory level
B = s/2. # average backlog level
TI = (Q-s)/D # Time the inventory level is positive
TB = s/D # Time the inventory level is negative
T = TI + TB # Total cycle time
cI = h*I*TI # Total holding cost
cB = b*B*TB # Total backlogging cost
cT = cI + cB + K # Total cycle cost
cA = cT/T # Average cost
return cA
D = 4
s = 1
h = 1
b = 3
K = 10
Q = 8.
print("Average cost with backlogging: ", averageCost(Q, D, s, h, b,
K))
print("Average cost without backlogging: ", averageCost(Q, D, 0, h, b,
K))
```

```
Average cost with backlogging: 8.25
Average cost without backlogging: 9.0
```

The cost with \(s=0\) should be minimal when we order the optimal order quantity, which is given by the famous EOQ formula.

```
def EOQ(D, h, K):
return sqrt(2.*D*K/h)
Q = EOQ(D, h, K)
print(averageCost(Q-1, D, 0, h, b, K))
print(averageCost(Q-0.5, D, 0, h, b, K))
print(averageCost(Q, D, 0, h, b, K))
print(averageCost(Q+0.5, D, 0, h, b, K))
print(averageCost(Q+1, D, 0, h, b, K))
```

```
9.00721033980928
8.959074844027372
8.94427190999916
8.957507445908249
8.99455211196118
```

The minimal cost that can be achieved is given by the formula

\[\begin{split}g^* &= \sqrt{2DK bh/(b+h)} \\
S^* &= g/h\\
s^* &= -g/b\end{split}\]

```
g = sqrt(2.*D*K*b*h/(b+h))
print("g^* = ", g)
print("s^* = ", -g/b)
print("S^* = ", g/h)
```

```
g^* = 7.745966692414834
s^* = -2.581988897471611
S^* = 7.745966692414834
```