Go back to brite-sparks home page

Virtually pools commonly held spare parts data to provide inventory reductionsA powerful venue for the sale of component parts, complete machines and production linesAsset & Compliance Tracking Application Download comprehensive selection of brite-sparks promotional materials including 90day free trial of IOS our inventory optimisation and pooling software  Back to home  Tell your friend or colleagues about this site  Inventory, Classifieds, Spare Parts,  Consultant and Site Search  


White papers

BY: Richard D Henshell brite-sparks.com, Strelley Hall, Nottingham NG8 6PE, UK 
(Tel 0115 9061 -200, fax -251 email info@strelley.com)

The costs of maintaining inventory can be reduced dramatically by approaching the problem in the right way. In the case of regularly used items, the correct choice of the point at which re-ordering takes place has an important bearing on total costs. This note shows how to select the optimum re-order level. The optimum is shown to depend on various parameters and a formula approach is given. 

Introduction to the important variables for stock level optimisation

Before introducing the relevant variables, it may be appropriate to study the limitations to the analysis which are presented in Appendix 1.

Time plays a central role in all of what is presented in this note. We shall use a day as the basic unit of time for the remainder of this note except where specifically stated. But almost all the argument is presented so that if a different time unit is appropriate then it would be easy to adapt the arguments. The unit of time could be for example one hour, one week, one month or one year. Most of the applications will be industrial and commercial so we shall only consider working days to be relevant and there will therefore be 250 working days per year. With the time unit chosen we assume that all events occur simultaneously within that time unit. That is, any delivery into stock and use on that day occur at the same instant.

If the delivery always occurs before any need that day then there will be no problem: however if the need always occurs before the delivery then the delivery time needs to be one larger than its obvious value. If the two events are both random through the day then the delivery time needs to be increased by 0.5.

The rate of use
The next important variable is the average rate of use. We shall say that is a units per day. When we are concerned with stock replenishment the value of a may be anything from say 0.1 < a < 10,000. When we are concerned later with rarely needed spare parts the value of a will be smaller, say 0.00001 < a < 0.01; in such cases it will often be easier to think of the inverse 1/a which may be in the range 100 < 1/a < 10000 days per item. 

Ranges of the value of the average rate of use a items/day

The extreme largest value of 1/a might occur when there is a key component to a machine which is quite critical to the function of the machine and it is likely to fail once every 40 years. If the cost of failing to operate some plant which depends on the spare part is very high indeed it might still be worth holding stock but perhaps by pooling between different users.

In this note we shall only be concerned with the right half of the diagram. The left half is the subject of another paper.

The delivery time
The next important variable is the time to get a delivery, d. Sometimes there will be a certainty of this delivery: 

Table 1 Some possibilities for the variation of the delivery time, d

Method  Nature and remarks Analytical treatment
Fixed  Delivery always happens a fixed time after order Use Constant d, the basic method of this paper
Rather fixed but with some variation There are random variations in d which are relatively small compared with its value Use d but with a standard deviation sd in its value
Poisson If the delivery has not yet arrived then its probability of arrival in the next small unit of arrival is a constant A neat assumption mathematically because it mirrors the rate of use but is not very likely in practical terms Easy mathematically but not covered here
Regular intervals For example: delivery always happens on Fridays and in the same week if the order arrives by 12.00 on Wednesdays Each model has to be specifically programmed and is beyond the scope of a general paper. 
For example many suppliers will have a fixed rota and if an order is in hand by a particular time it is virtually certain that the items will be on the next delivery which leaves at least one day later than the date of order. On the other hand, there may be a random element and we shall refer to the standard deviation, s, from the average delivery time, d. As an example, if the average delivery time is 20 days and the standard deviation is 1.5 days then 1.5 is the most likely root mean square variation from 20 days. A statistical result which is often used is that there is a 95% certainty that the error from the average will be 2s or in our case 3 days either side of the mean. Obviously as d increases there is a need for greater stock. Similarly as a increases the stock need will also increase.

