Validation of Inventory models for Single-echelon Supply Chain using Discrete-event Simulation

06/19/2018 ∙ by Anshul Agarwal, et al. ∙ United Airlines, Inc 0

Inventory decision frameworks proposed in the literature for single-echelon supply chain systems rely on assumptions to obtain closed form expressions. In particular, two such frameworks - one conventional and the other with a demand undershoot - determine optimal reorder point for a desired β or Type-II service level. In this work we assess the accuracy and applicability of these frameworks with the help of a discrete event simulation framework developed in SimPy. While in several cases the closed form literature models under-predict the service level, and thus result in a higher reorder point and safety stock, we observe some situations where model predicted service levels match the simulated results with statistical significance.



There are no comments yet.


page 1

page 2

page 3

page 4

Code Repositories


inventory simulation modules for single-echelon supply chain

view repo
This week in AI

Get the week's most popular data science and artificial intelligence research sent straight to your inbox every Saturday.

1 Introduction

Various models have been proposed in the literature for single-echelon supply chain systems (which we discuss further) that help determine how much inventory should be stocked in order to meet the desired customer service level. Such models estimate the parameters for an inventory policy followed by the single-echelon system. This work primarily assesses the accuracy and applicability of these models with the help of a simulation framework developed in SimPy


A supply chain facilitates transportation of goods from one point to another is a network of facilities, such as suppliers, production locations, distribution centers. This can involve procurement of material, transformation of material to intermediate and finished products, and distribution of finished products to customers. The operation of a supply chain is driven by customer orders for finished products. It may be desired to stock inventories at various locations in a supply chain in order to achieve smoother operation and customer satisfaction. However, optimal inventory levels may be imperative for a cost effective operation and reduction in working capital [3, 4, 5, 9, 10, 16].

Inventory decisions such as safety stock, replenishment size, average on-hand inventory, carrying costs or working capital, etc. that meet a certain customer service level are challenging and not intuitive. Complexity arises due to various sources of uncertainties, such as demand volume, lead time (process uncertainties, machine downtime, transportation reliability), supplier reliability (raw material availability, issues at the supplier end), etc. Several frameworks have been designed in the literature that estimate aforementioned inventory decisions while accounting for such sources of uncertainties. However, they rely on assumptions to obtain analytic closed form expressions. In this work we validate the accuracy and applicability of two such frameworks given their respective assumptions with the help of a more accurate discrete-event simulation framework. Note that this work deals with only the single-echelon systems. Its extension for multi-echelon networks will be covered in future articles.

The article is organized as follows. We first describe the single-echelon inventory management system considered in this work. Section 3 illustrates the inventory optimization models that we validate. In Section 4 we present the SimPy discrete-event simulation model, while the validation results are documented in the next section. Section 6 concludes the article.

2 Problem Scope

2.1 Inventory System

As mentioned above, we consider a single-echelon system in this work. The term echelons for a supply chain refers to the number of interacting layers of inventory stocking locations before the product is delivered to the final customer. In a single-echelon system, there exists a single layer of locations that receive replenishment and deliver customer shipments. With two or more layers, the supply chain becomes multi-echelon. In a multi-echelon system, interaction between layers can exist in a variety of forms.

The following definitions are used to define and quantify inventory in a supply chain [7]:

  • Lot size or Economic Order Quantity (EOQ)
    The amount requested in each replenishment order is called lot size. While it may be advantageous to place several orders with a tiny lot size to lower inventory holding costs, it may not be practical due to either a fixed cost for placing an order or ability of the supply chain to fulfill orders in specific lot sizes, such as one full truck load (FTL), one railcar, one vessel shipment, etc. The lot size that minimizes total holding and order placement cost while accounting for such system restrictions is called economic order quantity (EOQ).

  • Cycle Stock
    The time gap between initiating a replenishment order and receiving the shipment is called lead time. Lead time can involve pre-processing time (place order on the books, other bookkeeping), order processing time (manufacturing, assembling, product wheel, scheduling, etc.), and post processing (transportation, load-unload, etc.). The inventory maintained to serve customers orders received during the lead time is called cycle stock.

  • Safety Stock
    Safety stock is the buffer inventory required to insure against the variability in customer demand (inaccurate forecast) and lead time (order processing delays, transit delays, etc.)

2.2 Inventory Tracking

Inventory policies provide a structure to manage ordering and receipt of products, timing the order placement, keeping track of what has been ordered, and deciding how much to order. In this work we evaluate a reorder point policy. In a reorder point policy, as shown in Figure 1, an order is placed when the stock reaches a predetermined number of units, called the reorder point. An order of fixed size is placed when the inventory position (on-hand plus on-order minus backordered quantities, if any) reaches the reorder point [7]. Note that the event of reaching is not “time-triggered” and may take place at any time depending on the demand. The reorder point is set to cover the cycle stock plus a safety stock determined by the desired service level. The fixed order size is generally governed by a fixed lot size or EOQ.

Figure 1: Reorder point policy [7]

2.3 System Performance

An inventory system’s performance is measured using service level. The event in which the inventory is completely exhausted and customer demand for the product cannot be fulfilled is called a stockout. Service level is a metric to quantify the level of stockouts that can be tolerated in order to meet the desired level of customer satisfaction [13]. If the demand is fulfilled later, it is called a backorder. In such cases, the service level measures how much demand was fulfilled on time. Inventory policies offer levers to manipulate in order to balance the trade-off between service level and the amount of inventory held.

Figure 2: Illustration of and service level [8]

There are two kinds of definitions of service level that are most frequently used: service level (Type I) (also called cycle service level) and service level (Type II) (also known as fill rate). The service level measures the number of inventory cycles in which stockout (or backorder) did not occur. Specifically,

It measures the probability of not stocking out during the lead time. However, it does not measure the “magnitude” of stockout (if the stockout was 1 unit or 1000 units of demand). On the other hand, the

service level measures the fraction of the amount of demand met from the inventory (see Figure 2). Specifically,

For example, for the 28 replenishment cycles in Figure 2, we observe stockouts happening in 4 cycles. Thus, service level = 24/28 = 86%. In contrast, the total customer demand in the 28 cycles is 16990 units, while the total stockout volume is 520 units. Therefore, the service level is (16990-520)/16990 = 97%. In general, the service level tends to be higher than . However, high demand and lead time variability can cause the former to be lower than the latter as the volume of stockouts go up [8].

In this work, we only focus on the models that use service level as a criterion to determine required inventory.

3 Models for Validation

Determining optimal inventory in a reorder point system essentially involves determining the reorder quantity ( in Figure 1), the reorder point ()( in Figure 1) and the corresponding safety stock (). The value of is obtained via minimum lot size of the system or determined from ordering cost. The models in the literature estimate only the and for a given . The choice of impacts and

. The models developed in the literature are valid only when demand follows a Normal distribution. However, no distribution assumption is required for lead time variability.

: mean of the Normally distributed demand,

: standard deviation of the Normally distributed demand,

: mean of the variable lead time, and
: standard deviation of the variable lead time.
We define expected demand during lead time () and total deviation () as


The cycle stock (), , and are calculated as [3, 6, 8]


Here , called the safety stock factor, varies with and service levels [3, 6]. We consider the following two models in this work for service level.

3.1 Conventional Model

In the conventional model, as defined in [3, 7, 6, 8], the service level is estimated as


where, the expected shortage () is the demand backordered and not fulfilled on time, and is the reorder quantity. The expected shortage is the excess demand during the lead time that could not be met from the cycle and safety stock. If is the demand distribution, the expected shortage is calculated as


When demand is Normally distributed, Equation (4) can be simplified to


Here is obtained from Equation (1), and and

are the standard normal density and the cumulative distribution functions, respectively, as below

To approximate the integral, the following empirical expression for can be used [2]


Equations (3), (5), and (6) can be solved together to obtain for a desired . For the lost sales case, can be replaced with in Equation (3).

3.2 Undershoot Model

In a conventional reorder point system, an order is placed when the inventory position is exactly equal to the reorder point. The conventional model above represents such a system. However, this requires inventory to be monitored constantly. In practice, inventory levels are monitored at a pre-determined frequency, such as once a day. Consequently, a delay is observed between when is reached and when the order is placed.

Figure 3: The concept of reorder point undershoot [14]

Figure 3 illustrates this concept. Here inventory is monitored at a constant interval . The reorder point is reached at A. While a conventional system will place an order at A, here the order gets placed at B when the system monitors inventory after . The difference between A and B is called undershoot. Undershoot results in a higher because inventory needs to be kept not only to meet demand during the lead time but also to serve the undershoot. As a result, expected shortage can be higher in such systems, and is not adequately captured by Equations (4) and (5).