The cost parameters
There are now two cost parameters to consider. The first is the cost of holding one unit in stock for a unit time, S. S will have to include all the effects such as rent of shelf space, security, cost of obsolescence, insurance, cost of capital and so on. As S increases, it becomes more likely that the optimum strategy is to reduce the average stock level and risk running out of stock. The other cost parameter is the cost, E, of being empty and failing to have stock when it is needed. As E increases it is important to have adequate stock to reduce the chances of running out of stock. Therefore the two cost parameters, E, S, are working in opposite directions and we can see the need for an optimisation. We shall say that the cost, E, of running out of stock is a charge which is made each day we are out of stock and is independent of the number of requests on that day.

The size of the delivery
Often we shall have to order a number of items at once in order to secure a good price or there may be a minimum order level to obtain any delivery. We shall assume that the delivery is always in a batch of size n which is fixed for all time.


Order size 2 gives the best optimum.
We may wish to examine the best order size. As an example let us assume we can order in batches of 100 or 500 and that the rates we have to pay are different between these two cases. We take the n = 100 case and find the optimum order point calculating the cost of holding stock. We then repeat for n = 500 and minimise the stock holding cost again. It is certain that the total stock holding cost will be greater if n = 500. To decide whether it is worth choosing the n = 500 size of order we need to establish whether the saving on purchase and delivery price exceeds the extra cost of holding. 

The last parameter to introduce for the moment is r, the point at which we shall re-order the items. We will be trying to find values of r so that the total average cost is minimised.

Optimum re-order points

We now have enough variables to examine the first situation. The variables can be combined to some non-dimensional groups. The first is concerned with the costs and we shall define 

B = S.n/(E.a)

The value of B expresses the relative cost of holding stock compared with the cost of running out. Typical values of B will be in the range 0.0001 to 0.1. At the lower end of the range stock is cheap to hold and the cost of failing to supply an item when needed is relatively rather high.


The other non-dimensional number which is important is A, the product of the average rate of use, a, and the average time to deliver, d. 

A = a.d

A is therefore the number of units which one would expect to use during the delivery period. Note the word "expect". If everything were perfectly certain there would be no need for this present note. The situation with a certainty of delivery and regular use is shown in the figure.

IA is not the number of items used during the period of waiting for a delivery but the most likely 
value of the number used. It is because there will be some variability in the number used that we shall probably end up having more items in stock at the point of re-ordering than those necessary
if everything had been as regular as clockwork. The real purpose of this present work on re-ordering is to consider the variations of use rate to arrive at a cost-minimised value of r in the long run.

There are two components to the total cost of holding a stock of the items. The first is the average cost of holding the stock over a long time. The second is the average cost of failure to deliver due to the stock being used up. To optimise the re-order levels we consider the total cost which is the sum of these two over a long time. 

It is now clear before considering any calculations that:

If B is large then it may never be worth holding any stock: it is better not to be in business to supply this item. In such cases there is no value of the parameter r, the stock level at which re-ordering will take place, which gives a better result than never holding any stock at all. Depending on the value of A, there is no optimum if B is greater than about 0.2. This is not an absolute statement because if the stock is not worth holding and the business is not worth conducting at all then probably the cost of failure disappears as well. It is necessary to consider the business case from first principles which is beyond the scope of this note for a particular case.

As B becomes smaller there is a re-order level at which the total cost is minimised as r is varied.

When B is small then the first guess at the re-order level r is r = A = a.d 

When a better statistical analysis is made, and the delivery time is constant, the optimum stock level is given approximately by 

r = ad.(1 + [-loge{Sn/(Ea))(2p) /ad]) 

The complete derivation of formulae like this is given in Appendix 3 while the details of computer implementation are covered in Appendix 2..

If the delivery time d is variable and the standard deviation of it is sd then the r given above needs to be adapted to the larger value r* given approximately by the following formula.

r* = (r2 + sd 2)

Re-order points dependent on confidence levels rather than optimisation`

The analysis so far has been based on minimising the total cost of both stock holding and failure to supply. This may be a little difficult for some stock holders to come to terms with. An alternative approach is to select a confidence level so that by re-ordering at the level, r, there is a particular confidence level that the stock will not run out. Naturally this is similar to what is built into the calculation given already. The process chooses a value of r and this gives rise to a particular confidence level of not running out of stock before the next delivery. The confidence level, L, does not depend upon the cost parameters C,E or the delivery size n but only on A = a.d

The following table gives values of r as a function of A,L.

The table is based on the delivery time being a constant. If there is a variation in d then the value of r to achieve the required confidence level is increased by a little.

Table 2 giving values of the re-order level, r for different values of A, which will achieve at least the required 
confidence level, L 

L is the confidence level that the stock will not run out before re-stocking expressed as a percentage

A is the product of the average rate of use, a and the delivery time d

Some example results

For all the results, unless the contrary is stated, the values were assumed to relate to the following common parameters

Time unit = 1 day
Cost of one item = 200
Rate of use a = 5/day
Delivery time d = 5 days
Standard deviation of delivery time sd = 1 day
Cost of keeping one item in stock for one day S = 0.1/day
Cost of failure to supply in one instance E = 100
Non-dimensional parameter ad = a a = 25
Size of supply, n n = 80
Value of B parameter B = 0.016
Optimum reorder level with these parameters
and with delivery period held constant r = 33.5 (but use 34) 
Optimum reorder level with these parameters
but with variability of delivery period r = 36.1 (but use 36)
Probability of no stock-out during delivery
if delivery period is constant and 
re-order level is 34 L = 7%
Probability of no stock-out during 36 days
if delivery period is variable L = 7%
Reorder level with L = 99% r = 50

The graph below shows the components of cost. The rising curves (2 and 3) show the cost of storage and the decreasing curve (4) shows the cost penalty of failing to supply. The thicker curve (1) shows the total cost from the two components. The storage cost curve (2) is based on an approximation which enables easier calculation of the optimum and (3) which is a more exact form. The difference between the curves is so small, especially in the region of the value of r which gives minimum total cost that this difference is negligible. 

We can now see that if the cost of storage rises while all other parameters are unchanged, that there will still be a local minimum of the total cost but the global minimum will occur when the stock is zero. This is effectively saying that it is not worth entering the business of stocking the item.

Some further cases are shown on the graphs below indicating how the cost varies with r. 

Re-order level, r

Re-order level, r

Re-order level, r

Re-order level, r

Re-order level, r

Re-order level, r


1. For the present, when the delivery time is known exactly, the re-order level should be taken as
r = ad.(1 + [-loge{Sn/(Ea)(2p)}/(ad)]) 

A more accurate form for r requires iteration.

2. The expected sensible range of B is 0.0001 to 1/ad

3. Especially when B is small, setting the re-order level too high is generally much less damaging than setting it too low

4. When B > 1/ad, the minimum of the total cost as the re-order level varies is a weak local minimum and as Sn/Ea further increases it is better not to do any business and not stock the item.

5. When the delivery time is variable, the optimum re-order level increases a little. 

Appendix 1 Limitations of the stock re-order level analysis

There are some limitations in the foregoing which are given below. Since they are not included in the analysis, the reader will need to consider whether they are likely to affect the results which are sought. 

1. The analysis assumes that the need for any item arises singly. If the need always arises in batches, for example a dozen at a time, then a dozen could be taken as the unit. If the need could arise for just single items and occasionally for very large needs such as 500 the analysis will not be appropriate and a more complex statistical treatment would be needed.

2. The analysis assumes that deliveries can be made on any date. If the delivery will always take place on a Friday and orders need to be placed on a Tuesday to achieve the delivery three days later then the delivery is effectively 7 working days if an order is placed on the Wednesday. Depending on the logic and timing, d = 7 should be used in the estimation of the re-order calculation. 

3. As mentioned before, all events in any day are assumed to take place at the same instant. If deliveries are always made after any requirements arise on that day then effectively the delivery is one day greater. If the delivery and requirement arise randomly through the day there is then a 50% chance that the sequence will be wrong and the delivery time needs to be 0.5 days greater. Similar remarks may apply to the time of day when re-ordering takes place.

4. No account is taken of seasonal effects which may affect the delivery time or the rate of use. If the values of these quantities can be assessed at say a holiday period then they could be used in a calculation specific to such a time and which may result in a different re-order level.

5. No account is taken of the possibility of part delivery to overcome a potential problem and does not allow for making special arrangements to prevent running out such as fetching supplies instead of waiting for deliveries. 

6. This analysis does not allow for advance ordering when a large need is anticipated.

7. The cost of failing to supply is taken as E for each day when the stock runs out before it is replenished. No weighting is made to allow for multiple needs on any day in which the stock run out.

8. The analysis is based on the assumption that there is no re-ordering while a delivery is awaited. It is possible to devise a situation where that would be needed. For example, if deliveries take 7 days to arrive, the use is 100 items/day and deliveries are 500 items each then a delivery is needed every 5 days and, on average, all orders will have to be made while the preceding order is awaited. This will always happen when n < ad and quite often when (n/ad-1) is small

9. The probability of running out without passing the re-order point is zero (this means that the chances of having more than r needs in one day is taken as zero).
10. It is assumed that the quantities a,d are moderate numbers perhaps in the range 2 to 50, and that the product A = ad < 500. If they are outside this then the unit of time chosen (the present is based loosely on this being one day could be changed to an hour, a week or perhaps a month

To account for all of the effects listed above, and there are more, the analysis would become too complex.

The checks are

If AB > 1 says that there is no global minimum of cost, it is probably better not to do the business. 
d > 3 (the statistical approach used is not valid if this is not true
B < 0.1 (ditto)
10 < A < 500 (warning only that calculation may fail but tries if user wants.
working with batches or a different time unit. Still tries to solve unless
A < 6 when does not try (we know it won't work). 
Standard deviation of d is less than d/5.
If ad < n < 2ad warns that re-order may be needed while waiting for an order
If n < ad statistical approach unsuitable 

5. The Confidence of not running out is output unless it was given in the input.

Appendix 3 Detailed mathematical treatment for the analysis of the re-ordering problem


a Average rate of use
A Expected number to be used during delivery period A = ad 
B Non-dimensional ratio B = Sn/Ea
C Arbitrary constants
d Delivery time
E Cost of being empty at any time during one day. Does not vary with number of requests that day
<Ec> Average cost of failure
F Failure rate, number of failures to supply in unit time
L Non-dimensional ratio L = a.d
n Size of delivery
r Re-order level if delivery time is constant 
r* Re-order level if delivery time is constant
s Stock level
P(n,t) Probability of a need of n items between time = 0 and t
S Cost of holding one item in stock for unit time
t Time, normally measured in days
U(n,t) Probability that no more than n will not be used within time t
Z(n,t) Probability P without exponential
loge{(Sn/(Ea)(2p)} = loge{B. (2p)}
< > Encloses an averaged quantity

Basic probability

Assume that the probability of a single need arising in time dt is a.dt

If the probability of a need of zero items between t=0 and t is P(0,t) then

(d/dt). P(0,t) = -a.P(0,t) (1)

and this has the solution

P(0,t) = C1.exp(-a.t) (2)

Since P(0,0)=1, C1=1 and P(0,t) = exp(-a.t) (3)

Taking the general case of there being (k-1) needs already and we consider the kth need, we have

(d/dt). P(k,t) = -a.P(k,t) + a.P(k-1,t) (4) 

Substituting P(k,t) = exp(-at).Z(k,t), we have

(d/dt). Z(k,t) = a.Z(k-1,t) (5)

From this we progressively obtain 

Z(1,t) = at + C2 etc (6)

with all constants becoming zero since Z(k,0) = 0 for all k>0

The general case is 

Z(k,t) = (at)k/k! and P(k,t) = (at)k.exp(-at)/k! (7)

The chances of there being less than k+1 used in a period t is then

U(k,t) = exp(-at). S{1 + (at) + (at)2/2! + (at)3/3! ++ (at)k/k!} (8)

Case of re-ordering and the 
cost of failure to supply

If we decide to re-order when the level reaches r, and the time to get a 
delivery is d, then the probability that there will be a failure to 
supply can be found. 

There will potentially be a failure to supply corresponding to each delivery
and deliveries will occur at the rate of a/n. The probability of failure to 
supply is given by setting k = r and t = d to give the probability as

1 - U(r,d)

Hence the probability that any day will result in failure is 

F = (a/n). [1 - exp(-ad). S{1 + (ad) + (ad)2/2! +
+ (ad)r/r!}] (9)

Where F is also the failure rate.

To aid the computation process since the product ad is often rather a large number, we can re-cast this item in square brackets in this expression so that the chances of overflow are reduced as follows

[1 - exp(-ad/2). S{1 + (ad) + (ad)2/2! + (ad)r/r!}.exp(-ad/2)] (11)

Another solution when r > ad is to calculate the other part of the series so that the square bracketed term above becomes

[exp(-ad/2). (ad) r+1/(r+1)!. S{1 + (ad)/(r+2) + (ad)2/(r+2)(r+3) + 
}. exp(-ad/2)] (12)

Using Stirling's formula the cost of failure becomes

<Ec> = E.(a/n). [exp(-ad/2). (ade/(r+1))r+1/(2p(r+1)) S{1 
+ (ad)/(r+2) + } exp(-ad/2).] (13)

This avoids the calculation of the small difference between similar quantities. There is no need to use these special methods for the purposes of minimising the total cost but the improved methods are needed for the calculation of the cost quantities.

Average stock level

The average stock level is n/2 + r - ad (14)

This expression continues to count stock holding cost even after the level of stock has theoretically become negative and needs to be adapted because there can be no further saving once the stock has run out. Hence the above expression is valid for r > ad. To take the situation r < ad into account on the average we find the stock level is

<s> = (n + r - ad ) 2/2n (15)

This expression only applies while r < ad

We assume that the cost of holding one unit of stock for unit time is S and then the cost of holding stock for unit time is on average 

<Sc> = S.( n/2 + r - ad) for the case r > ad (16)

<Sc> = S.(n + r - ad )2/2n for the case r < ad (17)

Purists will note a small error in all the above expressions because they assume that the stock will always either run out or fail to run out depending on whether rad. The pure approach would be to insert the correct probabilistic functions but this is considered unnecessary given that n and even n/2 will dominate r - ad.

Alternative approach 

The analysis presented is based on the number of items used in unit time, a, the re-order level, r, and delivered at each delivery, n, being moderate numbers which means say in the range 0 to 50 for the first two at least. If the numbers at re-order level are large then a normal distribution approach will be needed. This possibility will not be considered here for the time being. Alternatively, a different unit of time can be used.

Minimisation of total cost 

The total cost of failures to supply added to the cost of holding stock is then

<Tc> = <Ec> + <Sc> (18)

<Tc> = E.(a/n). {[1 - exp(-ad). S{1 + (ad) + (ad)2/2! + (ad)r/r!}] +
B.( n/2 + r - ad)} (19)

where B = Sn/Ea and r > ad.

To minimise the total cost we differentiate the Tc with respect to the re-order level r and set the differential to zero

This gives the following equations for r where B is written in place of Sn/(Ea)

[- exp(-ad). (ad)r/r!] + B = 0 for r > ad (20)

[- exp(-ad). (ad)r/r!] + B.(n + r - ad)/n = 0 for r < ad (21)

In what follows we shall take the simpler form noting that .(n + r - ad)/n should be added after the B to take account of the other situation.

We have to solve this equation for r and a rearrangement is best to set the equation in a form in which iteration can be used:

(ad)r/r! = exp(ad).B (21)

The use of Stirling's formula makes the equation a little more tractable as

(ad)r.exp(r)/rr = exp(ad)(2pr).B (22)

To prevent too violent a behaviour we take logs of each side and have

r = loge{B exp(ad) .(2pr)}/loge{ade/r} (23)

The value r is likely to be quite large so that the LHS of the equation above will vary rather rapidly with r. The RHS is likely to vary slowly with r. Therefore the iterative scheme suggested by the above should converge quite quickly. Numerical tests have shown that only one iteration is necessary. To reduce the chances of numerical problems this equation is re-cast as 

r = (ad + loge{B .(2pr)})/(1 + loge{ad/r}) (24)

The numerator of the RHS, ad + loge{B(2pr)} is composed of two parts, one of which (ad) is likely to dominate numerically since it will be of the order 10 to 1000 whereas the other part being a logarithm will vary in the range perhaps -2 to -6. We are trying to find the zeros of the graph shown in Figure 2. This is easy except when the curve grazes or does not cross the horizontal axis. We find this is the case when AB apporaches unity and A is small, say A < 8

To show the variation of r against the other quantities we define parameters as follows
A as ad and B as Sn/Ea and as loge{B(2p)} (25)

With these definitions we have 

r = (A + + loger)/(1 + logeA - loger) (26)

r - (A + + loger)/(1 + logeA - loger) = 0 (27)

For the case A = 10 and = -3 we show on Figure 2 how the LHS of Equation (27) varies with r. We see two clear crossings. The crossing for the lower value gives a maximum total cost whereas we are seeking the one on the right.

The denominator, (1 + logeA - loger)), since ad~r, will always be close to unity. Therefore the whole of the RHS must be approximately equal to A. This accords with expectation and we shall look for a solution procedure which exploits this.

We define q as the ratio difference between r and ad as

q = r/ad - 1 or r = (q + 1).ad (25)

The sign of q will become an important question but the indication is that it is positive and hence r > ad.

After some manipulation, expanding the logarithm in the denominator as a power series and noting that q is small we find that 

q = [-/A] = [-loge{Sn/(Ea).(2p)}/ad] (26)

We now see that the positive sign corresponds to the root we seek (minimum of cost whereas the negative value of q corresponds to a maximum of the cost. 

The -ve sign under the square root is not a problem because for all practical situations the argument of the logarithm is less than unity and therefore the quantity under the root sign is +ve. 

We then have the solution for r before iteration as 

r = ad.(1 + [-2loge{Sn/(Ea).(2p)}/ad]) (27)

As an example, for the case given in Figure 2, we find r = 15.5 whereas the actual minimum cost must correspond to an integer value of r is actually 16.

We now use Newton's method to improve the solution using the following formula. Three iterations at most are needed unless AB is so great that there is no minimum for cost.

rnew = r -  
[r + r. loge(ad) -r. loge(r) - ad - - loge(r) /2]/[ loge(ad) - loge(r) -1/(2r)]

Stock cost too high to give a solution 

If the stock cost is too in relation to the cost of failure to supply that is when B becomes large we can see from the curves shown later that there is no true minimum for cost because although it dips down it sometimes does not reach as low as the value of cost as the re-order level, r, reaches zero. This is telling us that there is no point doing any business because the most economic solution involves holding no stock at all. We need to establish the conditions under which there is no true minimum for cost as r varies. After some work we find that when AB reaches about unity the minimum of cost when r > A gives a greater average cost than when r = 0. Another expression of the same statement is that if ndS > E there is no global minimum. 

Of course, in practical terms, it is unlikely to be worth entering the market to hold the stock when ndS/E is rather less than 1.

Variability in supply 

The analysis and results given so far are based on the deliveries arriving exactly d after the re-order point. This is not likely to happen in practice. Naturally the delivery can be very regular in various ways. For example if the next supply will always be sent immediately by a regularly used supply route then there might be little variability in d. To cater for the variability we shall eventually consider some options:

1. There is a normal distribution about a mean d and having standard deviation of sd This is probably the best model if the variability in d is quite small.

2. The delivery follows the exponential need described in the first sections of this note. This will make more sense if the delivery period could vary rather wildly but the nature of the distribution gives equal probabilities to the supply arriving on the first day and the tenth day even if the mean is ten days. 

We shall return to consider the effects of these two types of delivery variability. First, however we need to consider some general statistical results. 

For the exponential requirement model with the product considered so far we find that the mean time to use r items is not surprisingly r/a units of time. The standard deviation of the time to use up r items is (r + 1)/a. 

If we take two normal distributions for independent quantities x any y both having mean of zero and having different standard deviations sx and sy then the standard deviation of (x + y) is (sx2 + sy2).

A simple combination of the exponential requirement and the normal distribution for delivery but based upon each being normal would give a combined standard deviation of (sd2 + (r+1)/a2). If we apply this to the estimate of the optimum re-order point for a=200, = -4, d =20 when the optimum re-order point is r = 224 without allowance for variability of delivery time, we find that r barely increases with sd = 1, to r = 229 with sd = 3 and to r = 235 with sd = 5. The value sd = 5 is really too wild for the normal distribution to be realistic. It corresponds to no value of delivery being more than twice the standard from the mean.

If we consider the same example as given immediately above but instead of having a normal distribution of delivery then r would increase from 224 to 337 

Both of the above two examples are tackled in an approximate manner. The more exact analysis is to return to Equation 18 and see the effect on the optimum value of r.

Richard Henshell

"brite-sparks membership is the single most important step you can take in positioning your company to meet the challenges of this new century".

For more information please contact: richard.henshell@brite-sparks.com

Richard D Henshell brite-bparks.com, Strelley Hall, Nottingham NG8 6PE, UK 
Tel: 0115 9061 -200, fax -251 email: richard.henshell@strelley.com