Let be the inventory monitoring frequency of the system. The is calculated as [14]:


In order to calculate , we consider the following steps [12, 15]. First we calculate the expected value of the undershoot.


Next we find the expected value of shortage, which is given by


Since demand is Normally distributed, this can be simplified to


Finally, is obtained by solving the following equation for a given and .


4 SimPy Simulation

We developed a discrete-event simulation model in SimPy [11] in order to assess the accuracy and validity of the aforementioned two models. Complete computer codes for the simulation are available here [1].

To simulate an inventory storage node in a single-echelon supply chain, we create a generic Process in the SimPy simulation model called stockingFacility

. The activation function of this process is called

runOperation that is run at a fixed event rate of one time unit. Each runOperation call records the random demand in that event and the shipment sent to the customer, and updates the backorder and inventory position of the node, as shown below:

class stockingFacility(Process):

    def runOperation(self):
        while True:
            yield hold, self, 1.0
            demand = float(np.random.normal(self.meanDemand, \
            ΨΨΨΨself.demandStdDev, 1))
            self.totalDemand += demand
            shipment = min(demand + self.totalBackOrder, \
            self.on_hand_inventory -= shipment
            self.inventory_position -= shipment
            backorder = demand - shipment
            self.totalBackOrder += backorder
            self.totalLateSales += max(0.0, backorder)
            if self.inventory_position <= 1.01*self.ROP:
                order = newOrder(self.ROQ)
                activate(order, order.ship(self))
                self.inventory_position += self.ROQ

Note that when the inventory position goes below the reorder point, a new order object is created which represents the new order placed by stockingFacility object. The order object is another SimPy Process as shown below. It’s activation function ship ensures that the replenishment is being held for a random lead time before being delivered to the stockingFacility object.

class newOrder(Process):

    def ship(self, stock):
        leadTime = int(np.random.uniform(stock.minLeadTime, \
        ΨΨΨΨΨΨΨstock.maxLeadTime, 1))
        yield hold, self, leadTime
        stock.on_hand_inventory += self.orderQty

The aforementioned Process for stockingFacility models the scenario when unfulfilled demand is backordered and is shipped at a later stage once inventory is available. For the case when unfulfilled demand is considered lost sales, we use the following definition of the stockingFacility Process. The newOrder Process remains same for both cases.

class stockingFacility(Process):

    def runOperation(self):
        while True:
            yield hold, self, 1.0
            demand = float(np.random.normal(self.meanDemand, \
            ΨΨΨΨself.demandStdDev, 1))
            self.totalDemand += demand
            shipment = min(demand, self.on_hand_inventory)
            self.totalShipped += shipment
            self.on_hand_inventory -= shipment
            self.inventory_position -= shipment
            if self.inventory_position <= 1.01*self.ROP:
                order = newOrder(self.ROQ)
                activate(order, order.ship(self))
                self.inventory_position += self.ROQ

The simulation is initiated and activated through the following module. We run the simulation for 1 year for all test cases. Once the simulation is complete, the stockingFacility object is returned with all its statistics.

def simulateNetwork(initialInv, ROP, ROQ, meanDemand,\
ΨΨΨdemandStdDev, minLeadTime, maxLeadTime):
    s = stockingFacility(initialInv, ROP, ROQ, meanDemand,\
Ψ    ΨdemandStdDev, minLeadTime, maxLeadTime)
    activate(s, s.runOperation())
    s.serviceLevel = 1-s.totalLateSales/s.totalDemand #for backorder
    s.serviceLevel = s.totalShipped/s.totalDemand #for lost sales
    return s

The SimPy simulation framework represents the Undershoot modeling framework more closely compared to the Conventional model. Here inventory is monitored per every one time event instead of continuous. Therefore, by construct, we expect the simulation results to more closely match the Undershoot model vs. the Conventional model.

5 Model Validation

We validate the Conventional and Undershoot models (Section 3) using the above simulation frameworks. The model parameters are listed in Table 1. We perform validation for three different values of demand standard deviation and four different values of the reorder quantity.

Lead time
0 (no safety stock)
Mean demand 500
Demand std. deviation [200, 400, 600]
[1000, 2000, 4000, 6000]
Table 1: Model parameters for the validation study

We run 100 replications of the simulation and collect a distribution of service level obtained from all replications. The model is considered to match simulation successfully if the service level predicted by the model falls within two standard deviations of the service level distribution from the simulation. We run simulation for both backorder and lost sales scenarios.

Model SimPy Model
Avg. Std. Dev. matches SimPy
200 1000 57.2% 89.3% 2.7% No
2000 78.6% 89.7% 2.9% No
4000 89.3% 94.8% 1.6% No
6000 92.9% 95.9% 2.1% Yes
400 1000 38.8% 79.5% 5.5% No
2000 69.4% 80.3% 5.8% Yes
4000 84.7% 90.1% 3.1% Yes
6000 89.8% 89.7% 5.2% Yes
600 1000 16.8% 68.1% 7.1% No
2000 58.4% 70.3% 8.2% Yes
4000 79.2% 83.7% 5.2% Yes
6000 86.1% 81.9% 7.9% Yes
Table 2: Validation for the Conventional Model - Backorder scenario
Model SimPy Model
Avg. Std. Dev. matches SimPy
200 1000 70.1% 93.9% 1.2% No
2000 82.4% 93.9% 1.2% No
4000 90.3% 95.9% 1.2% No
6000 93.3% 96.5% 1.2% Yes
400 1000 62.1% 89.3% 1.9% No
2000 76.6% 90.0% 1.8% No
4000 86.7% 92.8% 1.8% No
6000 90.7% 93.8% 2.0% Yes
600 1000 54.6% 84.3% 2.7% No
2000 70.6% 86.1% 2.5% No
4000 82.8% 89.7% 2.4% No
6000 87.8% 90.1% 2.7% Yes
Table 3: Validation for the Conventional Model - Lost sales scenario

Table 2 shows the validation results for the conventional for the backorder scenario, while Table 3 shows that for the lost sales scenario. Here we list the average and its standard deviation from the SimPy simulation over 100 replications. We also list if the model results match with simulation based on the two standard deviation rule. Although the SimPy simulation models an inventory system with an undershoot, we use its results for comparison because the conventional reorder point system with constant inventory monitoring cannot be practically simulated.

From both tables, we observe the following:

  • For the same set of inputs, the lost sales model exhibits a higher service level compared to the corresponding backorder model. Moreover, the simulation variance is substantially lower for lost sales compared to backorder.

  • For both backorder and lost sales, the model results match with simulation (within statistical limits) when is higher than . However, for such cases, the lost sales model is always at least one standard deviation lower than the average simulation . The backorder model does not demonstrate this cadence.

  • In the case of the backorder model, when coefficient of variation is more than 0.8, we do observe model results match with simulation when is lower than . However, in these cases, the model is generally two standard deviations lower than the average simulated .

Similarly, we present the validation results for the Undershoot model for the backorder scenario (Table 4) and the lost sales scenario (Table 5). Here the SimPy simulation accurately models the inventory system under study. Consequently, we expect the Undershoot model to match simulation in more cases compared to the Conventional. However, we do not observe that in the results. A summary of the observations is as below:

  • Irrespective of the coefficient of variation, the model matches simulation only when is more than .

  • The model is substantially inaccurate for cases then is less than . Particularly for the backorder case, the model predicts absurd negative service level.

  • When , for both backorder and lost sales cases, the gap between model predicted and average simulated increases as the coefficient of variation goes up.

Model SimPy Model
Avg. Std. Dev. matches SimPy
200 1000 9.3% 89.3% 2.7% No
2000 48.9% 89.7% 2.9% No
4000 72.7% 94.8% 1.6% No
6000 95.7% 95.9% 2.1% Yes
400 1000 -43.5% 79.5% 5.5% No
2000 16.1% 80.3% 5.8% No
4000 54.1% 90.1% 3.1% No
6000 88.5% 89.7% 5.2% Yes
600 1000 -108% 68.1% 7.1% No
2000 -28.5% 70.3% 8.2% No
4000 27.2% 83.7% 5.2% No
6000 75.7% 81.9% 7.9% Yes
Table 4: Validation for the Undershoot Model - Backorder scenario
Model SimPy Model
Avg. Std. Dev. matches SimPy
200 1000 52.4% 93.9% 1.2% No
2000 66.2% 93.9% 1.2% No
4000 78.6% 95.9% 1.2% No
6000 95.9% 96.5% 1.2% Yes
400 1000 41.1% 89.3% 1.9% No
2000 54.4% 90.0% 1.8% No
4000 68.5% 92.8% 1.8% No
6000 90.0% 93.8% 2.0% Yes
600 1000 32.4% 84.3% 2.7% No
2000 43.8% 86.1% 2.5% No
4000 57.9% 89.7% 2.4% No
6000 84.8% 90.1% 2.7% Yes
Table 5: Validation for the Undershoot Model - Lost sales scenario

6 Conclusions

We presented two models from the literature that predict the service level (or fill rate) of a single-echelon supply chain system that tracks inventory using a reorder point policy. The first model, Conventional, requires inventory to be tracked constantly, while the second model, Undershoot, represents a system where inventory is tracked periodically, which can potentially cause reordering delay thus exacerbating system backorders (called creating an undershoot). The accuracy of these models is tested using a discrete-event simulation built using SimPy. We tested accuracy for different values of reorder quantity and demand coefficient of variation. The models and simulation were compared for cases when system allows backorders (and late shipments) vs. the scenario when the unfulfilled demand is considered lost sales.

Based on our experiments, we make the following conclusions:

  • In most cases tested in this work the closed form literature models under-predict the service level, and thus can result in a higher reorder point and safety stock

  • Both Conventional and Undershoot models, for either backorder or lost sales cases, are valid predominantly when the reorder quantity is more than the reorder point (and should only be used when this is true)

  • If reorder quantity is less than the reorder point and if the system follows a backorder strategy, the Conventional model can be used only when the coefficient of variation for demand is greater than 0.8

  • In general, the systems following a lost sales approach should see higher service levels than the ones following a backorder strategy


  • [1] Anshul Agarwal, Single-echelon inventory assessment,, 2018.
  • [2] KM Aludaat and MT Alodat, A Note on Approximating the Normal Distribution Function, Applied Mathematical Sciences 2 (2008), no. 9, 425–429.
  • [3] Sunil Chopra and Peter Meindl, Supply Chain Management. Strategy, Planning & Operation (Chapter 11), Springer, 2007.
  • [4] Ram Ganeshan, Managing Supply Chain Inventories: A Multiple Retailer, One Warehouse, Multiple Supplier Model, International Journal of Production Economics 59 (1999), no. 1, 341–354.
  • [5] George Hadley and Thomson M Whitin, Analysis of Inventory Systems, Prentice Hall, 1963.
  • [6] Cognizant 20-20 Insights, A New Framework for Safety Stock Management,, 2011.
  • [7] F Robert Jacobs and Richard B Chase, Operations and Supply Management: The Core (Chapter 11), McGraw Hill/Irwin, 2008.
  • [8] Peter L. King, Crack the Code, APICS Magazine, July/August 2011.
  • [9] Calvin B Lee, Multi-Echelon Inventory Optimization,, 2003.
  • [10] Hau L Lee and Corey Billington, Material Management in Decentralized Supply Chains, Operations Research 41 (1993), no. 5, 835–847.
  • [11] Norm Matloff, Introduction to discrete-event simulation and the simpy language, Dept of Computer Science. University of California at Davis 2 (2008), no. 2009.
  • [12] Helmut Schneider, Methods for Determining the Re-order Point of an (s,S) Ordering Policy when a Service Level is Specified, Journal of the Operational Research Society (1978), 1181–1193.
  • [13] Chetan Trimbak Shivsharan, Optimizing the Safety Stock Inventory Cost Under Target Service Level Constraints, Ph.D. thesis, University of Massachusetts Amherst, 2012.
  • [14] Edward A Silver, Hussein Naseraldin, and Diane P Bischak, Determining the Reorder Point and Order-up-to-level in a Periodic Review System so as to achieve a Desired Fill Rate and a Desired Average Time between Replenishments, Journal of the Operational Research Society 60 (2008), no. 9, 1244–1253.
  • [15] Hendrik Cornelis Tijms and H Groenevelt, Simple Approximations for the Reorder Point in Periodic and Continuous review (s,S) Inventory Systems with Service Level Constraints, European journal of operational research 17 (1984), no. 2, 175–190.
  • [16] Paul Herbert Zipkin, Foundations of Inventory Management, McGraw-Hill New York, 2000.