Anda di halaman 1dari 153

I N V E N T O R Y C O N T R O L IN T H E R E T A I L S E C T O R : A C A S E S T U D Y O F

C A N A D I A N T I R E PACIFIC A S S O C I A T E S
by
BRIAN A N T H O N Y K A P A L K A

B.Sc.(C.E.), The University of Manitoba, 1992


B.Sc., The University of Manitoba, 1992

A THESIS SUBMITTED IN P A R T I A L F U L F I L L M E N T O F
T H E REQUIREMENTS FOR T H E D E G R E E O F
M A S T E R O F SCIENCE (BUSINESS ADMINISTRATION)
in
T H E F A C U L T Y O F G R A D U A T E STUDIES
(Department of Commerce and Business Administration)

We accept this thesis as conforming


to the required standard

T H E UNIVERSITY O F BRITISH C O L U M B I A
April 1995
Brian Anthony Kapalka, 1995

In
presenting t h i s
thesis
in partial
fulfillment
of
the
requirements f o r an advanced degree a t the U n i v e r s i t y of B r i t i s h
Columbia, I agree t h a t the L i b r a r y s h a l l make i t f r e e l y a v a i l a b l e
f o r r e f e r e n c e and study.
I f u r t h e r agree t h a t p e r m i s s i o n f o r
e x t e n s i v e copying of t h i s t h e s i s f o r s c h o l a r l y purposes may
be
granted
by
the
head
of my
department
or
by
h i s or
her
representatives.
I t i s understood t h a t copying or p u b l i c a t i o n of
t h i s t h e s i s f o r f i n a n c i a l g a i n s h a l l not be allowed without my
written permission.

Department of Cotv^errg- )> ^ o s m e c s AAnmn\a-WoA\or'


ftni

The U n i v e r s i t y of B r i t i s h Columbia
Vancouver, Canada

Date ZS A y r A

\995

Abstract

Canadian Tire Pacific Associates owns and operates 21 retail stores in the lower
mainland of British Columbia and a central warehouse in Burnaby. In this thesis, we formulate
a single-product, single-location model of its inventory system as a first step in developing an
integrated, interactive inventory control system.

Specifically, we formulate a Markov chain

model for a periodic review system with a deterministic lead time and lost sales. The model
utilizes empirical demand data to calculate the long-run average cost of inventory for a given
(s,S) policy. We then develop a heuristic that locates a "near" optimal policy quickly. The
heuristic incorporates a constraint on the customer service level, makes use of an updating
technique for the transition probability matrix, and is based on assumptions regarding the
properties of the solution space.

Next, we create a prototype of the interface that enables

managers to use the model interactively. Finally, we compare the existing inventory policy to
the optimal policy for each of 420 products sold at one of the stores.

This thesis finds that

Canadian Tire Pacific Associates is currently holding excessively large in-store inventory and
that it could reduce its cost of inventory by approximately 40% to 50%.

We estimate that

implementing optimal inventory control in the stores would result in annual savings of between
$5.5 and $7 million.

ii

Table of Contents

Abstract

ii

Table of Contents

iii

List of Tables

List of Figures

vi

Acknowledgement

vii

I. INTRODUCTION

II. T H E I N V E N T O R Y S Y S T E M A T C A N A D I A N TIRE PACIFIC ASSOCIATES


A.
B.
C.
D.
E.

Background
The Problem
The Project
The Demand Data
The Cost Data

. . . .

8
8
.11
15
17
18

III. M O D E L F O R M U L A T I O N
A . Terminology
B. Assumptions
C . A Markov Chain Model
D. The Transition Probability Matrix
E . The Steady State Probabilities
F. The Cost of Inventory .
G. The Customer Service Level
H . A Methodology for Evaluating an (s,S) Policy

20
20
21
22
25
27
29
31
34

IV. A N A L G O R I T H M FOR OBTAINING T H E O P T I M A L (s,S) POLICY


A . Introduction
B. A Grid Search
C. A Technique for Updating the Transition Probability Matrix
A new policy (s+m,S)
A new policy (s,S+m)
The modified algorithm
D. A Lower Bound on S . . .
E . A Heuristic Search

35
35
36
41
41
42
43
45
48

V. T H E INTERFACE

52

iii

VI. RESULTS A N D SENSITIVITY ANALYSIS


A . Comparison of Current Policies to Optimal Policies
B. Sensitivity Analysis on the Ordering Cost and Holding Rate
C . Sensitivity Analysis on the Demand Probability Mass Function

55
55
62
65

VII. C O N C L U S I O N

70

Afterword

73

Bibliography

74

Appendix A : A Portion of the "Sales" File for Product 200001, a 30-amp


Inline Fuse

76

Appendix B: Sample "Distribution" Files

77

Appendix C : A Proof that the Limiting Distribution is Independent of the


Initial State

79

Appendix D: A Measure for the Steady State Customer Service Level

83

Appendix E : The Calculation of the Conditional Expected Demand Not Satisfied


During a Period of T Consecutive Days

86

Appendix F: Justification of the Updating Technique for the New Policy (s+m,S) . . . . 87
Appendix G: Justification of the Updating Technique for the New Policy (s,S+m) . . . . 92
Appendix H : A Hypothetical Consultation

97

Appendix I:

The Source Code for the "Interface" Module

104

Appendix J:

The Source Code for the "Main" Module

119

Appendix K: Current and Optimal Policies for Product Category 20 at Store 6

iv

131

List o f Tables

Table 1.

Location and particulars of the 21 stores

10

Table 2.

Execution times of the algorithms for product 200001, a 30-amp


inline fuse

39

Table 3.

Execution times of the algorithms for product 206917, a 6%


solder connector

40

Table 4.

Products with insufficient existing policies

56

Table 5.

Products with the largest potential absolute savings

60

Table 6.

A comparison of "optimal" policies to "true optimal" policies

63

Table 7.

The cost of existing policies and the relative savings of the


"optimal" policies under various scenarios
"True optimal" and "optimal" policies for each demand scenario

Table 8.

.64
66

List of Figures

Figure 1.

A typical sample path of the process with a 4-day review period


and a 2-day lead time

24

Figure 2.

The flow chart of the grid search algorithm

38

Figure 3.

The flow chart of the grid search algorithm utilizing the updating
technique for the transition probability matrix

44

Figure 4.

A n evaluation of the lower bound, S

47

Figure 5.

The flow chart of the heuristic algorithm

Figure 6.

The distribution of savings of optimal policies in (a) dollars and

min

(b) percentage of current cost

50

59

Figure A-1. The title screen

97

Figure A-2. The main menu

98

Figure A-3. Calculating the optimal policy and evaluating the current policy

99

Figure A-4. Displaying the results

100

Figure A-5. Entering an alternate policy

101

Figure A-6. The particulars of the alternate policy

102

Figure A-7. The main menu revisited

103

vi

Acknowledgement

The completion of this thesis was made possible by the encouragement and assistance
of a number of people.
I would like to express my sincere appreciation to my thesis supervisor, Professor
Martin Puterman, for all of his many efforts on my behalf. His help, advice, patience, charity,
and tolerance were very much appreciated.
I would like to acknowledge Professor Hong Chen and Professor Garland Chow for their
time and input as members of my thesis committee.

In addition, I must acknowledge the

assistance of Ph.D. student Kaan Katircioglu for his insight and help on this project.
I offer many thanks to Professor Tom Ross for his kindness and friendship during the
past few years, especially during the writing of this work. I must also thank his family for
"adopting" me on many holidays. I still owe thanks to Professor Slobodan Simonovic at the
University of Manitoba for influencing me to attend graduate school in the first place and for
helping me to obtain funding.
I cannot thank my parents enough for their never-ending support, both emotional and
financial. Also, to my friends, especially Cathy, Dave, Lisa, Steve, and the "Philbuds": thanks
for giving me a life off campus and for picking up many a tab - the next one is on me.
I would like to give special thanks to my good friend and fellow M.Sc. student, Paul
Crookshanks, for allowing me to bounce ideas off of him and for being such a procrastinator
that, despite my finishing a year late, I only "lost" by two days.
Financial assistance received from the Natural Science and Engineering Research
Council (NSERC) and from Canadian Tire Pacific Associates was greatly appreciated.

vii

I. I N T R O D U C T I O N

The importance of inventory management has grown significantly over the years,
especially since the turn of this century. In colonial times, large inventories were viewed as
signs of wealth, and, therefore, merchants and policy makers were not overly concerned with
controlling inventory. However, during the economic collapse of the 1930s, managers began
to perceive the risks associated with holding large inventories.

As a result, managers

emphasized rapid rates of inventory turnover (Silver and Peterson, 1985).

Following the

Second World War, Arrow, Harris, and Marschak (1951) and Dvoretzky, Kiefer, and
Wolfowitz (1952a,b) laid the basis for future developments in mathematical inventory theory.
Shortly thereafter, new inventory control methodologies were widely applied in the private
manufacturing sector. More recently, when inflation and interest rates soared during the 1970s,
many organizations were forced to rethink their inventory strategies yet again.

Today, the

control of inventory is a problem common to all organizations in any sector of the economy.
Sir Graham Day, chairman of Britain's Cadbury-Schweppes P C L , expressed this sentiment
when he stated, "I believe the easiest money any business having any inventory can save lies
with the minimization of that inventory" (Day, 1992). Lee and Nahmias (1993) and Silver and
Peterson (1985) provide a more detailed history of inventory management and control.
Most inventory problems in the retail sector involve the control and management of a
large number of different products. Ideally, the inventory policies should be determined for all
products on a system-wide basis; however, because the number of products is often in the tens
of thousands, formulating a model to do so is impractical. Therefore, single-product models
are frequently used in practice to determine policies for products separately (Lee and Nahmias,
1993). Lee and Nahmias (1993) and Silver and Peterson (1985) provide a good overview of
1

single-product, single-location models; for a more complete review of the literature, we refer
to them.
The degree of complexity of a single-product model depends largely on the assumptions
made regarding the demand, cost structure, and physical characteristics of the inventory system.
For example, demand can be either deterministic, meaning it is known with absolute certainty,
or stochastic,

meaning it is unknown but follows

a known probability distribution.

Deterministic models tend to be relatively simple yet useful, such as the basic E O Q model.
However, future demand is seldom known with certainty in practice, and, therefore, the use of
these simple models is limited. As a result, the majority of research in inventory has focused
on stochastic demand models (Lee and Nahmias, 1993).
Because the objective of most inventory models is to minimize the cost of inventory,
assumptions regarding the structure of the cost are very important also.

Generally speaking,

the cost of inventory has four components: the purchase/production cost, the ordering/setup
cost, the holding cost, and the shortage cost.

Each of these costs can be fixed, proportional,

nonlinear, or some complex combination of these.

Further, because nearly all inventory

problems require decisions be made sequentially over a period of time, the costs can be either
discounted or averaged. In the former case, a discount factor is included in the cost function
in order to account for the time value of money. However, since most inventory problems are
on-going, the long-run average cost is usually minimized (Lee and Nahmias, 1993).

In

practice, this is achieved by minimizing the expected cost per time period under steady state
conditions.
Finally, the physical characteristics of the system are important in determining the

The cost of a stockout is often very difficult to estimate in practice. As a result, service
levels are frequently used in its place. When this is done, a constraint is included in the model.
1

complexity of the model. For example, the review process can be either continuous, in which
case the inventory is reviewed continuously and orders are placed as soon as the stock reaches
a certain level; or periodic, in which case the inventory is reviewed at regular intervals and
orders can be placed only at those fixed times. Also, excess demand can be fully backordered,
as is common in many manufacturing and wholesale systems, completely lost, as is common
in most retail environments, or some combination of the two. Lead time assumptions are also
important: models with lead times are more complex than those in which the supply of
inventory is assumed to be instantaneous.
Although the literature is dominated by single-product models (Lee and Nahmias, 1993),
much recent work has focused on extending those models to multiple-product problems.
However, multiple-product models are inherently more complex than the simple-product
models.

In fact, no efficient algorithms are currently available for determining fully optimal

strategies for most multiple-product problems (Federgruen, 1993). As a result, research has
focused on the development of easily computable "approximation" techniques.

Muckstadt and

Roundy (1993) provide a good overview of multiple-product and/or multiple-location models


with deterministic demand, although emphasis is placed on models for production and
distribution. Federgruen (1993) extends the discussion to consider these models under uncertain
demand and also provides a complete list of references on the subject.

Silver and Peterson

(1985) discuss models for coordinated replenishments for both deterministic and stochastic
demand.
In this thesis, we examine the inventory system at Canadian Tire Pacific Associates,
owner of 21 retail stores and a central warehouse.

Although this is a multiple-product,

multiple-location, single-warehouse problem, and, strictly speaking, should be modelled as such,


we analyze the inventory problem on a product-by-product and store-by-store basis. We believe
3

that this simpler single-product, single-location model captures the essentials of the problem for
two reasons.

First, the coordination of replenishments for products and/or locations is most

advantageous when significant savings are possible because of high "first order" costs and low
marginal costs for placing subsequent orders.

However, because of the large number of

products and the physical distribution system in this problem, trucks are dispatched to stores
on a regular basis. Therefore, the benefits of coordinating replenishments for this problem are
negligible. Second, we believe that controlling in-store inventory alone can result in substantial
savings to Canadian Tire Pacific Associates. Further, given the excessive amount of inventory
in the warehouse, a single-location model assuming an infinite warehouse capacity is reasonable.
Of course, should inventory control in the warehouse become a priority, a more elaborate model
would be required.
More specifically, we consider a periodic review, single-product inventory model with
stationary, independent, stochastic demand, a deterministic lead time, and an infinite planning
horizon.

The probability mass function for the demand is based on empirical sales data

collected over a period of approximately ten months.

The cost of inventory includes a

proportional holding cost and a fixed ordering cost, neither of which is discounted. A l l excess
demand is completely lost. The objective of the model is to minimize the long-run average cost
per unit time subject to a service level constraint on the fraction of demand satisfied directly
from in-store inventory. In order to obtain meaningful cost comparisons, the model calculates
the expected annual cost of inventory.
For inventory problems like the one described above, optimal (s,S) policies can be
computed by Markovian decision process methods, such as successive approximations or policy
iteration, or by stationary Markovian methods.

However, each of these methods generate

calculations that are complex and time consuming. Therefore, much research interest lies in
4

developing techniques to find approximate (s,S) policies with little computational effort. The
majority of the approximation techniques begin with an exact formulation of the problem and
then manipulate the problem by relaxations, restrictions, projections, or cost approximations
(Federgruen, 1993).

Porteus (1985) presents three approximation techniques and compares

them to fourteen others for a periodic review, single-product inventory model in which
shortages are fully backordered and a shortage cost is incurred. Federgruen, Groenevelt and
Tijms (1984) present an algorithm for finding approximate (s,S) policies for a continuous review
model with backordering and a service level constraint.

Also, Tijms and Groenevelt (1984)

present simple approximations for periodic review systems with lost sales and service level
constraints. A l l three works find that the approximation techniques perform well. However,
the techniques are evaluated for a variety of demand parameters that all result in policies with
a value of S in the range of 50 to 200.

Given the slower moving products at Canadian Tire,

it is unclear how well such approximation techniques would perform. Therefore, we do not
attempt to apply or modify any of these approximation methods.
Exact optimal policies for this problem can be obtained by formulating a constrained
Markov decision process and solving it. However, the data generating requirements and the
lack of a good upper bound on S make this formulation impractical. Therefore, we formulate
a Markov chain model for fixed values of s and S and then employ a search technique to find
the optimal values for s and S. In order to improve the performance of the model, we develop
a heuristic search that locates "near" optimal policies relatively quickly.
The remaining chapters of this thesis are organized as follows.

In Chapter II, an

overview of the existing inventory system at Canadian Tire, is presented along with a description

For example, very few of the products analyzed have optimal values of S exceeding 20,
with the largest value of S equalling 69.
2

of the problem. Next, a multi-phase project designed to develop a fully integrated, interactive
inventory control system is described, with the scope of the research reported in this thesis
completing the first phase of the project. Finally, a description of the demand and cost data is
given.
In Chapter III, we formulate a Markov chain model that can be used to calculate the cost
and service level associated with a given (s,S) policy.

Based on several simplifying

assumptions, the Markov chain is formulated and the equations for the corresponding transition
probability matrix are developed. Then, given the limiting probability distribution of the chain,
the equations for the steady state annual cost of inventory and the corresponding service level
are obtained. The chapter concludes with a brief summary of the model.
In Chapter IV, an algorithm that searches for the optimal (s,S) policy is developed. As
a starting point, a simple grid search algorithm is developed and evaluated on the basis of
execution time.

In order to improve the algorithm's speed, a technique for updating the

transition probability matrix is presented, and the improvement in the algorithm is noted. Next,
a theoretical lower bound on S is obtained, although the corresponding reduction in the
execution time is minimal. Finally, based on two assumptions regarding the "shape" of the
feasible space, a heuristic search is developed which improves the speed of the algorithm
significantly.
In Chapter V , a prototype of the inventory control system's interface is created. In its
present form, the interface allows managers to evaluate inventory policies interactively. The
manager can set review parameters, compare optimal policies and current policies, and evaluate
alternate policies.

The chapter concludes by recommending specific options be including in

future versions to make the system more automated and "user-friendly".


In Chapter VI, optimal policies for all products in one product category sold at one store
6

are compared to existing policies on the basis of expected annual costs and customer service
levels.

The analysis suggests that existing policies result in a large excess inventory and that

implementing the optimal policies would reduce the annual cost of inventory by approximately
50%. A sensitivity analysis on the cost estimates is performed and suggests that the model is
not sensitive to relative errors of approximately 20% in the cost estimates. Finally, a sensitivity
analysis on the demand probability mass function is performed. The analysis indicates that the
model is sensitive, at least in terms of the customer service level, to slight changes in the tail
of the demand distributions of "low"-demand products.
Finally, in Chapter VII, the results of the analysis are summarized and future work is
outlined. In order to incorporate recent changes in the review procedures at several stores, the
model must be modified to allow for the duration of the review period to exceed the lead time.
We recommend that the second phase of the project proceed; specifically, that a data collection
and storage scheme be designed and that a forecasting model be developed.

Because of the

substantial savings that can be realized by reducing inventory only at the stores, inventory
control at the warehouse should also be investigated.

II. T H E I N V E N T O R Y S Y S T E M A T C A N A D I A N T I R E

A . Background
Canadian Tire Pacific Associates owns and operates 21 retail stores in the lower
mainland of British Columbia. The stores carry approximately 30,000 "active" products that
3

are divided into 80 product categories. The merchandise comprises primarily automotive parts
and accessories, home hardware, housewares, and sporting goods.

Canadian Tire Pacific

Associates also owns a central warehouse in Burnaby at which inventory is received from
Toronto.

Inventory is then shipped periodically from the warehouse via truck to the local

stores. In 1992, total sales at the stores exceeded $99 million, and the value of inventory was
estimated to be $28 million, of which approximately half was stored in the warehouse.
On selected days of each week, a store's inventory records are reviewed automatically,
and orders for products are placed to the warehouse as required. Management uses the term
"flushing" to describe the process of reviewing the inventory and producing the tickets for stock
owing and the term "picking" to describe the physical act of filling the order at the warehouse.

Whether or not an order is placed for a product depends upon its current inventory level, its
target level, and its minimum fill.

If the target level less the current level exceeds the

minimum fill, an order is placed to bring the stock up to the target level.

"Active" products are those that are regularly restocked.


Associates can choose from up to 50,000 products.
3

From the moment

Canadian Tire Pacific

Note that the number of "picks" per week is equal to the number of times per week that
the inventory records are reviewed. At the beginning of this study, eighteen stores had two
"picks" per week while the remaining three stores had only one.
4

The target level is the maximum number of items that should be on the shelf at one time,
and the minimum fill is the minimum number of items that should be ordered.
5

the order is placed to the moment the product is reshelved takes between two to four days,
depending on the store.

On average, 11,000 items are shipped from the warehouse at each

"flush".
Although a product's minimum fill is the same for all stores, its target level depends
upon the "size" of the store. Based upon its sales volume and retail space, a store is classified
as being one of five "sizes": small (S), medium (M), large (L), jumbo (J), and extra jumbo
(EJ).

Each product has associated with it a target level for each "size" of store.

Consequently, all stores of the same "size" have identical inventory policies. Table 1 lists the
location, "size", number of "picks" per week, sales, and floor space of each store as of October
1993.
Periodically, the inventory manager reviews the policies and, when deemed necessary,
adjusts them. In this way, the manager can account for seasonality in demand, changes in mean
demand, and any "shortcomings" of previous policies. At the present time, the review process
is not automated nor performed on-line.

The inventory manager uses H"xl5" computer

printouts, with five products to a sheet, to study the relevant information and on which to note
any changes.

Afterward, the changes are recorded in the system and the new policies take

effect.
Currently, the inventory policies are based on "rules of thumb" developed through the
years and not on a statistical analysis of demand nor on a calculation of the cost of inventory.
These "rules of thumb" incorporate a marketing philosophy which at times dominates the
inventory strategy. The prevailing philosophy holds that a large in-store inventory instills

During the course of this study, stores were "resized" several times. At one point, the
entire class of "medium" stores was eliminated, leaving only four "sizes" of stores. On another
occasion, the store in Chilliwack was changed from being a "small" store to a "large" store.
6

Table 1. Location and particulars of the 21 stores.

Store

Location

Store
Size

Picks Per
Week

1992 Sales

($)

Floor
Space (ft )
2

Chilliwack

2,901,969

6,678

Coquitlam

4,015,303

6,510

Langley

EJ

8,138,673

15,422

Scott Road

EJ

7,307,820

15,064

Maple Ridge

4,102,110

6,678

Kingsway

4,153,736

6,574

Richmond

EJ

8,175,105

14,961

North Vancouver

3,856,571

6,534

Guildford

3,714,372

6,567

10

Burnaby

3,532,752

6,983

11

New Westminster

2,417,992

6,470

12

Abbotsford

EJ

7,899,398

15,303

13

Hastings

4,647,794

9,849

14

King Edward

EJ

3,825,372

25,492

15

White Rock

3,960,262

6,870

16

Main & Mountain

2,705,602

6,431

17

Heather

4,161,227

9,427

18

King George

4,606,817

9,640

19

Cambie

5,855,022

9,091

20

Lougheed

3,114,180

6,615

21

Burrard

6,553,310

10,608

10

consumer confidence which, in turn, leads to increased sales. In other words, if a customer
perceives that Canadian Tire is "in the hardware business", he or she will choose to shop there
when meeting future needs.

However, management has adopted this philosophy without any

analysis of the cost of holding excess inventory.

Only recently has management begun to

question the cost-effectiveness of allocating inventory based on these "rules of thumb".


Speculating that existing inventory practices might be deficient, Mr. Don Graham, the
vice-president of Canadian Tire Pacific Associates, commissioned a pilot study to examine the
inventory system and to propose alternate strategies.

The study, using a steady state model

to represent a simplified inventory system, suggested that existing policies lead to overly high
inventory levels.

More importantly, the study outlined a methodology that would enable

management to determine inventory levels based on observed demand.

The pilot study

recommended that a more detailed model of the inventory system be formulated, that the
methodology be expanded to incorporate the cost of inventory, and that an algorithm be
developed that would quickly identify the optimal inventory policies.

B. The Problem
At the time of the pilot study, management was concerned primarily with its inability
to distinguish between stores of the same "size".

As mentioned in the previous section, a

store's "size" is based solely on its sales volume and floor space; and, under existing practices,
all stores of the same "size" have identical inventory policies for every product. Management
realized that demand for some products might be a function of variables other than "size", such

The pilot study was performed by Martin Puterman, a professor of Management Science,
and Kaan Katircioglu, a doctoral student in Management Science, both at the University of
British Columbia. The results of the study were presented at a U . B . C . Transportation and
Logistics Workshop on March 25, 1993.
7

11

as location. For example, the demand for sump pumps is likely to be very different in suburban
areas than in urban ones. However, management was unable to allocate more sump pumps to
"large" suburban stores than to "large" urban stores. This inability led management to seek a
tool that would allow for a more effective allocation of inventory between stores of the same
"size".
By the end of the pilot study, however, management was less concerned with
reallocating inventory within a "size" of store than with reallocating inventory between "sizes"
of stores and with reducing overall inventory. According to management, assigning individual
inventory policies to each store appeared to be operationally infeasible.

Firstly, management

believed that having individual policies would lead to confusion in the warehouse and to
increased shipping errors.

Exactly why this would occur is unclear; the warehouse would

simply continue to fill orders from tickets that make no reference to the policy in place.
Secondly, and perhaps more tenably, the computer technology at Canadian Tire Pacific
Associates did not allow for policies to vary across all stores. Both the database used to store
the inventory data and the printouts used by the inventory manager allowed for only five
different policies per product, all with the same minimum fill.

Moving to individual policies

would have required an overhaul of the existing information system.

Although management

saw this overhaul as inevitable, it did not see the overhaul as imminent.

Therefore,

management switched the focus of the study to developing a tool that would help reduce overall
inventory levels and/or reallocate inventory more effectively between groups of stores.
The subtle change in the study's objective prompted an important question: how should
the stores be grouped? The current practice of grouping stores based on "size" is problematic
for two reasons.

First, as discussed above, additional factors of demand, such as location,

cannot be taken into account.

Second, grouping inherently results in a misallocation of

12

inventory when some stores within a group have differing numbers of "picks" per week. For
example, the "medium"-sized Lougheed store, which has one "pick" per week, requires higher
inventory levels to achieve a given customer service level than the other "medium" stores,
which all have two "picks" per week.

In fact, in terms of customer service levels, it might

be more appropriate to group the Lougheed store with the "large" stores having two "picks" per
week. Ideally, this artificial grouping of stores will be abandoned when the computer system
is upgraded, and policies can then be set on a store by store basis.
As the project proceeded, management grew somewhat uneasy with the concept of using
an analytical tool to evaluate and set inventory policies.

According to both the pilot study and

the preliminary results of this study, significantly reducing inventory would greatly reduce costs
while still providing a high level of customer service. However, management held that because
the model cannot take into account intangibles, such as marketing considerations, such a drastic
reduction in inventory would be very inappropriate. In this light, management viewed the
optimal policies as "lower bounds" for inventory levels: these policies would have to be
modified upwards in order to be practical.

Therefore, management contended that any

methodology or software produced during this study should provide the means to evaluate and
compare a number of alternate policies.
Regardless of exactly how the tool is to be used, there is currently a lack of historical
sales data from which to analyze the inventory system and determine optimal policies. No sales
data had ever been collected prior to the pilot study, and only a relatively small amount has
been collected since.

In order to proceed with any analysis of the inventory system, a

If demand is a function of "size", then the Lougheed store must meet the same demand
with one fewer "pick" per week. This would lead to either increased probabilities of stockouts
at the Lougheed store or higher inventory levels at all the other "medium" stores.
8

13

substantial amount of additional data would be needed.

The existing information system at

Canadian Tire Pacific Associates does allow for sales data to be captured; however, the system
is limited by the amount of data it can capture at one time and by its storage capacity. In order
to collect the amount of data required, management would have to upgrade the system and
develop some kind of data collection scheme coupled with a data compression technique. The
collection scheme must allow for characteristics of demand, such as trends and seasonality, to
be identified; and the compression technique must allow for sales data for over 30,000 products
to be stored for each store.
Because many of the products sold by Canadian Tire have nonstationary demand, as a
result of seasonality and/or trend, the inventory tool must be able to forecast demand for the
coming period. Products such as sporting goods and outdoor equipment exhibit patterns of
demand that are very seasonal.

For example, sales of snow shovels increase through the fall,

peak in the winter, and drop to zero by late spring. At the same time, some products might
become either more or less fashionable over time, resulting in changes in mean demand.
Setting inventory policies for any of these products based on observed demand would result in
insufficient stock if demand increased during the period or in excess stock if demand decreased.
Therefore, the tool must be able to forecast the demand for the period for which the policy is
intended.
Toward the end of the project, management began discussing the integration of the
interactive inventory tool with the existing system to form a new inventory control system. The
new system would utilize a modified point of sales system to collect sales data continually.
Based on the latest available data, the system would forecast demand for the coming period and
calculate the optimal policies for every product at every store. The system would then provide
all relevant information on-line for the inventory manager to review. The manager could weigh

14

other information, such as marketing considerations, and examine alternate policies to determine
the effect on cost. Finally, the preferred policy would be set in place with the touch of a key,
and information on the next product or store would be presented for review.

C. The Project
Development of the inventory control system envisioned by management requires the
completion of five tasks: 1) the design of a data collection system that generates and stores the
necessary sales data; 2) the development of a forecasting method that provides accurate
estimates of demand distributions; 3) the formulation of a model that calculates the cost of
inventory and the customer service level for an inventory policy; 4) the development of an
algorithm that finds the optimal policy for a product at a store; and 5) the creation of an
interface that allows interactive and on-line consultation.

Ultimately, the above components

would have to be integrated and incorporated in a manner that would ensure the compatibility
and reliability of the system.
The scope of the research reported in this thesis completes the first phase of the project:
specifically, we formulate an inventory model, develop an algorithm, and create a prototype of
the interface. Because of the changing environment at Canadian Tire Pacific Associates, minor
modifications to both the model and the algorithm developed herein might be necessary to
reflect future changes in operational procedures. Upon completion of phase one, the interface
will be interactive, allowing managers to select the store, product, and review scenario and then
to compare optimal policies with existing policies or with alternate policies.

Although the

prototype will be delivered to Canadian Tire Pacific Associates for ih-house testing at the end
of this phase, the interface will require modification in subsequent phases as feedback from
management is received and as the system is brought on-line.
15

In order to assess more fully the potential savings of implementing the inventory control
system, this thesis includes a comparison of optimal policies and existing policies.
9

The

expected annual cost of inventory for an entire product category is calculated for both the
optimal policies and the existing policies.

Based on an analysis of these costs, the potential

savings of implementing the optimal policies are extrapolated. Further, the thesis examines the
sensitivity of the model to variations in the estimates of demand and costs.
Originally, results from all 21 stores were to be included in the above analysis.
However, just prior to the analysis, management changed the review procedure at several
stores; the result of which being that three "picks" per week are now performed at those stores.
Because one of the main assumptions of the model, specifically that the length of the lead time
does not exceed the duration of the review period, is violated under this new review procedure,
those stores cannot be included in the analysis. Therefore, the analysis is based solely on the
results from store six, the "large" store located on Kingsway Avenue.

10

For the purpose of the analysis, sales data for product category 20, automotive and
electrical accessories, were collected from all 21 stores.

This product category was selected

because the distribution of demand for products within it is non-seasonal and because few of
the products are ever placed "on sale".

11

The lack of trend or seasonality eliminates the need

for forecasting demand; the optimal policies can be determined based directly on observed
demand.

That is, those policies obtained from the model.

Store six is one of the only stores whose review procedure is not expected to change from
two "picks" per week.
1 0

11

Products that were "on sale" at any time during the period were not included in the data

set.
16

D. The Demand Data


In total, sales data for 520 products, of which 458 are "active" products, were collected
over a 307-day period from October 10, 1992 to August 18, 1993.

12

The data was supplied

by Canadian Tire Pacific Associates in the form of a 10 M B text file with one line per day per
product recording sales from the stores.
Columns
Columns
Columns
Columns

1-6
7-9
10-18
19-124

13

Each line had the following format:

part number
Julian date
cost of the item (to three decimal places)
sales for stores 1 through 21 (5 columns per store)
14

In order to facilitate the analysis, the file was sorted into 458 "sales" files, with each of
these files containing the history of daily sales for one of the products.

Two changes were

made to the format of these files to improve readability: 1) a column was added between the
product number and the Julian date, and 2) all leading zeros were dropped.

Appendix A

contains a partial printout of the "sales" file for a typical product. Finally, a "distribution" file
summarizing the daily sales was created from each of the "sales" files. Each "distribution" file
contains the product's number, the product's cost, and the number of days during which various
quantities of the product were sold at each store.
Prior to the analysis, the "distribution" files for a large number of products were
examined, and, based on the shapes of the "histograms", the products were divided into three
groups. The first group, "low"-demand, comprises products that have demand on only a few
days, with the daily demand seldom exceeding three items.

1 2

The second group, "medium"-

Of the "active" products, only 420 are sold at store 6.

Strictly speaking, a line was written to the file only on days on which at least one store
registered a sale of the product.
13

According to the Julian calendar, days are numbered sequentially from 1 to 365 (366
during leap-years) beginning with the first of January.
14

17

demand, comprises products that have demand on approximately half of the days, with the daily
demand seldom exceeding more than six items.

Finally, the last group, "high"-demand,

comprises products that have demand on most days, occasionally upwards of twenty items, and
whose demand histograms resemble Poisson distributions.

The majority of the products

examined fell into the "low" and "medium"-demand groups; only a few "high"-demand products
were observed. Appendix B contains a printout of the "distribution" file for a typical product
in each group.
For most products, no theoretical distribution appeared to model the demand well.
Demand for "low" and "medium"-demand products followed a non-standard distribution with
a mass at zero and a relatively small tail. Although some theoretical distributions, such as the
mixed-Poisson, can be made to resemble this, it was unclear how well they would perform.
Further, the effects of sampling errors from such non-standard distributions were unknown.
On the other hand, the standard Poisson distribution did appear to model "high"-demand
products well; however, only a few products fell into that group. Therefore, in the absence of
a "good" theoretical candidate, the empirical demand function was chosen for the analysis. The
empirical function was readily available from the "distribution" files and offered the best
estimate of the "true" underlying function.

E. The Cost Data


Along with the sales data, management supplied estimates relating to the costs of holding
and ordering inventory. Management estimates that the cost of holding an item in inventory
for one year is 30% of the item's cost. Incorporated in this holding rate are a number of costs,
such as the opportunity cost of money invested and the costs incurred in running a store.
Because it is the annual cost of inventory that is of interest, either the compounded daily

18

holding rate or the simple daily holding rate can be used to determine the costs incurred during
a review period; however, the method of calculating and extrapolating the holding costs must
be consistent.

For the sake of simplicity, a simple daily holding rate is used.

In order to estimate the cost of ordering inventory, management analyzed the various
tasks that result from an order being placed. Using the average time required to fill and then
reshelve an order, management obtained an estimate of the direct labour costs involved. To
this, management added an estimate of the cost of transporting an order from the warehouse to
the store. Finally, the estimate was adjusted slightly upward to account for the cost of breakage
and errors.

Based on the analysis, management estimates the cost of placing an order for a

product to be $0,085, regardless of the size of the order.

19

III. M O D E L F O R M U L A T I O N

A . Terminology
In the previous chapter, several terms were introduced to describe the inventory system
at Canadian Tire Pacific Associates.

These terms, though perfectly adequate, are not widely

used in the academic literature to describe inventory management problems.

Therefore, in

order to avoid confusion and be consistent with the literature, the following terms are used
throughout this thesis.
Review Period -

The length of time between successive moments at which the


inventory position is reviewed.

15

Decision Epoch

The time at which a reorder decision is made.

Lead Time -

The length of time between the moment at which a decision to


place an order is made and the moment at which the order is
physically on the shelf.

(s,S) Policy

An operating policy in a periodic review inventory model in


which (i) the inventory position is reviewed every T days, (ii) a
replenishment order is placed at a review only when the inventory
level x is at or below the reorder level s (>

0), and (iii) a

replenishment order is placed for S-x units (S > s).


Lost Sales -

16

The situation in which any demand during a stockout is lost.

With respect to the terminology used at Canadian Tire Pacific Associates, a review period
equals the number of days between "flushes".
15

With respect to the terminology used at Canadian Tire Pacific Associates, S represents
the target level, and s represents the difference between the target level and the minimum fill.
1 6

20

B. Assumptions
In to order make the model of the inventory system mathematically manageable, several
simplifying assumptions are made. However, we believe that the following assumptions do not
significantly reduce the accuracy of the model.
1)

Demand can be approximated very closely by sales during the period in which the data
is collected. Generally, inventory levels at the stores are very high, and the number of
lost sales is assumed to be negligible.

In fact, the inventory levels for a number of

products were tracked over time during the pilot study, and not a single incidence of
stockout was observed. Because all products appear to have similar excess inventory,
it seems reasonable to assume that virtually all demand resulted in sales.
2)

The demands in successive periods are independent, identically distributed random


variables.

Preliminary tests (Fisher's exact tests) suggested no dependence between

sales on consecutive days, and plots of sales over time indicated no seasonal pattern.
3)

Demand is independent across products. That is, we assume that sales of one product
do not affect, nor can they be predicted from, sales of another product.

4)

Unmet demand results in lost sales with no penalty other than the loss of the sale.

5)

The duration of the review period for a store is an integer value and is fixed over a
planning period. For stores with two "picks" per week, we assume that the inventory
is reviewed every four days rather than on a four day - three day cycle.

6)

The decision epoch is the start of a review period. Review periods begin at midnight,
at which time the inventory is reviewed and orders are placed instantaneously.

7)

The duration of the lead time for a store is deterministic and integer-valued. In reality,
the lead time for some stores was stochastic, but management felt the variation could be
controlled and virtually eliminated.
21

8)

The lead time does not exceed the review period. In other words, items ordered at a
decision epoch arrive and are shelved before the next decision epoch. In practice, this
did not always occur.

9)

Orders arrive at the end of the lead time and are on the shelf to start the next day.

10)

Holding costs are incurred daily for all inventory held at the start of the day.

11)

The warehouse has an infinite capacity; that is, all orders to the warehouse are filled.
Because of the high inventory levels in the warehouse, stockouts in the warehouse are
very unlikely.

C . A Markov Chain Model


Consider the situation in which an (s,S) policy is applied to an inventory system based
on the above assumptions. Inventory is reviewed at the decision epoch for each of the periods
labelled t = 0, 1,2,

and replenishment occurs at the end of the lead time provided an order

was placed. Demand during day d in period t is a random variable

whose probability mass

function is independent of the day and period. The function is given by

f^ik) = Pr{ l

td

for k = 0, 1, 2, ...

= k} = a

where a > 0 and E a = 1. Let T denote the duration of a review period and L denote the
k

length of the lead time. Next, define D

T (

as the total demand during period t; D , as the total


L

demand during the lead time in period t; and D . , as the difference between D , and D ."
T

Lt

Assuming that successive demands , , . . . are independent, the probability mass function of
f

1 7

The aggregated demand variables are given by


^ , , = XX,

and

d=\

d=\

D _ =J:
T

Ut

d=L+l

22

each aggregated demand variable can be obtained by convolving the probability mass function
of % .
td

ls

Finally, let X, denote the inventory on hand at the beginning of period t just prior to

the review.
The process {X,} is a discrete time stochastic process with the finite, discrete state space
{0, 1, . . . , S } .

A typical sample path of the process with a review period of four days and a

lead time of two days is depicted in Figure 1. As period t begins, X, units are on hand. The
inventory is reviewed, and because X, is less than s, an order is placed for (S-X,) units. Over
the next two days, a demand of D

L r

occurs and the inventory drops accordingly.

With the

arrival of the order, the inventory level increases by (S-X,) at the start of the third day of the
period. Over the remaining two days, a demand of D . , is observed, bring the inventory level
T

down to X , .

Note that in this example, an order would not be placed in period t+l because

+ 1

r +

i exceeds s.

The stock levels at the beginning of two consecutive review periods are related by the
balance equation

_
{
K
*
*
~ \(X

t + l

( - v - T-L,X
s

L,y

DY

i/x <s
t

ifX >s

Tt

where the positive operator is interpreted as

= max {a, 0}.

For example, the probability mass function of D denoted f , is the T-th fold
convolution of f t . Mathematically, the function can be obtained using the recursive relation
1 8

and the identity f ^ = f


1

5(

23

DT(

CO

CM

-2

I "8
>

oa

00

24

Because X ,

+ 1

depends only on X , the process {X,} satisfies the Markov property


t

Pr{X =j\X
t+l

= i ,...,X _ =i _ X
0

= i) = Pr{X =j\X
t+1

= i}

and, therefore, is a discrete time Markov chain. Further, because the probability mass function
of the random variable , is independent of t, and thus so too are the probability mass functions
of the aggregated demand, the Markov chain is stationary.

19

D. The Transition Probability Matrix


The stationary transition probability p is defined as the probability of X ,
(>

+ 1

being in state

j given that X, is in state i, independent of the period t. In the inventory model, p,-,- represents
the probability of starting the next review period with j items on the shelf given there are i units
on hand at the start of the current period.

By convention, the transition probabilities are

arranged in an (S + l)x(S + 1) matrix P such that (P)y = p,-,. Thus, the (i + l)st row of P contains
the probability distribution for the stock on hand at the beginning of the next period given that
there are i units on hand at the start of the current period.

The matrix P is known as the

transition probability matrix. Note that since we are concerned with a steady state analysis, we
need not consider the possibility of initial stock levels greater than S: once the inventory level
is below S, it can never again exceed S.
The transition probability p

tj

is calculated by expanding (1) to include all possible

instances of demand that allow for a change in inventory from i units at the beginning of a
period to j units at the beginning of the next period. For example, suppose the inventory policy
(5,10) is in place, 2 items are on hand at the start of the current review period, and 7 items are

Henceforth, the subscripts t and d are omitted from the daily and aggregate demand
variables for the sake of brevity.
1 9

25

on hand at the start of the next period. Then only three scenarios are possible:
1)

No items are sold during the lead time (meaning that the stock level increases to 10
after replenishment), and 3 items are sold during the remainder of the period.

2)

One item is sold during the lead time, and 2 items are sold during the remainder of
the period.

3)

Two items are sold during the lead time (though demand could exceed 2), and 1 item
is sold during the remainder of the period.

The transition probability, p , is the sum of the probabilities of the various scenarios and is
2 7

computed by
p

2J

= Pr{D =0}Pr{D _
L

= 3] + Pr{D = l] Pr[D _ =2}

+ Pr{D *2] Pr{D _ = l]


L

In general, the transition probabilities for the inventory model are calculated as follows.

Case 1. The lead time is less than the review period


For 0 < / < s

i-l

[Pr{D =k}Pr{D _ >S-k}]


L

Pr{D >i}Pr{D _ >S-i}


L

if j = 0

i-l

Pij

^[PriD^^PrlD^S-j-kn+PHD^PriD^S-j-i}

if 0 < j <L S-i

k=0
s-j

[Pr{D =k}Pr{D _ = S-j-k}]


L

if S-i

k=0

26

<j^S

()
2

For s < i < S

Pr{D zi]

ifj = 0
ifO<jzi

p.. = \

Pr{D =i-j)
T

(3)

ifi<j<S

Case 2. The lead time equals the review period


For 0 < i < s

0
Pa

ifO<LJ<
S-i
ifj = S-i
if S-i <j S

Pr{D zi)
T

Pr{D = S-j}
T

(4)

For s < i < S, use (3).

E. The Steady State Probabilities


Provided 1) there is a positive probability of non-zero demand during a review period
and 2) there is a positive probability of zero demand during a review period,

then the

20

Markov chain described by (1) has a limiting probability distribution, ir = (ir , TT


0

where 0 < IT, < 1 for j = 0, 1,

S and E 7r = 1.
y

ir ),
s

Further, this limiting distribution is

independent of the initial state. In other words, the probability of finding the Markov chain in
a particular state in the long-run converges to a nonnegative number, no matter in which state
the chain began at time 0.

The limiting distribution is the unique nonnegative solution of the

equations

That is, 0 < Pr{D = 0} < 1. Given the nature of the problem, this assumption is not
very restrictive.
2 0

27

^ =E^-

far

j = 0, l,

(5)

and

= 1

(6)

For the proof that the limiting distribution is independent of the initial state and is obtained from
(5) and (6), the reader is directed to Appendix C .
In terms of the inventory problem, 7r is the steady state probability of having j units of
y

inventory on hand at the decision epoch.

However, some subsequent calculations are made

easier if the steady state probability of having j units of inventory on the shelf just after
replenishment is known. Instead of reformulating the Markov chain, these probabilities can be
obtained by "shifting" the limiting distribution TT.

Much in the same way that the transition

probabilities are calculated, the "shifted" limiting distribution, t], is obtained by accounting for
all possible instances of demand that allow for the "shifted" inventory position. For example,
suppose that the policy (5,10) has the limiting distribution TT. In order to have, say, 8 units on
hand immediately after replenishment, one of the following must occur:
1)

Ten items are on hand at the decision epoch and 2 items are sold during the lead time.

2)

Nine items are on hand at the decision epoch and 1 item is sold during the lead time.

3)

Eight items are on hand at the decision epoch and nothing is sold during the lead time.

4)

Either 2, 3, 4, or 5 items are on hand at the decision epoch and 2 items are sold during
the lead time.

The steady state probability of having 8 units on hand just after replenishment is calculated as

= n Pr{D
10

= 2] +iz Pr{D
9

= l] +n Pr{D
8

28

= 0} +[iz + iz + iz ]Pr{D
5

= 2}

+n Pr{D >2
2

In general, the "shifted" steady state probabilities are given by


s

ifj = 0

n Pr{D >i}
{

i=s+l
S

%.Pr{D = i-j]

ifl

j<S-s

i=max(/,s+l)
S
=

7t i r{Z) = i-;}+7i Fr{D ^5}

ifj = 5-5

i=max(/,s+l)

7 1 ^ ^ = 1-7}+

i=max(/>+l)

Tt Fr{Z> =5-y}+ii _.Pr{D ^S-7}


i

ifS-s<j<S

i=S-j+l

(7)

F . The Cost of Inventory


For this problem, the cost of inventory has two components: (i) a fixed ordering cost,
c , incurred whenever an order is placed, and (ii) a holding cost, c , incurred daily for each item
f

held in inventory.

The expected cost of inventory for a review period can be calculated by

summing the costs associated with each inventory position under steady state conditions.
Because a simple holding rate is used, this cost is simply adjusted by number of review periods
in a year to obtain the expected annual cost of inventory.
The ordering cost for a review period is relatively straight forward to calculate: either
an order is placed, in which case the order cost is incurred, or no order is placed, in which case
no cost is incurred. According to the rules of the inventory policy, orders are placed only if
the stock on hand at the beginning of a review period is less than or equal to s.

Further, the

probability that the review period begins with the inventory in one of these positions is equal
to the sum of the first (s + 1) steady state probabilities. Therefore, the expected ordering cost
29

for a review period is given by

= c Y,

E[OC]

n.

y=o

Unlike the simple structure of the ordering cost, the holding cost is incurred daily for
each item held in inventory.

Therefore, the daily holding costs associated with all possible

inventory positions must be weighted and summed to obtain the holding cost for the review
period. In order to make the calculations less complicated, a "shifted" review period, beginning
immediately after replenishment and ending just prior to the next replenishment, is considered.
Define e(0 to be the expected number of items on hand to start day i of the "shifted"
review period, and let g(i \f) denote the expected number of items on hand to start day i given
that there were j items immediately following replenishment.

21

The function g(z \j) is the sum

of the probabilities of possible demand weighted by the resulting stock levels; that is,

g(i\j)

j^kPriD^j-k)

To obtain the expected number of items on hand to start day i, independent of j, the above
function is summed over all possible values of j and weighted by the corresponding steady state
probabilities, yielding

ed)

s
j
=r, 5>Pr{Z). = /-}
7=0
k=\
;

In other words, g(i\f) is the expected number of items on hand to start day i given
e(0)=v\
21

30

The expected holding cost for a review period is then given by


T

E[HC]

= $> e(0
v

i=i

i=l ;=0

k=l

where c equals the simple daily holding rate multiplied by the cost of the item.
v

Although differently defined review periods are used to calculate the above expected
costs, the costs can still be summed to obtain the expected cost of inventory for a review
period.

The expected costs are calculated based on steady state conditions and, therefore,

represent the costs expected to be incurred during any T consecutive days. Summing the above
two expected costs and multiplying the sum by the number of review periods in a year yields
the expected annual cost of inventory,

E[AC]

[E[OC]+E[HC]]
T

365
j=0

i=l j=0

( )
g

fc=l

G . The Customer Service Level


There are many ways to define customer service, and the most appropriate definition
depends upon the nature of the business and the perspective of management. Two commonly
used definitions are: 1) the proportion of periods in which all demand is met, and 2) the
proportion of demand satisfied immediately from inventory. Although the former definition is
often used because of its simplicity, the latter definition is closer to what one commonly means
by service (Lee and Nahmias, 1993). A third definition, also relevant in retail environments,
31

is the probability that lost sales do not exceed some critical number. Other definitions, such
as probability that backorders are filled within a certain amount of time, are more applicable
to industrial and manufacturing settings where backlogging demand is common.
Given the retail environment with the possibility of lost sales that exists at Canadian Tire
Pacific Associates, management is concerned primarily with the fraction of sales that are lost.
For example, management views the situation in which demand exceeds stock by one unit every
period more favourably than that in which the same demand exceeds stock by three units every
other period. For this reason, the proportion of demand satisfied immediately from inventory
is the most appropriate measure of customer service.
The customer service level for a single review period,

CSLR ,
P

is given by

_ Demand satisfied during RP


Total demand during RP

Because we are interested in the long-run behaviour of the system, a measure of the steady state
customer service, C S L , must be obtained. As shown in Appendix D , the correct measure is

_ E[Demand satisfied during RP]


E[Total demand during RP]

which can be rewritten as

_ j _ E[Demand not satisfied during RP]

E[Total demand during RP]

Because of the steady state conditions, the above customer service level can be estimated
from any period of T consecutive days. As was done for one of the cost calculations, the T-day
period beginning just after replenishment is considered.

Suppose that there are j units of

inventory on hand immediately following replenishment. Then the conditional customer service
32

level is

E[(D -j)l

CSL \j = 1

(10)

E[D ]
T

The denominator in the second term is merely the expect demand during the period,
= 7>

E[D ]
T

(11)

where p is the mean of the random daily demand variable . The numerator, which is the
conditional expected demand that is not satisfied during the T-day period, expands to

7-1

E[(D -j) ]
+

= T u - j + Y,U-k)Pr{D

(12)

= k]

k=0

The reader is directed to Appendix E for a mathematical justification of (12). In order to obtain
the unconditional expected demand not satisfied, (12) is applied to all possible values of j, and
a weighted sum of the terms is calculated. The result is given by

y'-i

E[Demand not satisfied] = Y, *\j T\i - j + (j-k)Pr{D

= k}

;=0

j-1

;=0

it=0

- E[I] +

where E[I] denotes the steady state inventory level.

(13)

Y0-k)Pr[D =k)
T

Finally, the customer service level is

obtained by the substituting (11) and (13) into (9), yielding


s

T\i - E[I] + J>y

j-l

Y(J-k)Pr{D =k]
T

CSL = 1
(14)
m

Eil\

J2VjTU-k)Pr{D =k}

J=Q

fc=o

33

H . A Methodology for Evaluating an (s,S) Policy


In this section, a brief methodology summarizing the main results of the model is
presented. The methodology can be applied to evaluate a given (s,S) policy in terms of its cost
and its resulting customer service level.

Given the probability mass function of the daily

demand, f ; the duration of the review period, T; the length of the lead time, L ; the fixed cost
?

of placing an order, c ; and the daily unit cost of holding inventory, c :


f

1)

Calculate the aggregated demand probability mass functions f , f , and f


DT

DL

D x L

as the T-th

fold, L-th fold, and (T-L)th fold convolutions of f , respectively.


?

2)

Generate the transition probability matrix using either equation (2) or (4) and equation (3).

3)

Calculate the limiting distribution TT from (5) and (6).

4)

Obtain the L-day "shifted" limiting distribution rj using (7)

5)

Calculate the expected annual cost of inventory using (8)

6)

Determine the customer service level using (14)

34

IV. A N A L G O R I T H M F O R O B T A I N I N G T H E O P T I M A L (s,S) P O L I C Y

A . Introduction
The methodology developed in the previous chapter can be used to calculate the cost and
service level associated with a given (s,S) policy. In this chapter, an algorithm that finds the
feasible policy yielding the lowest cost is developed. A policy is feasible if it satisfies both the
basic condition {0 < s < S} and the imposed constraint on the customer service level.

22

In

order to find the optimal policy, the algorithm must combine the methodology for evaluating
a single policy with a search technique.
Search techniques are evaluated in terms of two somewhat antithetic criteria. On the one
hand, the search should locate the optimal solution or, at least, a "near" optimal solution; on
the other hand, the search should take as little time as possible.

Many search techniques

guarantee optimality provided the objective function and constraints exhibit certain properties,
such as convexity.

However, even if such a search technique also guarantees its termination

in polynomial time, the search might take too long to be practical. Alternatively, some search
techniques provide "reasonable", though sub-optimal, solutions very quickly. These techniques,
often called heuristics, must be evaluated in terms of both their speed and the accuracy of their
solutions. The choice of a heuristic over a search that guarantees optimality depends upon the
nature of the feasible space, the need for accuracy, and the "cost" of time.
Given the complexity of the cost and customer service level functions, it is very difficult
to show theoretically for what, if any, combinations of demand and costs the feasible space is
convex.

However, a plot of the objective function for a single product may be obtained by

Management specified that each policy must provide a customer service level of at least
97.5%. Therefore, the algorithm must incorporate the constraint: C S L > 0.975.
2 2

35

evaluating the costs for a number of policies within a grid. When the service level constraint
is included in these plots, "maps" of the feasible space are obtained.

Examination of the

"maps" for several products suggests that the space is convex over most regions; however,
"maps" for some products reveal some regions of non-convexity. Unfortunately, there is no
way of knowing the degree of non-convexity for other products, other stores, or different costs
estimates without a more rigorous survey of the feasible space.

Therefore, if one of the

techniques that guarantee optimality under the condition of convexity is employed, the search
would have to be evaluated as a heuristic. Instead, as a first step to finding a practical search
technique, a "crude" search that guarantees optimality under virtually all conditions is
investigated.

B. A Grid Search
The simplest search technique that guarantees optimality merely evaluates all policies in
the "grid" defined by { 0 < s < S } and { 0 < S

< S < S

min

}, where S

max

min

and S

max

are

some predefined values. That is, the grid search is a "brute force" method that examines every
policy within the grid.

23

Although the number of policies that must be examined is large, the

grid search is guaranteed to find the optimal policy provided that S


that is, provided S

min

< S

opt

< S

max

opt

is contained in the grid;

. The grid search algorithm proceeds by generating the

transition probability matrix for the policy (0,S ) and then evaluating the service level
min

associated with that policy. If the policy is feasible,

24

the cost associated with the policy is

The total number of policies evaluated is the sum of the first S


integers less the sum
of the first S -1 integers. Numerically, [(l/2)(S )(S +l) - (l/2)(S -l)(S )] policies are
examined.
2 3

max

min

2 4

max

That is, if the service level is adequate.


36

max

min

min

calculated and compared to the current lowest cost. The procedure continues until all points
in the grid have been examined and the optimal policy has been found. A flow chart of the grid
search algorithm is shown in Figure 2.
In order to assess the grid search, the algorithm was coded and compiled into an
executable program. The program was run for two products (a "medium"-demand product and
a "high"-demand product) and with four values of S

max

. In each run, S

min

was taken to be zero.

The following times were recorded for each trial:


TPM -

the amount of time spent generating the transition probability matrix

GAUSS -

the amount of time spent solving for the steady state probabilities

COSTS -

the amount of time spent calculating the expected annual costs

SERVICE -

the amount of time spent determining the customer service levels

TOTAL -

the total execution time of the program

The columns entitled "Grid Search" in Tables 2 and 3 summarize the results of the trials. A l l
times are recorded in seconds as required by a 486DX/33 M H z personal computer with an
empty buffer memory.
Three results are evident from the tables.

First, the vast majority of the execution time

is spent generating transition probability matrices and then solving for the steady state
probabilities, with the time being split almost equally between the two tasks. Second, the total
execution time of the algorithm increases exponentially as S

max

increases. For product 206917,

doubling S,^ from 30 to 60 led to an increase in the execution time of more than 2100% (from
17.2 seconds to 366.1 seconds). Third, the grid search algorithm as it stands does not appear
to be adequate for the problem at hand.

Given the large number of products that must be

evaluated, the algorithm is much too slow to be implementable.

37

Calculate the demand


probability functions

Initialize: s = 0; S = Smin]
cost* = 10 5
A

Calculate the probability


transition matrix for (s,S)

Evaluate policy (s,S)


Is service level ^ 0.975?
No
s = s+1

Yes
Is cost < cost*?
s = 0
S = S+1

Yes
s* = s; S* = S
cost* = cost

No

Is s = S-l?
Yes
Is S = Smax?

No

Yes

Print results
(s*,S*); cost*

Figure 2. The flow chart of the grid search algorithm.

38

Table 2. Execution times of the algorithms for product 200001, a 30-amp inline fuse.
(in seconds)

'-'max

10

20

30

40

Subroutine

Grid Search

Grid Search
Updating T P M

Heuristic

TPM

0.06

0.10

0.01

GAUSS

0.10

0.06

0.01

COST

0.05

0.05

0.01

SERVICE

0.01

0.01

0.01

TOTAL

0.50

0.35

0.27

TPM

1.26

0.21

0.10

GAUSS

1.19

1.60

0.23

COST

0.27

0.26

0.01

SERVICE

0.17

0.16

0.01

TOTAL

3.18

2.36

0.55

TPM

7.03

0.96

0.10

GAUSS

7.57

8.01

0.93

COST

0.79

0.85

0.01

SERVICE

0.47

0.42

0.01

TOTAL

16.64

11.37

1.26

TPM

22.57

1.63

0.15

GAUSS

29.58

30.03

2.06

COST

3.13

3.29

0.01

SERVICE

0.92

0.83

0.11

58.71

38.51

2.85

TOTAL

39

Table 3. Execution times of the algorithms for product 206917, a 6% solder connector
(in seconds)

-"max

30

40

50

60

Grid Search

Grid Search
Updating T P M

Heuristic

TPM

7.17

0.67

0.06

GAUSS

7.62

8.80

0.93

COST

0.98

0.87

0.10

SERVICE

0.16

0.21

0.06

TOTAL

17.20

11.76

2.20

TPM

23.90

1.57

0.22

GAUSS

28.61

29.11

2.09

COST

2.19

2.27

0.06

SERVICE

0.80

0.88

0.11

TOTAL

58.27

37.90

3.62

TPM

66.91

4.13

0.10

GAUSS

79.94

82.01

4.72

COST

5.68

5.77

0.16

SERVICE

2.12

1.97

0.05

TOTAL

158.40

100.41

6.54

TPM

155.09

8.94

0.40

GAUSS

186.07

189.51

8.76

13.67

13.53

0.38

3.50

3.59

0.22

366.14

227.94

11.20

Subroutine

COST
SERVICE
TOTAL

40

C. A Technique for Updating the Transition Probability Matrix


As was noted in the previous section, approximately half of the execution time of the grid
search algorithm is spent generating transition probability matrices. Furthermore, the amount
of time increases exponentially as S

max

increases. This increase is exponential for two reasons:

first, the number of transition matrices that must be calculated is a function of S,^ squared; and
second, the average size of the matrices, and hence the average number of calculations per
matrix, increases with S

max

. For example, when S

max

equals 30, the transition probability matrix

must be generated 465 times, with the largest matrix having dimensions (31x31). When S

max

equals 40, the matrix must be generated 820 times, with 355 of the matrices having dimensions
larger than (31x31).

The performance of the algorithm could be improved considerably if

either the number of matrices that must be generated or the number of calculations per matrix
is reduced. This section introduces a technique that accomplishes the latter by updating the
transition probability matrix for a new policy instead of generating it anew for each policy.

A new policy (s+m.S)


Suppose the policy (s,S) has associated with it the (S + l)x(S + l) transition probability
matrix P and the policy (s+m,S), where m is any integer satisfying 0 < s+m < S, has
associated with it the (S + l)x(S + 1) transition probability matrix J*. Then T can be obtained by
recalculating only \m\ rows of P.

Recall that the equations for generating a transition

probability matrix are divided into two sets based upon the row being calculated: equations (2)
or (4) for rows 0 through s, and (3) for rows (s + 1) through S. The equations themselves are
independent of s; only the limits defining the cases contain s.

Therefore, only the \m\ rows

that are affected by the change in the limits need to be recalculated. The following updating
technique can be used to obtain 7:
41

1) If m > 0:

rows i = (s + 1), (s+2),

2) If m < 0:

rows i = (s-1), (s-2),

(s+m) are recalculated using (2) or (4).


(s-m) are recalculated using (3).

3) A l l other rows of T are identical to those of P.


The reader is directed to Appendix F for a mathematical justification of the technique.

A new policy (s.S+m)


Suppose the policy (s,S) has associated with it the (S + l)x(S + l) transition probability
matrix P and the policy (s,S+m), where m is any positive integer, has associated with it the
(S+m+l)x(S+m+l) transition probability matrix "P.

Then T can be obtained by modifying

each row of P and adding m additional rows and columns. The updating technique is not as
simple as that for a new policy (s+m,S) for two reasons: the dimensions of P and T differ, and
the equations for generating a transition probability matrix contain S. Nevertheless, an updating
technique that requires much less computing time than generating the matrix anew can be
developed.

The following technique can be used to obtain P:

1) For rows i from 0 through s:


For columns j from 0 through m: recalculate using (2) or (4).
For columns j from (m+1) through (S+m): enter the (j-m)th column entry of P.
2) For rows i from (s + 1) through S:
For columns j from 0 through S: enter the corresponding value from P.
For columns j from (S + 1) through (S+m): enter 0.
3) For rows i from (S + 1) through (S+m): recalculate using (3).
The above technique is justified mathematically in Appendix G .

42

The modified algorithm


The updating technique can be easily incorporated into the grid search algorithm with
only a slight change in the manner in which s is incremented. Figure 3 shows the flow chart
of the new algorithm. As before, the algorithm was coded and compiled into an executable
program, and the various execution times were recorded. The results are listed in Tables 2 and
3 under the columns "Grid Search; Updating T P M " .
Updating the transition probability matrix does improve the performance of the
algorithm.

The time required to generate the transition probability matrices is reduced by

approximately 90%.

This translates to a reduction in total execution time of approximately

30%. Not surprisingly, the reductions are greater for large values of S

max

However, despite

this seemly significant improvement, a decrease of only approximately 0.8 seconds is obtained
when S,^ equals 20.

Further, when S ^ equals 30, the algorithm requires over 11 seconds,

which is still much too high.


The execution time is now dominated by the time required to solve for the steady state
probabilities. The steady state probabilities could be solved by using approximation techniques
which are faster than solving the systems exactly; however, because the probabilities are often
very small numbers, the approximation techniques would be unable to provide the required
accuracy. The only remaining way to decrease the execution time is to reduce the number of
policies that are evaluated during the search. This can be done by either reducing the size of
the grid being searched or reducing the number of policies being evaluated within the grid. The
following section introduces a method of reducing the size of the grid by obtaining a lower
bound for S, namely S .
min

43

Calculate the demand


probability functions

Initialize: s = 0; S = Smin|
cost* = 10*5
k= 1

Update the probability


transition matrix for (s,S)

Evaluate policy (s,S)


Is service level ^ 0.975?
No

Yes

iNo

s = s+k

Is cost < cost*?


If k=l, s=s+l
S = S+1

Yes
s* = s; S* = S
cost* = cost

No

Ifk= 1, iss = S-l?


If k =-1, is s = 0?
Yes
Is S = Smax?

No

Yes
Print results
(s*,S*); cost*

Figure 3.

The flow chart of the grid search algorithm utilizing the updating technique for
the transition probability matrix.
44

D. A Lower Bound on S
As mentioned earlier, the size of the grid is specified by the number of policies within
the domain defined by {0 < s < S} and {0 < S

< S < S }. Thus, the size of the grid,

min

max

and hence the total amount of computation time, can be reduced by obtaining tight bounds on
S. Unfortunately, because of the extreme non-linearity of the objection function and the service
level constraint, obtaining a mathematical upper bound on S is very difficult and beyond the
scope of this work. This section introduces a method for obtaining a lower bound on S .
25

For a given value of S, an upper bound on the customer service level can be found as
follows.

Suppose that there are S units of inventory on the shelf at the beginning of every

review period, regardless of demand. No (s,S) policy can provide a higher level of customer
service because there exists a positive probability of beginning a review period with less than
S units on the shelf. Thus, the customer service level associated with starting each review
period with S units on the shelf is an upper bound on the customer service level for any (s,S)
policy. From (10), this level is

CSL 5 =

1-

E[(D -SY]
T

( >
15

E[D ]
T

Replacing j with S in (12) and then substituting (12) and (11) into (15) yields

CSL 15 = - - J2(S-k)Pr{D = k]
T

( )
16

To obtain S , use (16) to find the largest value of S with a customer service level less than
min

0.975.
There are two criteria for a good lower bound on S: the bound must be no larger than

This method was proposed by Kaan Katircioglu.


45

S , and it must be very close to S .


opt

These criteria ensure that the optimal policy will be

opt

contained in the search grid and that the size of the grid is reduced by as much as possible.
Based on these criteria, the above method of obtaining a lower bound is assessed. A value for
S

min

is obtained for each of the products in product category 20 and compared with the

corresponding value of S .

The results are illustrated in Figure 4, which shows the number

26

opt

of occurrences of various S

min

and S

opt

combinations. Note that a point lying on the 4 5 line

represents a "perfect" bound, while a point lying close to the S

opt

axis represents a very "loose"

bound. The absence of any points above the 4 5 line indicates that the first criterion is satisfied
in each instance: the method did not generate a value of S
of S .
opt

min

exceeding the corresponding value

Moreover, the bounds are reasonably "tight" for 85% of the products analyzed; that

is, for those products with S

opt

equal to 10 or less.

become steadily worse. Because values of S

opt

27

However, as S

opt

increases, the bounds

are likely to be larger for these products at the

ten Jumbo and Extra Jumbo stores and for other products with higher demand, the lower bounds
are not expected to be very "tight" in general.
Although obtaining the bound S

min

does reduce the size of the grid, the corresponding

reduction in the execution time of the algorithm is miriimal. For example, if S,^ equals 60 and
a value of 30 is obtained for S , the program would still require approximately 215 seconds
min

to search the grid (compared to the 228 seconds required without a lower bound on S). Because
the execution time increases exponentially with S , a tight upper bound on S would likely have
opt

a more significant impact on reducing the execution time of the algorithm. Further research
on this issue is required.

The optimal policy for each product was obtained using a grid search with an extremely
large upper bound.
2 6

2 7

On average, S

min

is approximately half of S

opt

46

for these products.

47

The only remaining approach to improving the algorithm is to modify the search so that
fewer policies within the grid are evaluated. Toward this goal, assumptions can be made with
respect to the feasible space, and a heuristic search can be developed based on these
assumptions.

E . A Heuristic Search
As mentioned previously in this chapter, a "map" of the feasible space for each of
several products was obtained. Upon closer examination, the "maps" illustrate two patterns
without exception: for a given value of S, both the cost and the customer service level increase
as s increases.

The following intuitive argument is offered as a possible explanation for the

observed behaviour. When S is held constant, increasing s results in more instances in which
an order is placed upon review. Hence, the average stock level would increase, which, in turn,
would lead to an increase in the cost and the customer service level.

28

With this in mind, a

heuristic search based on the following assumptions is developed: for a given value of S, both
the cost and the customer service level are monotonically increasing functions of s.
In general, the heuristic proceeds as follows.

Having just incremented S by one, the

customer service level of the policy (s,S) is evaluated. If the policy is feasible, s is decreased
until the lowest value of s producing a feasible policy is found. If the policy is not feasible,
s is increased until either the cost exceeds the current lowest cost for a feasible policy, a
feasible policy is obtained, or s equals S-l. In the event that a feasible policy is found, the cost

In order to prove that the customer service level increases as s increases, it would be
sufficient to show that the probability of placing an order increases as s increases. Such a result
might be possible if assumptions regarding the demand function are made. Further, if both the
probability of placing an order and the average stock level increase, then both the ordering cost
and the holding cost would increase. No proofs are offered here.
2 8

48

of the policy is calculated: if the cost of the policy is less than the current lowest cost, the new
policy becomes the current "best".

Finally, S is increased by one and the process repeats,

provided S does not exceed some predefined value, S

max

incorporating the heuristic search is shown in Figure 5.

The flow chart of the algorithm


Note that the algorithm begins by

attempting to improve on the lower bound S : the policy (S


min

is not feasible, S

min

min

-l,S

min

) is evaluated, and, if it

is increased by one. The improvement continues until a feasible policy is

found.
As previously mentioned, a heuristic search must be evaluated in terms of both its speed
and the accuracy of its solutions.

To evaluate the heuristic on the basis of speed, the same

approach used to evaluate the previous algorithms is employed.

The columns entitled

"Heuristic" in Tables 2 and 3 contain the various execution times of the heuristic. The heuristic
is a vast improvement over the previous search techniques: the reduction in execution time is
enormous and becomes more so as S

max

increases.

For a S

max

of 20, the reduction is

approximately 75% of the time required by the grid search algorithm; and for a S
29

max

of 60,

that reduction soars to over 95%. More importantly, the heuristic can search a grid with a
of 40 in under 4 seconds or a grid with a S

max

of 60 in under 12 seconds. These low execution

times should be sufficient to allow for a large number of products to be analyzed in a


"reasonable" amount of time.
In order to further assess the practicability of the heuristic, the total time required by the
heuristic to find solutions for the entire product category was determined and compared to the
corresponding time for the grid search algorithm. With a priori knowledge of the optimal
solutions, conservative, yet reasonable, values of S

max

were selected and used by both of the

Hereafter, "grid search algorithm" refers to the algorithm utilizing the grid search, the
updating technique, and the lower bound, S .
2 9

min

49

Calculate the demand


probability functions

Calculate Smin
S = Smin; s = S-l

Update the probability

S = S+l
s = S-l

t transition matrix for (s,S)


No

No

Is cost < cost*?

Is service level 0.975?

Is service level ^ 0.975?

Yes

Yes

No

s = s-l

Yes
Is s < S-l?

No

Yes

No

Yes

Update the probability


transition matrix for (s,S)

s = s+l

Is s 2: 0?

Update the probability


transition matrix for (s,S)

Update the probability


transition matrix for (s,S)

Is service level 0.975?


No
S = S+l

Is service level 0.975?

s = s+l

Yes
Is cost < cost*?

No

No

Is cost < cost*?

Yes

Yes
No

s* = s; S* = S
cost* = cost

Is S = Smax?

s* = s; S* = S
cost* = cost

^Yes
Print results
(s*,S*); cost*

Figure 5. The flow chart of the heuristic algorithm.


50

algorithms.

30

The grid search algorithm required approximately 9 hours and 41 minutes to

find the solutions, while the heuristic required only slightly more than 23 minutes. Based on
speed, the heuristic is preferable to the grid search algorithm.
Finally, to evaluate the heuristic based on the accuracy of its solutions, its solutions were
compared to the previously obtained optimal policies.

Without exception, the heuristic

algorithm found the optimal policy. Although there is no guarantee that the heuristic will find
the optimal solution for different products or different demand functions, the heuristic appears
to work extremely well.

Based on the fast execution time and the apparent accuracy of the

solutions, the heuristic will be used in the development of the inventory tool.

For the test, the following values of S


100 (3), and 125 (2).
3 0

max

were used: 20 (273 products), 30 (19), 50 (23),

51

V. T H E INTERFACE

With the model formulated and the algorithm developed, the only remaining task in the
development of the prototype is the creation the interface. In fact, two interfaces are created:
one that displays results in terms of minimum fills and target levels, and one that displays
results in terms of reorder points and target levels. To be consistent with the previous chapters,
the latter interface is described here.

31

In its present form, the interface allows the manager to set review parameters, to
compare optimal and current policies, and to evaluate alternate policies. From the main menu,
the manager selects the product, store, duration of the review period, length of the lead time,
and value of S

max

Once the parameters are set, the system calculates the optimal policy and

then evaluates the current policy, displaying results as they are obtained. In particular, the
reorder point, target level, expected annual cost, and expected customer service level are
displayed for each policy. If a current policy meets the desired customer service level, the
expected annual savings of the optimal policy are displayed, in terms of both dollars and
percentage of current cost; otherwise, the value of the current customer service level is
displayed in red to indicate that it is deficient.

Finally, the manager can choose to evaluate

alternate policies or to return to the main menu.


Although the prototype is far from the ultimate, integrated inventory control system, it
is still valuable to management.

As mentioned in Chapter II, inventory policies at Canadian

Tire Pacific Associates are currently based on "rules of thumb" that incorporate marketing

Because significant changes to the interface are expected as feedback from management
is received and as the system is brought on-line, only a brief description of the present interface
is given.
3 1

52

strategies. The prototype provides management with a means of determining the proportion of
the cost of inventory that is not attributable to meeting customer demand.

For example,

consider a hypothetical consultation in which the manager chooses to analyze product 200001,
a 30-amp inline fuse, at store 6. The prototype displays to the manager the current policy of
(12,14), which provides a customer service level of 100.0% at an annual cost of $7.48, and the
optimal policy of (3,9), which provides a customer service level of 97.7% at an annual cost of
only $3.19. If, for some reason, the manager feels the optimal policy is undesirable, he or she
can investigate the additional cost of holding excess inventory. Suppose the manager chooses
to evaluate the policy (6,10). The prototype evaluates the policy and displays the results: the
customer service level is 99.8% and the annual cost is $4.41.

With the alternate policy,

virtually all demand is satisfied and the cost of inventory is still reduced by over 40%. Thus,
the manager ascertains that approximately 40% of the current cost of inventory for this product
is directly attributable to marketing considerations.

Using the prototype in this way,

management can begin to understand better the nature of its inventory costs. A description and
graphical depiction of the above hypothetical consultation are presented in Appendix H .
As for the technical details of the system, the prototype can run on any computer using
the DOS operating system, having approximately 420K of available conventional memory, and
attached to a V G A or S V G A monitor. Further, the prototype can be used on a machine without
a math coprocessor; however, performance is slower. The prototype consists of two modules
linked together into one executable program.

The "interface" module contains the various

interactive subroutines, and the "main" module contains the methodology of the model and the
logic of the heuristic search. Both modules are coded in Fortran and compiled using

Microsoft

Fortran 5.0, which provides many extensions to standard Fortran. The source codes for the
"interface" module and the "main" module are listed in Appendix I and Appendix J,
53

respectively.
In addition to the above technical specifications, the program requires the presence of
certain files in certain directories.

The program uses the "distribution" files mentioned in

Chapter II to read the unit costs and the empirical demand functions.

Each product has a

unique "distribution" file, the name of which is the six digit product number followed by the
extension ".dst". The text file containing the existing policies at each store must be located in
the same directory as the "distribution" files.

Finally, the file tmsrb.fon, which contains the

font used by the interface, must be located in the directory from which the program is executed.
In its future versions, the system should be more automated and more "user-friendly".
Rather than having the manager choose an upper bound for the search, the algorithm should
incorporate a method of determining S

max

. For this to happen, either a theoretical upper bound

must be obtained or a heuristic for terminating the search must be developed. Also, the amount
of time spent waiting for calculations to be performed can be reduced by reading the optimal
and current policies, and their associated costs and customer service levels, from a file or
database.

This "solution" file could be created any time prior to the consultation by running

the system in a "batch" mode. The interface should allow the manager to change cost estimates
and service level values, view results graphically, and print results and summary documents.
Finally, the system should provide an option for automatically incrementing the product and/or
store during a consultation.

This option would enable a manager to review quickly the

inventory policy of a product at each store.

54

VI. R E S U L T S A N D SENSITIVITY A N A L Y S I S

A . Comparison of Current Policies to Optimal Policies


In order to estimate the potential savings of implementing optimal policies, the solutions
obtained in the Chapter IV are analyzed in more detail. For each product, the current policy
is evaluated and then compared to the optimal policy with respect to cost and customer service
level. Finally, the potential savings of the optimal policies are extrapolated to all products and
all stores.
Of the 420 products examined, each of 37 products has an existing policy that fails to
provide the desired customer service level of 97.5%. However, most of these policies "just"
fail to do so; only 4 policies provide a customer service level of less than 90%.

Table 4

provides a list of these 37 products, each with its current customer service level, its current
annual cost, and the additional cost of its optimal policy.
4 are in order.

32

Two comments regarding Table

First, the current customer service level for product 203312, an amber

driveway marker, is listed at a misleading 30.3%.

Examination of the demand distribution

reveals that this product was sold on only 1 of the 307 days during which sales data were
collected and, on that day, 13 of the markers were sold.

Clearly, this data point constitutes

either an error or an unusual event; the current policy of (3,4) does not allow for more than 4
items to be sold per review period. Second, the additional cost of the optimal policy for each
of 5 products is negative. In other words, for each of these products, the current policy, which
fails to provide the desired customer service level, costs more than the optimal policy, which

This is the difference between the expected annual cost of the optimal policy and the
annual cost of the current policy. It is the minimum additional cost required to increase the
customer service level to at least 97.5%.
3 2

55

Table 4. Products with insufficient existing policies.


Product

Current CSL
(%)

Current Annual
Cost ($)

Additional Cost of the


Optimal Policy ($)

206932

97.4

2.04

-0.51

204570

97.3

2.22

-0.25

203053

97.3

2.48

0.09

206550

97.2

1.18

0.42

206547

97.2

1.05

0.35

206565

97.2

1.46

0.56

203702

97.2

3.40

1.57

206876

97.2

1.55

0.61

205752

97.2

3.30

1.53

205922

97.2

1.08

0.36

206857

97.2

1.80

0.73

205393

97.2

1.90

-0.03

201513

97.1

3.45

0.15

203405

97.0

2.55

0.37

203069

96.8

2.95

-0.48

203071

96.7

3.21

-0.01

205635

96.7

3.90

0.29

203914

96.6

4.60

1.60

204601

96.2

2.52

0.61

203326

96.0

1.44

0.14

202003

95.8

8.76

4.37

206516

95.8

1.12

0.29

206517

95.8

2.83

1.20

206350

95.8

3.33

1.47

205932

95.8

1.80

0.66

203936

95.2

5.98

2.94

56

Product

Current C S L
(%)

Current Annual
Cost ($)

206932

97.4

2.04

-0.51

203939

94.8

4.13

1.93

203977

94.5

12.16

12.42

206551

94.5

1.32

0.77

205389

93.4

5.98

0.47

203590

92.7

12.23

6.07

206567

91.9

1.22

0.70

203591

90.5

12.28

8.34

205390

88.7

2.91

0.74

203318

83.3

1.36

0.84

206393

77.6

3.19

2.89

203312

30.3

2.37

5.11

Additional Cost of the


Optimal Policy ($)

provides at least the desired customer service level. For the 36 products, the total additional
cost of the optimal policies is $54.20.

33

Of the remaining 383 products, most have an existing policy that provides a customer
service level well above 97.5 %. When the customer service levels are rounded to one decimal,
each of 253 products has a customer service level of 100.0%, and each of 347 products has a
customer service level of at least 99.0%. In contrast, each of only 58 products has an optimal
policy that yields a customer service level of at least 99.0%.

3 3

34

For each of 37 products, the

The cost associated with product 203312 is not included in the total.

Optimal policies do not have customer service levels of exactly 97.5% because the
function is discrete. For "low"-demand products, a unit step in s or S results in a relatively
large change in the customer service level.
3 4

57

current policy is identical to the optimal policy.


The extremely high level of service provided by most policies allows for substantial
savings in the cost of inventory. With current policies, the estimated annual cost of inventory
for all 420 products is $4,207.43; whereas, the expected annual cost of the optimal policies is
only $1,868.84. This amounts to a savings of approximately $2,340 or over 55% of the current
cost of inventory.
In order to further assess the savings, the difference between the costs of the current
policies and the costs of the optimal policies are examined in more detail. For each of the 383
products whose existing policy provides a customer service level above 97.5%, the difference
between the estimated annual cost of the existing policy and the expected annual cost of the
optimal policy is calculated.

The resulting histograms of the savings in (a) dollars and (b)

percentage of current cost are shown in Figure 6. The particulars for the current and optimal
policies for all 420 products are provided in Appendix K .
As evident from Figure 6(a), the majority of the expected savings in absolute terms
comes from only six products. In order to examine these products more closely, the current
and optimal policies, along with the associated costs and savings, for each of the six products
are listed in Table 5.

Each current policy is very different than its corresponding optimal

policy, resulting in excessive inventory for each product. In fact, over half of the total expected
savings could be realized by implementing the optimal policy just for each of these six products.
Interestingly, five of the six products are sealed beam headlights.

58

90

10 - 20

30 - 40

50 - 60

70 - 80

90- 100

Savings (%)

(b)

Figure 6.

The distribution of savings of optimal policies in (a) dollars and (b) percentage
of current cost.

59

Table 5. Products with the largest potential absolute savings.

CURRENT
PRODUCT

203680

Cost

CSL

($)

(%)

SAVINGS

Cost

CSL

($)

(%)

($)

(%)

194

200

640.14

100.0

37

48

92.45

97.5

547.69

85.6%

94

100

236.52

100.0

18

22

38.50

97.8

198.02

83.7%

78

90

230.43

100.0

19

23

44.54

97.5

185.89

80.7%

145

175

195.22

100.0

34

45

37.27

97.5

157.95

80.9%

48

60

104.91

100.0

13

17

26.82

97.7

78.09

74.4%

68

80

72.65

100.0

14

22

16.99

97.5

55.66

76.6%

203677
203672

OPTIMAL

203094
203642

203655

H6054 rectangular sealed beam headlight


H4656 rectangular sealed beam headlight
6053 rectangular sealed beam headlight
9004 halogen bulb
4652 rectangular sealed beam headlight
6104 7" sealed beam headlight

Although Figure 6(a) seems to indicate that the majority of the current policies are close
in cost to the optimal policies, this is very misleading. For example, suppose the optimal policy
for a product costs $1, and that the current policy costs $2.

In absolute terms, the optimal

policy saves only $1; but in relative terms, the optimal policy saves 50% of the current cost.
When savings are viewed in this manner, as in Figure 6(b), it is clear that substantial savings
can be realized for the majority of the products. In fact, both the mode and the mean of the
savings are between 40% and 50% of the current costs.
In order to extrapolate the above savings to obtain the potential savings for product
category 20 at all 21 stores, the differences between stores must be considered.

60

During the

pilot study, the current policy for each of several products at each "size" of store was evaluated.
The study suggested that "medium" and "large" stores have a similar amount of excess
inventory and that "jumbo" and "extra jumbo" stores have much more excess inventory. One
could reasonably expect that the additional excess inventory allows for higher savings to be
realized at the "jumbo" and "extra jumbo" stores.

Thus, because 18 of the 21 stores are

"medium" or larger, the expected 40-50% savings at store 6 can be viewed as a lower bound
on the potential savings to Canadian Tire Pacific Associates from implementing optimal policies
for product category 20 in all its stores.
Finally, in order to obtain the overall potential savings, the expected savings from
product category 20 must be extrapolated to all product categories.

Ideally, the proportion of

inventory comprising each product category and the relative savings that can be realized for
each category would be used to obtain a "good" estimate of the overall potential savings.
However, as this information is not known, only a crude extrapolation is possible.

Thus, the

analysis proceeds under the assumption that a 40-50% savings can be realized in each product
category.

35

Before an estimate of the total potential savings in absolute terms can be obtained, the
proportion of the current inventory to which the savings apply must be determined. Up to this
point, the analysis has been concerned solely with reducing inventory at the stores. However,
it is inappropriate to perform further analysis without considering the entire inventory system,
including the central warehouse.

Because the lead time for orders from Toronto is highly

variable and considerably greater than those at individual stores, Canadian Tire Pacific

During the pilot study, the current policies for a paint brush and an ironing board were
evaluated and found to result in excess inventory similar to that of product category 20.
Although this in no way justifies the assumption, it does lend some support.
3 5

61

Associates must keep a fairly high safety stock at the warehouse.

Without knowing the

proportion of inventory serving as the safety stock, it is inappropriate to assume any reduction
in inventory at the warehouse is possible.

Therefore, the relative savings of implementing

optimal policies is applied only to the inventory held in the stores.

36

Of the estimated $28

million in inventory, approximately half is held in the stores; therefore, the 40-50% savings
translates to a savings of approximately $5.5 to $7 million per year.

B. Sensitivity Analysis on the Ordering Cost and Holding Rate


The above analysis was based on estimates of the ordering cost and the annual unit
holding rate

37

provided by management.

As described in Chapter II, these estimates

incorporate a number of costs that are difficult to quantify or that are speculative. Therefore,
there is some question as to the accuracy of the estimates. In this section, errors of +$0,015
in the ordering cost and +5% in the holding cost are assumed in order to determine the
sensitivity of the model to errors in these variables.
The analysis proceeds as follows.

38

Based on an ordering cost of $0,080 and a holding

rate of 30%, the optimal policies from the previous section were obtained.

39

Then, assuming

Of course, this assumes that the excess inventory currently held in the stores is not
required as part of the safety stock. Based on the large amount of inventory at the warehouse,
this assumption seems reasonable.
3 6

3 7

Hereafter, simply referred to as the holding rate.

A n error of +$0,015 in the ordering cost implies an actual ordering cost of $0,070, a
relative error of approximately 21%; and an error of -$0,015 implies an actual ordering cost of
$0,100, a relative error of 15%. A n error of +5% in the holding rate implies an actual rate of
25%, a relative error of 20%; and an error of -5% implies an actual holding rate of 35%, a
relative error of approximately 17%.
3 8

3 9

These policies are referred to as "optimal" policies for the duration of this chapter.
62

the actual ordering cost and/or holding rate are different from management's estimates, the
heuristic is used to obtain the "true optimal" policies.

Finally, the "optimal" policies are

evaluated based on the actual ordering cost and holding rate and then compared to the "true
optimal" policies.

For each possible combination of ordering cost and holding rate, three

numbers are recorded: the number of products with an "optimal" policy that differs from its
"true optimal" policy, the total cost of implementing the "optimal" policies given the actual
ordering cost and holding rate, and the difference between the cost of implementing the
"optimal" policies and the cost of implementing the "true optimal" policies. The results of the
analysis are summarized in Table 6.

Table 6. A comparison of "optimal" policies to "true optimal" policies.

Actual Ordering Cost


$0,070

Actual
Holding
Rate

25%

5 products
$1554.39
$0.02

30%

54 products
$1814.70
$1.82

35%

79 products
$2072.70
$5.74

$0,085

$0,100

51 products
$1605.90
$0.92

88 products
$1654.64
$4.49
48 products
$1920.26
$0.88

48 products
$2129.40
$1.36

2 products
$2183.12
$0.00

The table should be read as follows: If the actual ordering cost is $0,070 and the actual
holding rate is 25%, then each of 5 products has an "optimal" policy that is different from its
"true optimal" policy. The total cost of implementing the "optimal" policies is $1554.39, which
is $0.02 more than implementing the "true optimal" policies.
4 0

63

The model appears to be quite insensitive to relative errors in the order of 20%. Under
the worst case scenario, when one of the variables is over-estimated and the other is underestimated, the "optimal" policies result in a total cost of inventory which is only approximately
3% higher than the cost of the "true optimal" policies. Further, because demand is not changed
by errors in these estimates, each of the "optimal" policies still provides a customer service
level of at least 97.5% under all of the scenarios. Finally, although the cost of the "optimal"
policies varies significantly for the different scenarios, the relative savings remain virtually
constant. Table 7 lists the cost of existing policies and, in parenthesis, the relative savings of
the "optimal" policies for each of the different combinations of ordering cost and holding rate.
The cost of the existing policies varies in the same manner as that of the "optimal" policies; the
relative savings for each of the scenarios remains around 55 %. Therefore, even in the presence
of such errors in the ordering cost and holding rate, the projected savings of implementing the
"optimal" policies would be unchanged.

Table 7. The cost of existing policies and the relative savings of the "optimal" policies under
various scenarios.

Actual Ordering Cost


$0,070

Actual
Holding
Rate

25%

$3501.53
(56%)

30%

$4124.38
(56%)

35%

$4747.25
(56%)

64

$0,085

$3584.64
(55%)

$0,100

$3667.64
(55%)
$4290.48
(55%)

$4830.26
(56%)

$4913.20
(56%)

C. Sensitivity Analysis on the Demand Probability Mass Function


In this section, the sensitivity of the model to slight changes in the demand probability
mass function is investigated.

As described in Chapter II, the demand function used in the

model is based solely on observed sales; however, this empirical function is only one possible
instance of the underlying "true" demand function. For example, had the data been collected
over a period both starting and finishing one month earlier, many of the empirical functions
would be slightly different.

Consequently, depending upon the degree to which the empirical

functions vary and the sensitivity of the model to these variations, the "optimal" policies from
the model might be inaccurate. For example, recall the case of the amber driveway marker:
only thirteen markers were sold, and all were sold on the same day.

Because the empirical

demand function is used, the model calculates an "optimal" policy of (12,13); clearly, this
policy is impractical. Although this example is extreme, it does indicate the danger of using
unrealistic empirical demand functions.

41

As discussed in Chapter II, three classes of products were identified; namely "low",
"medium", and "high"-demand products. For this analysis, the same method of classification
is used. Two products are selected from each of these groups, and two new "distribution" files
are created for each of the six products.

For each product, one of the files contains two

additional days of data, with each day having a demand equal to the maximum observed demand
for that product. In the second file, only one additional day of data is added, but the demand
on that day is two more than the maximum observed demand. The situations that could give

Certainly, a rigorous analysis to determine both the extent of variation in the empirical
demand functions and the effect of using the empirical functions needs to be performed.
However, such an analysis is beyond the scope of this thesis; only a brief analysis that might
suggest the degree to which the model is sensitive is performed here.
4 1

65

rise to such changes in the demand data are termed Scenario 1 and Scenario 2, respectively.

42

The analysis proceeds in a manner similar to the one in the previous section. Given the
demand that was originally observed, the "optimal" policies were obtained. Now, assuming the
"true" demand function corresponds to the demand under Scenario 1, the "true optimal" policy
for each product is calculated.

Then, each "optimal" policy is re-evaluated using the "true"

demand function and compared to the "true optimal" policy.

The analysis is then repeated

assuming the "true" demand function corresponds to the demand under Scenario 2.

Table 8

lists the results for each product and scenario.

Table 8. "True optimal" and "optimal" policies for each demand scenario.

Product 202101 (low demand)


s

"True optimal"

4.70

99.3

"Optimal"

4.70

99.3

"True optimal"

6.63

97.6

"Optimal"

2.

4.61

87.5

Scenario
1

Cost ($)

C S L (%)

Product 203507 (low demand)


s

"True optimal"

3.34

98.1

"Optimal"

2.58

97.2

"True optimal"

5.08

98.0

"Optimal"

2.73

70.2

Scenario
1

Cost ($)

C S L (%)

To be clear, the scenarios are defined as follows:


Scenario 1:
The addition of two days, each with a demand of max
Scenario 2:
The addition of one day with a demand of max+2
where max is the maximum observed daily demand for each product in the sample period.
4 2

66

Product 201032 (medium demand)


Scenario
1

Cost ($)

"True optimal"

12

13.77

97.6

"Optimal"

11

13.38

97.3

"True optimal"

13

14.26

97.7

"Optimal"

11

13.38

97.0

C S L (%)

Product 203039 (medium demand)


Scenario
1

Cost ($)

"True optimal"

19

2.56

97.5

"Optimal"

16

2.51

96.9

"True optimal"

20

2.58

97.6

"Optimal"

16

2.49

96.8

C S L (%)

Product 203677 (high demand)


s

Cost ($)

"True optimal"

18

23

39.81

97.7

"Optimal"

18

22

38.17

97.2

"True optimal"

18

23

39.95

97.8

"Optimal"

18

22

38.31

97.3

Scenario
1

C S L (%)

Product 203680 (high demand)


Scenario
1

Cost ($)

"True optimal"

38

49

94.98

97.6

"Optimal"

37

48

91.75

97.1

"True optimal"

37

49

94.84

97.5

"Optimal"

37

48

92.06

97.2

67

C S L (%)

The model is most sensitive to changes, or errors, in the demand functions of "low"demand products. When only one additional day of demand for max+2 units is added to the
data, the "optimal" policy for each of the "low"-demand products results in a very low customer
service level. In fact, for one of the products, the customer service level drops to almost 70%.
The increase in demand does lower the customer service level for each of the other the
products; but, that decrease is slight.
The above analysis indicates the need for some kind of smoothing or modelling of the
demand data, especially for "low"-demand products.

The inherent variation between two

instances of a "true" demand function could very well result in more pronounced changes than
those resulting from either of the above scenarios.

Therefore, it is likely that many "optimal"

policies, especially those for "low"-demand products, would actually provide a much lower or
much higher customer service level than expected.

However, by smoothing the data, the

variation between instances of a "true" demand function can be reduced, and the desired
customer service levels can be achieved.
For example, suppose that the demand for a product is stationary, that the average
demand during the previous period was unusually low, and that the "optimal" policy for this
period is based on the demand during the previous period. Because the demand is stationary,
the probability that the demand during this period is higher than that during the past period is
more than 50%.

In other words, the probability that the demand during this period is higher

than that for which the "optimal" policy provides the desired expected customer service level
is greater than 0.5.

Thus, expected customer service level for this period is actually less than

that specified. Now suppose instead that the optimal policy is based on "smoothed" data which
reflects very closely the expected demand. The probability that the demand during this period
is higher than that for which the optimal policy provides the desired expected customer service
68

level is virtually 0.5.

Thus, as a result of smoothing the data, the specified customer service

level should be expected.

69

VII. C O N C L U S I O N

In this thesis, we developed a single-product, single-location model of the inventory


system at Canadian Tire Pacific Associates. Specifically, we formulated a Markov chain model
to determine the long-run average cost of inventory for fixed values of s and S and then
developed a heuristic search to find "near" optimal policies quickly. Also, as a first step toward
developing an integrated, interactive inventory control system, we created a prototype of the
interface.
According to the analysis performed here, Canadian Tire Pacific Associates is currently
holding an excessively large inventory in its stores. This study finds that Canadian Tire Pacific
Associates could reduce the cost of inventory for product category 20 at store 6 by
approximately 50% and still maintain customer service levels of at least 97.5%. Further, the
mean and modal values of savings for these products are between 40% and 50%.

Given the

similar excess inventory at the other stores and in all product categories, we believe that savings
in this range are possible for all products and stores.

We estimate that the application of

inventory control as described in this thesis would result in annual savings of $5.5 to $7
million.
Given the large potential savings to Canadian Tire Pacific Associates, we recommend
that management proceed with the next phase of the project. Specifically, we recommend that
the model, algorithm, and interface be refined further, that a forecasting model be developed,
and that a data collection and storage scheme be designed.
In order to reflect operational changes at Canadian Tire Pacific Associates subsequent
to the formulation of the model, modifications must be made to allow for the lead time to
exceed the review period. Several of the stores now have three "picks" per week, and, as a
70

result, orders placed for these stores at one decision epoch do not arrive until after the next
decision epoch.

Because this violates one of the model's assumptions, the model must be

modified accordingly. Note, however, that with three "picks" per week and a review period
of four days, orders from only the previous decision epoch are ever outstanding at the current
decision epoch.
Also, the model should be refined to reflect the fact that the review period is not fixed
over the planning period.

In its present form, the model assumes a fixed review period;

however, inventory at stores with two "picks" per week is actually reviewed on a four day three day cycle, and inventory at stores with three "picks" per week is reviewed on a three day
- two day - two day cycle. Rather than obtaining the steady state costs for fixed review period,
the model should calculate the steady state cost for a period of one week during which multiple
replenishments occur. Although the solutions are not expected to differ significantly as a result
of the change, the model would reflect the actual process more accurately.
Further work is also required on the search technique for locating "near" optimal
policies.

Although the heuristic search described in this thesis appears to work well, the

decision maker must provide an upper bound on S prior to the search. In practice, this upper
bound is generally not known in advance. Thus, if the heuristic is to be used, either a "tight"
theoretical bound must be found or a "termination" heuristic must be developed. Alternatively,
a new heuristic search could be developed based on additional or different assumptions
regarding the properties of the feasible space.

For example, although some regions of non-

convexity were found for some products, much of the feasible space appeared to be convex.
A heuristic that assumes a convex feasible space would not require an upper bound on S and
might perform very well. However, before such a heuristic is implemented, further work is
necessary to determine the degree of non-convexity for a variety of demand functions and

71

ordering and holding costs.


In addition to making the above modifications, we recommend that Canadian Tire Pacific
Associates begin work on the remaining two components of the inventory control system. First,
in order to allow for products with seasonal demand, the system requires a forecasting model
to provide accurate estimates of demand for the coming period. Second, the system needs a
data collection and storage module that systematically collects sales data for each "active"
product and for each store and then updates the corresponding demand distributions. Because
approximately 2.5% of demand is expected to result in lost sales under the optimal policies, the
sales data will have to be adjusted accordingly in the future. Also, because the model appears
to be sensitive to slight changes in the demand distribution for "low"-demand products, the
module should incorporate a technique for "smoothing" the empirical distributions for these
products.

Further work should be undertaken to determine the extent of variation in the

empirical distributions and the most appropriate "smoothing" technique. However, because of
the large amount of data required to forecast seasonal demand and because of the current lack
of historical data, we recommend that management proceed immediately with the design of a
data collection scheme.
Finally, two additional issues that are beyond the scope of the next phase should be
addressed at some point. First, a monitoring system will be required once inventory control
is implemented in the stores. The monitoring system will ensure that optimal policies perform
as expected and will indicated whether or not demand is adversely affected by the lower levels
of in-store inventory.

Second, given the degree to which in-store inventory can be reduced,

inventory control in the warehouse should be investigated.

Because approximately half of the

existing inventory is held in the warehouse, the additional savings from reducing system-wide
inventory could be great.
72

Afterword

Just prior to the completion of the work described in this thesis, M r . Don Graham,
principle owner of Canadian Tire Pacific Associates, sold his shares in the company. Shortly
thereafter,

the results of this thesis were presented to the new management group.

Unfortunately, the new management did not consider development of an inventory control
system to be a priority.

Nonetheless, the prototype was delivered to Canadian Tire Pacific

Associates for possible in-house testing; however, at the time of this writing - almost one year
after the meeting - Canadian Tire Pacific Associates has not decided to continue with the
project.

73

Bibliography

Econometrica

Arrow, K . A . , T. E . Harris, and J. Marschak (1951). Optimal inventory policy.


19, 250-272.

Day, G . (1992). In a speech to the Empire Club of Canada, Toronto; quoted in: When the JIT
fits, The Globe and Mail, October 20, 1992, B24; and in Puterman (1994).
Dvoretzky, A . , J. Kiefer and J. Wolfowitz (1952a). The inventory problem: I. Case of known
distributions of demand. Econometrica
20, 187-222.
Dvoretzky, A . , J. Kiefer and J. Wolfowitz (1952b). The inventory problem: II. Case of
unknown distributions of demand. Econometrica
20, 450-466.
Federgruen, A . (1993). Centralized Planning Models, in: S.C. Graves, A . H . G . Rinnooy Kan,
and P . H . Zipkin (eds.), Logistics
Research

and Management

of Production

Science,

and Inventory,

Handbooks

in

Operations

vol. 4, North-Holland, Amsterdam.

Federgruen, A . , H . Groenevelt, and H . C . Tijms (1984). Coordinated replenishments in a


multi-item inventory system with compound Poisson demands and constant lead times.
Management
Sci. 30, 344-357.
Lee, H . L . , and S. Nahmias (1993). Single-Product, Single-Location Models, in: S.C. Graves,
A . H . G . Rinnooy Kan, and P . H . Zipkin (eds.), Logistics
of Production
and Inventory,
Handbooks

in Operations

Research

and Management

Science,

vol. 4, North-Holland,

Amsterdam.
Muckstadt, J. A . , and R. O. Roundy (1993). Analysis of Multistage Production Systems, in:
S.C. Graves, A . H . G . Rinnooy Kan, and P . H . Zipkin (eds.), Logistics of Production
and
Inventory,

Handbooks

in Operations

Research

and Management

Science,

vol. 4, North-

Holland, Amsterdam.
Porteus, E . L . (1985). Numerical Comparisons of Inventory Policies for Periodic Review
Systems. Oper. Res. 33, 134-152.
Puterman,

M . L . (1994).

Programming,

Markov

Decision

Processes:

Stochastic

Dynamic

Wiley, New York.

Silver, E . A . , and R. Peterson (1985). Decision


Production

Discrete

Planning,

2nd edition,

Systems for Inventory

Management

and

Wiley, New York.

Taylor, H . M . , and S. Karlin (1994). An Introduction

Academic Press, San Diego.

74

to Stochastic

Modeling,

revised

edition,

Tijms, H . C , and H . Groenevelt (1984). Simple approximations for the reorder point in
periodic and continuous review (s,S) inventory systems with service level constraints.

European J. Oper. Res. 17, 175-190.

75

Appendix A
A Portion of the "Sales" File for Product 200001, a 30-amp Inline Fuse

200001 283
200001 284
200001 285
200001 286
200001 287
200001 288
200001 289
200001 290
200001 291
200001 292
200001 294
200001 295
200001 296
200001 297
200001 298
200001 299
200001 300
200001 301
200001 303
200001 304
200001 305
200001 306
200001 308
200001 309
200001 310
200001 311
200001 312
200001 313
200001 314
200001 315
200001 316
200001 317
200001 318
200001 319
200001 320
200001 321
200001 322
200001 323
200001 324
200001 325
200001 326
200001 328
200001 329
200001 330
200001 331
200001 332
200001 333
200001 334
200001 335
200001 336

1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190
1.190

0 0
2 0
0 0
0 1
0 0
0 0
0 0
0 2
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 .0
0 0
1 0
0 0
1 1
0 0
1 3
0 0
0 0
0 1
1 0
0 0
0 0
0 0
2 0
0 0
0 0
0 0
0 0
1 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 1
0 0
0 1
0 0

2
1
4
0
2
0
1
0
2
0
0
0
0
0
1
1
1
1
0
0
0
1
0
0
2
0
1
1
0
2
0
0
0
0
0
0
0
0
2
0
1
1
0
1
0
0
0
2
0
0
;

0
0
0
0
0
0
0
0
0
0
1
0
1
0
2
0
0
1
0
0
0
1
1
0
0
0
0
0
0
0
0
1
0
0
0
1
0
1
0
1
0
0
0
0
0
0
0
0
0
1

0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
1
0
0
0
0
0
0
1
0
1
0
1
0
0
0
0
0

1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
1
1
0

1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
1
0
1
0
0
0
0
1
1
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
1
3

0
0
1
0
0
1
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

0
0
1
0
0
0
1
0
0
0
1
1
0
0
0
1
0
0
0
1
1
1
0
0
0
1
0
0
1
0
0
0
3
1
0
0
1
0
0
0
2
0
0
0
0
0
0
0
0
0

0
0
0
0
1
1
0
0
0
0
3
0
0
0
1
0
0
1
0
0
0
0
2
1
1
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0

0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
5
0
0
0
0
0
0
0
0
0
0
0
3
0
0
0
0
0
0

0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
2
0
1
1
2
0
0
1
0
0
0
0
0
0
0
1
1
0
1
0
0
0
0
0
0
1
0
0
0
0
1
0
1
0
0

0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
1
0
0
0
0
0
0
0
0
0
0
0
1
0
1
1
0
0
0
2

(253 subsequent lines omitted)

76

0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
2
0
1
0
0
0
0
1
1
1
2
0
0
0
0
0
0
0
0
0
0
2
0
1
0
0
1
0
0
0
0
0
0
0

0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
2
0
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
0
1
1
0
0
1
0
0
0
0
0
0
0
0
0
0
0

0
0
0
0
0
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
1
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0

0
0
0
0
2
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
2
1
1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0

2
0
0
0
0
1
0
0
1
0
0
0
0
0
0
2
0
0
0
0
2
0
1
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
2
0
1
1
0
0
1
0
1
0
1
0

0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
0
0
1
0
0
0
0
0
0
0
0

0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
1
3
0
0
0
0
1
0
1
0
1
0
2
0
0
0
0
0
0
1
1
0
0
1
0
0
0
0
0
0
0
0
0
0
0

0
0
0
0
0
2
0
0
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
1
0
1
0
0
1
0
0
0
3
1
0
0
0
0
0
0
0
0
0

Appendix B
Sample "Distribution" Files

a) A "low"-demand product - an automobile "back-up" alarm:

PRODUCT NUMBER: 202101


PRICE: $
6.84

DMD

12

11

11

11

10

19

14

302

304

299

295

302

300

296

301

296

302

303

295

296

288

303

305

301

290

300

301

302

STORE 1

10

11

12

13

14

15

16

17

18

19

20

21

b) A "medium"-demand product - a 168 bulb

PRODUCT NUMBER: 203039


PRICE: $
.51

DMD
16

15

14

13

12

11

10

10

17

11

10

10

16

19

10

13

11

13

10

12

15

10

12

13

27

24

11

10

13

14

23

14

18

14

18

14

12

14

14

30

36

43

16

16

43

32

38

39

39

34

47

36

41

21

19

39

20

34

24

48

67

61

44

75

62

63

48

28

52

61

63

53

47

30

56

68

56

37

30

70

240

184

165

126

240

247

133

202

169

175

189

173

143

165

180

240

206

161

197

192

212

STORE 1

10

11

12

13

14

15

16

17

18

19

20

21

77

c) A "high"-demand product - a H4651 rectangular sealed beam headlight:

PRODUCT NUMBER: 203677


PRICE: $
8.57

DMD
0

0
1

14

13

12

11

10

0
3

14

11

12

16

18

12

13

19

11

22

21

10

29

12

10

11

24

10

11

14

13

35

33

16

29

19

18

26

15

26

15

12

14

13

11

19

19

35

34

43

32

30

41

31

32

47

11

42

20

33

30

31

20

31

22

21

31

32

63

49

54

42

60

51

40

51

35

33

55

39

51

39

38

39

57

58

40

54

61

65

63

61

63

54

68

85

65

53

72

69

70

77

63

46

59

56

55

73

63

109

79

42

40

80

64

32

80

74

77

99

55

97

57

83

93

80

75

81

97

73

91

39

21

13

63

57

11

51

51

52

94

29

61

35

59

75

76

45

51

56

44

STORE 1

10

11

12

13

14

15

16

17

18

19

20

21

78

Appendix C
A Proof that the Limiting Probability Distribution is Independent of the Initial State

In this appendix, we show that, provided 0 < Pr{D = 0} < 1, the Markov chain
T

corresponding to an inventory model with a (s,S) policy has a limiting probability distribution,
7T, where 0 < TTJ < 1 for y = 0, 1,

S, that is independent of the initial state. Further, the

limiting distribution is the unique nonnegative solution of the equations


Tt

'P =

TI

(AD

and J > . = 1

(A )
2

i=0

where P is the (S + l) x (S + l) transition probability matrix whose first n rows (and columns)
correspond to the n recurrent states in the chain and whose remaining rows (and columns), if
any, correspond to transient states.

43

Prior to the proof, several preliminary results are

obtained.

RESULT

1:

The Markov chain has exactly one positive recurrent class and, perha
transient states.

First, note that in the absence of any absorbing states, a Markov chain with a discrete,
finite state space must have at least one positive recurrent class containing at least two states.
Now, consider the Markov chain for an inventory model with a (s,S) policy:
a)

State i > s cannot be absorbing because there is a positive probability of reaching


j < i. (Since Pr{D > 0} > 0).
T

Note that since the rows and columns of P are reordered, the elements of it must be
reordered accordingly.
4 3

79

b)

State / < s cannot be absorbing because, by the rules of the ordering policy and
the assumption that Pr{D = 0} > 0, there is a positive probability reaching S.
T

Therefore, the chain has no absorbing states and must have at least one positive recurrent class.
Next, consider the subset of states A = {i | i < s}.

Because the state space is finite

and Pr{D > 0} > 0, the process must return to at least one state in A ; in other words, at least
T

one state in A must be recurrent. Let k G A be a member of a recurrent class, dt. Because
of the ordering policy and the assumption that Pr{D = 0} > 0, k - S. Also, by definition,
T

there must be a positive probability of returning to k from S; S -> k.

Therefore, S G 3?.

Further, because S is reachable from all states in A , i G A is either transient with i - dt or


recurrent with ; iR.
Now, consider the subset of states B = {/' | j > s}.

Because Pr{D

> 0} > 0, the

chain will eventually reach a state i G A . If i is transient, then j must be transient also with
y -> 3?; if i G 9?, then j is either transient with j -> dt or recurrent with j E dt.

Thus, the

Markov chain has exactly one recurrent class and, perhaps, some transient states.

RESULT

2:

The limiting probability distribution,


nxn submatrix P

ir*,

for the Markov chain correspondin

= [P ], i, j G dt, is independent of the initial state and


tj

unique nonnegative solution of the equations


TC*-

Prr

and

= re*

J2 K =

(A3)

jt=i

where the rows and columns of

Since, if i

are numbered from 1 to n rather th

j, i and j must be in the same equivalence class.


80

according to their associated states.


First, note that both the original Markov chain and the one corresponding to the
submatrix P

R R

are aperiodic because Pr{D = 0} > 0. Therefore, given that 9? is a positive


T

recurrent aperiodic class, the limiting distribution ir* is uniquely determined by (A3) and (A4)
(Taylor and Karlin, 1994, Theorem 4.4, p.213). Further, because there are no absorbing states
or other recurrent classes in the original chain, the process must eventually enter the recurrent
class 9?, regardless of the initial state. Therefore, in the limit, the probability of being in state
i G 9? is independent of the initial state.

RESULT

3: The limiting probability distribution for the transient states is the null ve
independent of the initial state.

This result follows directly from the definition of a transient state.

Suppose the states are reordered such that the first

PROOF

n rows (and columns) of P

correspond to the n recurrent states of the Markov chain. Then P can be partitioned into four
submatrices:
PRK - the n x n submatrix [Py], i, j E 9?.
P

T T

- the (S + 1-/I) x (S + l-n) submatrix [Py], i, j g 9?.

T R

- the (S + l-n) x n submatrix [Py], i 9?, j G 9?.

R T

- the n x (S + l-n) submatrix [Py], i G 9?, j 9t By definition, this is a matrix


of zeros.

(Al) can then be rewritten as

81

(lt

, Tt )
T

P
L

I-P
p

(Tt

TR

TT

RR

(0- , 0 )
T

I-P

TR

, TC )

TT

where ir denotes the limiting probability distribution for the n recurrent states, and ir denotes
R

the distribution for the remaining S + l-n transient states. Solving for TT gives
t

TC -0 + it -(I-P )
r

TI

it -(I-PJJ)
T

ic =
r

Since

(I

- PTT)"

always exists (Puterman,

in agreement with Result 3.

(I-P^-Oj.

Proposition A . 3 , p.

1994,

593),

ir = 0X, which is
T

Now, solving for 7r yields


R

(A5)
""R'PRR

11

(A2) can be rewritten as

S+l
*k
k=l

*k

(A6)

k=n+\

k=i

where ir* contains the appropriately reordered steady state probabilities. Since (A5) and (A6)
are equivalent to (A3) and (A4), respectively, Result 2 holds.

Therefore, the Markov chain

corresponding to an inventory model with a (s,S) policy has a limiting distribution that is
independent of the initial state and is the unique nonnegative solution to (Al) and (A2).

82

Appendix D
A Measure for the Steady State Customer Service Level

In this appendix, we show that the appropriate measure for the steady state customer
service level is given by
_ E[Demand satisfied during RP]
E[Total demand during RP]

Consider the following two measures of the steady state customer service level.

Measure 1: Suppose the customer service level is calculated only after n review periods have
passed. Denoting DS, as the demand satisfied in review period i and DT, as the total demand
in period i, the customer service level after n periods, CSL(n), is

CSL{n) =

DS. + DS + ... + DS
DT, + DT. + ... + DT
0

Dividing both the numerator and denominator by n, taking the limit as n - oo, and applying
the Law of Large Numbers yields
CSL = lim CSL(n)
n-

- [DS, + DS. + ... + DS]


= l i m ^ J
1
"1
~ - [DT + DT + ... + DT]
E[DS,]
"

E[DT.]

83

Measure 2: Suppose the customer service level is calculated for each of n review periods and
then averaged. Thus, the customer service level after n periods, CSL(n) , is given by

CSL(n) = -

DS,

DS,

DT,

DT

DT_

Taking the limit as n -> oo yields

CSL = lim CSL(n)


DS

DS

DT,

DT

lim

DT_

DS

DT

Now consider the scenario in which there is one item on the shelf to begin each review
period and in which demand is stochastic with Pr{D

= 2} = Vi and Pr{D = 100} = Vi.


x

According to Measure 1, the customer service level is

CSL -

=
E[DT)

^
1 2)

^
=
0.02
1(100)
51
W

while, according to Measure 2, the customer service level is

CSL = E

DS
DT

1(1) i(-L

2{2)

2{ 100

51
200

* 0.26

Clearly, from management's point of view, the first measure is more indicative of the
actual level of service being provided.

The problem with the second measure is that equal


84

weight is given to each ratio, regardless of the magnitude of the numbers. For example, with
respect to Measure 2, the events L S / L R = 1/2 and L S / L R = 50/100 are identical; however,
with respect to lost sales, the second event is much worse than the first. Therefore, the proper
measure for the steady state customer service level is Measure 1.

85

Appendix E
The Calculation of the Conditional Expected Demand Not Satisfied During a Period of
T Consecutive Days

Denoting D as the demand during a period of T consecutive days and j as the inventory
x

on hand at the beginning of the period, the conditional expected demand not satisfied during the
period, E[(D -y) ], is calculated as follows:
+

E[(D -j) ]
+

<k-j)Pr[D

= k}

k=j+l

= k] + J2(k-j)Pr{D

(k-j)Pr{D

k=j+l

= J2(k-j)Pr[D =k}
T

k=0

k=0

-J2(k-j)Pr{D

= k]

k=0

= Y,kPr{D =k)
T

Jfc=0

- J2jPr{D =k}
T

k=Q
T

7-1
+

k=0

Y(k-j)Pr{D =k}

= T\i - j = T\x - j

= k] - (fc-;)/V{/J> = fc}

k=0

Y,<J-k)Pr{D = k\
T

jt=0

where fx is the mean daily demand.

86

Y{k-j)Pr{D =k)
T

Appendix F
Justification of the Updating Technique for the New Policy (s+m,S)

Let the probability transition matrix corresponding to the policy (s,S) be denoted by the
(S + l ) x ( S + l) matrix P, with elements py. Define s' = s+m, where m is an integer satisfying
the condition: 0 < s+m < S. Let the probability transition matrix of the new policy (s',S)
be denoted by the (S + 1)X(S + 1) matrix 7>, with elements py. Using the equations developed
in Chapter III, the elements of !P are found as follows:

CASE

1. The lead time is less than the review period.

A. m > 0
For

0< i <

s'\

( i-i

[Pr{D =k}Pr{D _ >S-k]] +


L

Pr{D zi}Pr{D _ S-i}

ifj = 6

k=0

i-l

53 [Pr{D =k}Pr{D _ = S-j-k]] + Pr{D zi}Pr[D _ = S-j-i)


ifO<jz S-i
L

k=0
s-j

52 [Pr[D = k}Pr{D _ = S-j-kn


L

k=0
a)

0 < / < s:

Pij
= <

Pij
Pij

= pij

b) s < i < s': This does not simplify; but it is identical to (2).

87

if S-i <j <S

For s' < i < S:

Pr{D >i}

ifj = 0

p.. = <Pr{D =i-j}

if 0 <j <; i

<

if i <j S

Pfj

ifj = 0

Pij

ifO<j<,i

Pij

if i <j S

= pij

B. m < 0
For 0 < i < s':
i-l

53 [Pr{D =k}Pr{D _ S-k]]


L

Pr{D >i}Pr{D _ S-i}


L

ifj = 0

i-l
E

[Pr{Z> = fc}iV{Z) .=S-/-fc}] Pr{D >i}P/-{D .. = S-7-/}


i

7W

ifO<j<S-i
if S-i <j<S

p,

/y' =

ifO<j*S-i

P i j

Pij

ifS-i<j*S

For s' < i < S:

fPr{/J>>*-}
r

,. = \Pr{D = i-j]
T

1/7=0
ifO<j<i
ifi<jS

88

a) s' < / < s: This does not simplify; but it is identical to (3).
b) s < i < S:
Pr{D >i}

1/7=0

= Pr{D = i-j]

if0<ji

ifi<j*S
ifj = 0
if0<j<,i

= Pt

ifi<jS
= Pi,

CASE

2. The lead time is equals the review period.

A. m > 0
For 0 < i < s':
0

if0<j<

Pr{D >i}
T

S-i

ifj = S-i

Pr{D =S-j]
T

ifS-i<j<S

a) 0 < i < s:
ifOj<S-i
.. =
Pij
y
Pij

ifj = S-i
ifS-i<j*S

= Pij

b) s < i < s': This does not simplify; but it is identical to (4).

89

For s' < i < S:

f 7=0

\Pr{D >i)
T

Pr[D =i-j}

ifO<ji

if i <j < S

if 7 = 0

Pa

if

0 <y < i

ifi<j<S

Pij

B. w < 0
For 0 < t < s':

ro

ifOzj<S-i

Pr{/J>/}

ifj = S-i

Pr{D = S-j}

if S-i <j < S

ifOzj<S-i
ifj = S-i
if S-i <j <S

Pij
= Pi,

For s' < i < S:

Pr{D >i}
T

= { Pr{D = i-j}
T

i/7

=o

ifO<ji
ifi<j<S

a) s' < i < s: This does not simplify; but it is identical to (3).

90

Pr{D zi}

ifj = 0

Pr{D = i-j]
T

0
Py
p

tj

Pij

ifO<ji
ifi<j<S

ifj = 0
ifO<ji
if i<j S

Appendix G
Justification of the Updating Technique for the New Policy (s,S+m)

Let the probability transition matrix corresponding to the policy (s,S) be denoted by the
(S + l ) x ( S + l) matrix P, with elements p . Define S' = S+m, where m is any non-negative
(>

integer.

Let the probability transition matrix of the new policy (s,S') be denoted by the

( S + m + l ) x ( S + m + l) matrix IP, with elements p .


tj

Then, using the equations developed in

Chapter III, the elements of 7 are found as follows:

CASE

1. The lead time is less than the review period.

For 0 < i < s:

[Pr{D =k}Pr{D _ S'-k}]


k=0
L

ifj=0

Pr{D *i)Pr{D ^S>'-/}


L

i-l

[Pr[D = k}Pr{D _ = S'-j-k}-\ +Pr[D *i\Pr{D _


L

= S'-j-i\

ifO<j<S'-i

Jt=0

s'-i
Y, [Pr[D =k}Pr{D _
k=0
L

= S'-j-k\]

i-l
[Pr{D = k}Pr{D _ *S'-k\\
k=0
fc=0
L

ifS'-i<j<S'

+ Pr[D *i)Pr{D _ S''-i)

if j = 0

i-l

[Pr{D =k}Pr{D _

= \

= (S+m)-j-k}] + Pr{D >i}Pr[D _


L

= (S m)-j-i}
+

ifO<j

< (J5+m)-i

(S*m)-j

if (S+m)-i<j <,(S+m)

[Pr{D = k}Pr{D _ = (S m)-j-k]]


k=0
L

92

I-l

53 [Pr{D = k\Pr{D _ >S'-k}]


L

Pr{D zi}Pr{D _ *S'-i}


L

ifj = 0

k=0
i-l
\ Y[Pr{D

= k}Pr{D _ = S-(j-m)-k}] + Pr[D zi}Pr{D _

= S-(j-m)-i]

ifO<jzS+m-i

k=0

S-(j-m)

53

[Pr{D = k}Pr{D _ = S-(j-m)-k]]


L

if S+m-i <j <, S+m

i-l

53 [Pr{D = k}Pr{D _ zS -k}]


/

Pr{D zi}Pr{D _ zS''-i]


L

ifj = 0

*=0
i-l

\ 13 [Pr[D = k}Pr{D _ = S-(j-m)-k}] + Pr[D zi}Pr[D _


k=o
L

= S-(j-m)-i}

ifO<jz S+m-i
and 0 z j-m

Pi(j-m)

if 0 <j <, S+m-i

and

Pi(j-m)

if S+m-i <j <, S+m

0<j-m<,S-i

and S-i < j-m zS

i-l

Y [Pr{D = k)Pr{D _ zS'-k}]

k=0

ifj = 0

Pr{D *i)Pr{D _ S'-i}


L

i-l

53 [Pr{D = k}Pr{D _ = S-(j-m)-k}] + Pr{D zi}Pr{D _


L

= S-(j-m)-i}

ifO<jzm

k=0
Piij-m)

if m<j <, S+m-i

Piij-m)

if S+m-i <j <. S+m

i-l

Y,lPr{D = k}Pr[D _ ^S'-k}}


L

+ Pr{D *i)Pr{D _ *S'-i)


L

ifj = 0

i-l

53 [Pr{D = k}Pr{D _ = S'-j-k}] + Pr{D >i}Pr{D _


L

= S'-j-i}

ifO<j i m

k=0
if m<j <,S'

Pi

which, for 0 < j < m, is identical to (2).

93

For s < i < S':


Pr{D >i}
T

Pu =

Pr{D = i-j]

if0<j<i

ifi<j<S'

a) s < i < S:
Pr{D >i
T

*/7=0

Pr{D = i -j)

if0<j<i

if i <j < S

ifS<j<S>
ifj=0
if

0 <j < i

if i <j S

ifS<j<S'
ifO<j<S

ifS<j<S>

b) S < i < S': This does not simplify; but it is identical to (3).

CASE

2. The lead time equals the review period.

For 0 < i < s:


0

ifO < j<S'-i

Pr{D >i}
T

Pr{D =S'-j}
T

ifj=S'-i
ifS'-i<j<S'

94

ifOj<(S+m)-i

Pr{D

ifj = (S+m)-i

Pr{D = (S+m) -j)

if (S+m)-i <j <L (S+m)

if 0 <, j<S+m-i

if j = S+m-i

. Pr{D zi]
T

Pr{D = S-(j-m)}
T

if S+m-i <j <, S+m

if 0 <,j < S+m-i and 0 ^ j-m

Pi(j-m)

if 0<.j< S+m-i and

Pi(j-m)

if j = S+m-i and j-m = S-i

. Pi(j-m)

if S+m-i <j z S+m

if 0 zj <,m

Pi(j-m)

if m< j< S+m-i

Piij-m)

if j = S+m-i

<

and S-i < j-m ^S

if S+m-i <j < S+m

if 0 <,j <.m

[PiV-m)

ifm<j<S'

which, for 0 < i < s, is identical to (3).


For s < / < S':
Pr{D zi}

ifj = 0

Pr{D = i-j)

if 0 <j <L i

ifKjzS

0<j-m<S-i

95

a) s < i < S:

Pr{D zi}

1/7=0.

Pr{D = i-j]

if0<ji

ifi<j*S

ifS<j<S>

Pij
Pij
Pij

0
Pij

*/7=0
if0<jii
if i <j <L S
ifS<j<S
ifOzjiS
ifS<j<S

b) S < i < S': This does not simplify; but it is identical to (3).

96

Appendix H
A Hypothetical Consultation

In this appendix, the interface during a hypothetical consultation is depicted. The figures
accurately represent the various screens that are presented to the manager, with the exception
that all lines and text are really white on a blue background. During the consultation described
below, only the choices made by the manager are hypothetical; all the results are real.
The title screen, as depicted in Figure A - l , appears initially upon execution of the
program. In order to proceed to the main menu, the manager presses the "enter" key.

Optimat Inventory Control System


For the exclusive use of
Canadian Tire Pacific Associates
Developed at:
The Faculty of Commerce
and Business Administration
The University of British Columbia

Brian Kapalka
Kaan Katircioghi
Marty Puterman

Press <Enter> to continue

Figure A - l .

The title screen.

97

Main Menu
1. Select data directory
c:\tirc\data\dst
2. Select product and store combination
Product: 200001
3. Select scenario
Review Period: 4
Lead Time
: 3
4. Select search parameter
Smax: 25
5. Execute program
6. Exit to DOS
Please enter the desired option

Figure A-2. The main menu.

Figure A-2 depicts the main menu of the program: it is from here that the manager
enters all the review parameters. If the manager wishes to change one of the parameters from
its default value, he or she selects the appropriate number and enters the correct information
in the window presented. The new settings will then be shown in place of the default values.
In this example, the relevant data files are located in the default directory "c:\tire\data\dst", and
the manager has selected the product/store combination of product 200001 and store 6. Further,
the manager has selected a review scenario of a 4-day review period and a 3-day lead time and
an upper search limit of 25.

Finally, in order to proceed with the analysis, the manager

executes the "main" module of the program by selecting option 5.

98

Product 200001 - Store 6


RP = 4 days

L T = 3 days

OPTIMAL POLICY

CURRENT POLICY

Reorder Point
Target Level

Reorder Point
Target Level

Service Level :
Annual Cost

Service Level :
Annual Cost

Working...please wait

Figure A-3. Calculating the optimal policy and evaluating the current policy.

Once the "main" module of the program is executed, the screen depicted in Figure A - 3
appears. While this screen is displayed, the system determines the optimal policy and evaluates
the current policy.

As demonstrated in the previous chapter, the amount of time required to

determine the optimal policy depends on the value of S,,^ chosen.

45

Further, for a product

with a very "large" current policy, the time required to evaluate the current policy is often more
than that required to determine the optimal policy (assuming a reasonable value of S

max

).

Actually, for a given value of S , the amount of time required when using the graphical
interface is slightly more than that recorded in chapter III.
4 5

max

99

Product 200001 - Store 6


LT 3 days

RP = 4 days

OPTIMAL POLICY
Reorder Point
Target Level

;
2

CURRENT POLICY
Reorder Point : 12
Target Level : 14
Service Level 100.0%
Annual Cost
7.48

3
9

Service Level : 97,7%


Annual Cost
: Xl$

Annual Savings: 429


(57.4%)

Would you like to evaluate a different policy? (y/n)

Figure A-4. Displaying the results.

Once the optimal policy is determined and the current policy is evaluated, the results are
displayed as shown in Figure A-4. For this example, the optimal policy of (3,9) provides a
customer service level of 97.7% at an annual cost of $3.19. In comparison, the current policy
of (12,14) provides a customer service level of 100.0% at an annual cost of $7.48. Further,
because the current policy meets the desired customer service level, the expected annual savings
of the optimal policy are calculated: the optimal policy would save $4.29 per year, or 54.7%
of the current cost. Finally, when asked if he or she would like to evaluate a different policy,
the manager answers "yes".

100

Product 200001 - Store 6


RP = 4 days

LT = 3 days

OPTIMAL POLICY

CURRENT POLICY

Reorder Point
Target Level

Reorder Point
Target Level

3
9

Service Level : 97.7%


Annual Cost
: 3.19
Annual Savings:

:
:

12
14

Service Level : 100.0%


Annual Cost
: 7.48

4.29
(57.4%)

ALTERNATE POLICY
New Reorder Point

New Target Level

10

Figure A-5. Entering an alternate policy.

Having requested that a different policy be evaluated, the manager is prompted for the
new reorder point and target level, as shown in Figure A-5. The manager can enter any "valid"
policy; that is, any policy satisfying the basic condition {0 < s < S}.

Here, the manager

chooses to evaluate the policy (6,10), which is somewhere "between" the optimal policy and
the current policy.

101

Product 200001 - Store 6


RP - 4 days

L T = 3 days

OPTIMAL POLICY

CURRENT POLICY

Reorder Point
Target Level

Reorder Point
Target Level

3
9

Service Level : 97.7%


Annual Cost
3.19
Annual Savings:

Service Level
Annual Cost

: 12
. 14
100.0%
7.48

4.29
(57.4%)

ALTERNATE POLICY
Reorder Point
Target Level

:
:

Service Level
Annual Cost

5
10

99 5%
3.93

Would you like to evaluate a different policy? (y/n)

Figure A-6. The particulars of the alternate policy.

Once the new policy has been entered, the system evaluates the policy and presents the
results, as depicted in Figure A-6. In this case, the new policy of (6,10) provides a customer
service level of 99.8% at an annual cost of $4.41.

Because this policy is expected to meet

virtually all of the demand, the difference between the cost of the current policy and the cost
of this policy is directly attributable to the cost of the marketing strategy. Thus, approximately
40% of the cost of inventory for product 200001 at store 6 is due to excess stock for the
purpose of marketing. Finally, if the manager wishes to evaluate yet another policy, he or she
would answer "yes" to the question, and repeat the process.
to evaluate another policy.
102

Here, the manager chooses not

Main Menu
1. Select data directory
c:\tire\data\dst
2. Select product and store combination
Product: 200001
Store : 6
3. Select scenario
Review Period: 4
Lead Time
: 3
4. Select search parameter
Smax: 25
5. Execute program
6. Exit to DOS
Please enter the desired option

Figure A-7. The main menu revisited.

Having answered "no" to the previous question, the manager is returned to the main
menu, as shown in Figure A - 7 .

Now, the manager might decide to evaluate another product

at store 6 or to evaluate the same product at a different store. Alternatively, the manager might
decide to examine the implications of a different review scenario by changing those parameters
and proceeding with the analysis.

Here, the manager chooses to end the consultation by

selecting option 6.

103

Appendix I
The Source Code for the "Interface" Module

include 'fgraph.fi'
include 'fgraph.fd'
dimension
real
integer * 2
integer
character * 1
character * 6
character * 40
character * 44

f(0:7,0:200), p(0:200,0:200), pi(0:200), spi(0:200)


mu
dummy, newx, newy, maxx, maxy
rp, bigs, smalls, smax, store, target(21)
more
prod, prev, size(3)
dir
str

record /rccoord/

curpos

common
common
common
common
common
common

dir, prod, store, smax


f, p, rp, It, bigs, smalls
pi, spi
fc, vc, eac, cac, clevel, mu
maxx, maxy
size

data
data

/initial/
/ptm/
/vector/
/costs/
/coord/
/video/

dir/'c:\tire\data\dst7, prod/'2000017, prev/' 7


store/6/, rp/4/, lt/3/, smax/25/

call graphicsmode()
dummy = setfont( size(l))
ic = 0
do while( ic .ne. 6 )
more = ' '
call menu()
read( * , '(il)', err =10) ic
select case ( i c )
case ( 1 )
call refresh()
call border 1()
call settextposition( 12, 22, curpos )
call outtext( ' Enter directory containing .DST files ' )
call input( 15, 21, 40 )
read( * , '(a40)') dir
104

20

case ( 2 )
store = 0
do while( store .It. 1 .or. store .gt. 21 )
call refreshO
call border2()
call settextposition( 11, 19, curpos )
str = ' Enter the product and store to be analyzed '
call outtext( str )
call settextposition( 14, 25, curpos)
call outtext( 'Six-digit product code' )
call settextposition( 16, 25, curpos )
call outtext( 'Store number' )
call input( 14, 49, 6 )
read( * , '(a6)') prod
call clearinput( 14, 49, 6 )
call input( 16, 39, 2 )
read( * , '(i2)', err=20) store
end do

30

case ( 3 )
rp = 0
It = 1
do while( iocheck. gt. 0 .or. It .gt. rp )
call refresh()
call border2()
call settextposition( 11, 23, curpos )
call outtext( ' Enter the scenario to be examined ' )
call settextposition( 14, 28, curpos )
call outtext( 'Review period (days)' )
call settextposition( 16, 28, curpos )
call outtext( 'Lead time (days)' )
call input( 14, 50, 1 )
read( * , '(il)', iostat=iocheck, err=30) rp
call clearinput( 14, 50, 1 )
call input( 16, 50, 1 )
read( * , '(il)', iostat=iocheck, err=30) It
end do
case ( 4 )
smax " 0
do while( smax .le. 0 )
call refresh()
call border 1()
call settextposition( 12, 22, curpos)
call outtext( ' Enter the upper limit of the search ')
call settextposition( 15, 33, curpos )
call outtext( 'Maximum S' )
105

call input( 15, 45, 3 )


read( * , '(i3)', err=40) smax
end do

40

50

10

1000

case ( 5 )
call openfiles( iflag )
if( iflag .eq. 0 ) then
call titles( prod, store, rp, It)
call opt()
do while( prev .ne. prod )
read(7,1000) prev, (target(i), i = 1, 21 ), mf
end do
bigs = target(store)
smalls = - 1
new = bigs - mf
call policy( new )
call current( more )
do while( more .eq. ' Y ' .or. more .eq. 'y' )
bigs = 0
new = 1
do while( iocheck. gt. 0 .or. new .ge. bigs )
call setviewport( newx( int2( 100 ) ), newy( int2( 700 )
newx( int2( 900 ) ) , newy( int2( 940 ) ) )
call clearscreen( $gviewport)
call setviewport( 0, 0, maxx, maxy )
call settextposition( 23, 30, curpos )
call outtext( 'New Reorder Point' )
call settextposition( 25, 30, curpos )
call outtext( 'New Target Level' )
call input( 23, 50, 3 )
read( * , '(i3)', iostat=iocheck, err=50) new
call clearinput( 23, 50, 3 )
call input( 25, 50, 3 )
read( * , '(i3)', iostat=iocheck, err=50) bigs
end do
smalls = - 1
call policy( new )
call alternate( more )
end do
end if

end select
end do
dummy = setvidepmode( $defaultmode )
format( a6, lx, 21( i5 ), i4 )

106

subroutine graphicsmode()
include 'fgraph.fd'
integer * 2
character * 6

dummy, maxx, maxy, maxc, maxr


size(3)

record /videoconfig/ my screen


common /coord/
common /video/

maxx, maxy
size

call getvideoconfig( myscreen )


select case ( myscreen. adapter )
case( $vga, $ovga, $mcga )
dummy = setvideomode( $vresl6color )
size(l) = 'h26wl6'
size(2) = 'h20wl2'
size(3) = 'hl6w9'
case default
stop 'Error: cannot set graphics mode.'
end select
call getvideoconfig( myscreen )
maxx = myscreen. numxpixels - 1
maxy = myscreen. numypixels - 1
maxc = myscreen. numtextcols
maxr = myscreen. numtextrows
call titlescreen()
end

subroutine titlescreen()
include 'fgraph.fd'
integer
integer * 2
character * 1
character * 6
character * 25

dummy4
dummy, maxx, maxy, newx, newy
dum
size(3)
str

107

record /rccoord/
record /xycoord/

curpos
xy

common /coord/
common /video/

maxx, maxy
size

dummy = setbkcolor( $blue )


dummy = settextcolor( 15 )
dummy = registerfonts( 'tmsrb.fon' )
call refresh()
dummy4 = setcolor( int2( 15 ) )
dummy = setfont( size(l) )
dummy = getgtextextent( 'O I C )
call moveto( ( maxx - dummy ) / 2, newy( int2( 150 ) ) , xy )
call outgtext( 'O I C )
dummy = setfont( size(2))
dummy = getgtextextent( 'OPTIMAL I N V E N T O R Y C O N T R O L ' )
call moveto( ( maxx - dummy ) / 2, newy( int2( 200 ) ), xy )
call outgtext( 'OPTIMAL INVENTORY C O N T R O L ' )
dummy = getgtextextent( 'For the exclusive use o f )
call moveto( ( maxx - dummy ) / 2, newy( int2( 340 ) ), xy )
call outgtext( 'For the exclusive use o f )
dummy = getgtextextent( 'Canadian Tire Pacific Associates' )
call moveto( ( maxx - dummy ) / 2, newy( int2( 400 ) ) , xy )
call outgtext( 'Canadian Tire Pacific Associates' )
call moveto( newx( int2( 100 ) ) , newy( int2( 600 ) ) , xy )
call outgtext( 'Developed at:' )
call moveto( newx( int2( 100 ) ), newy( int2( 670 ) ), xy )
call outgtext( 'The Faculty of Commerce' )
call moveto( newx( int2( 100 ) ) , newy( int2( 710 ) ) , xy )
call outgtext( '
and Business Administration' )
call moveto( newx( int2( 100 ) ) , newy( int2( 760 ) ) , xy )
call outgtext( 'University of British Columbia' )
call moveto( newx( int2( 650 ) ), newy( int2( 670 ) ) , xy )
call outgtext( 'Marty Puterman' )
call moveto( newx( int2( 650 ) ) , newy( int2( 715 ) ) , xy )
call outgtext( 'Kaan Katircioglu' )
call moveto( newx( int2( 650 ) ) , newy( int2( 760 ) ) , xy )
call outgtext( 'Brian Kapalka' )
call settextposition( 27, 28, curpos )
str = 'Press < Enter > to continue'
call outtext( str )
call settextposition( 15, 100, curpos )
read( * , '(al)') dum
end

108

subroutine menu()
include 'fgraph.fd'
dimension
integer * 2
integer
character * 6
character * 40

f(0:7,0:200), p(0:200,0:200)
dummy, temp, newx, newy, maxx, maxy
store, rp, bigs, smalls, smax, dummy4
prod, size(3), str
dir

record /rccoord/
record /xycoord/

curpos
xy

common /initial/
common /ptm/
common /coord/
common /video/

dir, prod, store, smax


f, p, rp, It, bigs, smalls
maxx, maxy
size

call refresh()
dummy4 = setcolor( int2( 15 ) )
dummy = rectangle( $gborder, newx( int2( 150 ) ), newy( int2( 110 ) ),
+
newx( int2( 850 ) ), newy( int2( 890 ) ) )
dummy = getgtextextent( ' M A I N M E N U ' )
dummy4 = setcolor( int2( 1 ) )
temp = rectangle( $gfillinterior, int2( ( maxx - dummy ) I 2), newy( int2( 100 ) ),
+
int2( ( maxx + dummy ) I 2), newy( int2( 120 ) ) )
dummy4 = setcolor( int2( 15 ) )
call moveto( ( maxx - dummy ) / 2, newy( int2( 90 ) ) , xy )
call outgtext( ' M A I N M E N U ' )
call settextposition( 7, 20, curpos )
call
call
call
call

outtext( '1. Select data directory' )


settextposition( 8, 28, curpos )
outtext( dir )
settextposition( 10, 20, curpos )

call outtext( '2. Select product and store combination' )


call settextposition( 11 , 28, curpos )
call outtext( 'Product:' )
call settextposition( 11 , 37, curpos)
call outtext( prod )
call settextposition( 12, 28, curpos )
call outtext( 'Store :' )
if( store .It. 10 ) then
write(str,'(il)') store
else
write(str,' (12)') store
109

end
call
call
call

if
settextposition( 12, 37, curpos )
outtext( str )
settextposition( 14, 20, curpos )

call outtext( '3. Select scenario' )


call settextposition( 15, 28, curpos
call outtext( 'Review Period:' )
call settextposition( 15, 43, curpos
write(str,'(il)') rp
call outtext( str )
call settextposition( 16, 28, curpos
call outtext( 'Lead Time
:' )
call settextposition( 16, 43, curpos
write(str,'(il)') It
call outtext( str )
call settextposition( 18, 20, curpos

)
)

)
)

call outtext( '4. Select search parameter' )


call settextposition( 19, 28, curpos )
call outtext( 'Smax :' )
if( smax .It. 10 ) then
write(str,'(il)') smax
else if( smax .It. 100 ) then
write(str,'(i2)') smax
else
write(str,'(i3)') smax
end if
call settextposition( 19, 35, curpos )
call outtext( str )
call settextposition( 21, 20, curpos )
call
call
call
call

outtext( '5. Execute program' )


settextposition( 23, 20, curpos )
outtext( '6. Exit to DOS' )
settextposition( 26, 24, curpos )

call outtext( 'Please enter the desired option' )


call input( 26, 57, 1 )
end

110

subroutine openfiles( iflag)


include 'fgraph.fd'
integer
character
character
character
character

*6
* 40
* 43
* 53

store, smax
prod
dir
strl
str2

record /rccoord/

curpos

common /initial/

dir, prod, store, smax

if( dir .eq. 'a:' .or. dir .eq. ' A : ' ) then
open( 1, file = 'a:7/prod//'.dst', status = 'old', err=10 )
open( 7, file = 'a: class20.txt', status='old', err=10 )
else if( dir .eq. 'b:' .or. dir .eq. 'B:' ) then
open( 1, file = 'b:7/prod//'.dst', status='old', err=10 )
open( 7, file = 'bxlass20.txt', status = 'old', err=10 )
else if( dir .eq. 'c:' .or. dir .eq. ' C : ' ) then
open( 1, file = 'c:7/prod//'.dst', status = 'old', err=10 )
open( 7, file = 'cxlass20.txt', status = 'old', err=10 )
else
open( 1, file = dir//'\7/prod//'.dst', status = 'old', err =10 )
open( 7, file = dir//'\7/'class20.txt', status = 'old', err=10 )
end if
iflag = 0
return
call clearscreen( $clearscreen )
call refresh()
call border2()
call settextposition( 11, 23, curpos )
call outtext( ' ERROR: Unable to access data files ' )
call settextposition( 14, 14, curpos )
strl = 'The program could not open either the file '
write(str2, '(a43,a6,a4)') strl, prod, '.dst'
call outtext( str2 )
str2 = 'or the file class20.txt in the directory'
call settextposition( 15, 14, curpos )
call outtext( str2 )
call settextposition( 16, 14, curpos )
call outtext( dir)
call settextposition( 18, 28, curpos )
call outtext( 'Press < Enter > to continue' )
111

iflag = 1
call settextposition( 20, 90, curpos )
read( * , '(al)') str
end

subroutine titles( prod, store, rp, It)


include 'fgraph.fd'
integer * 2
integer
character * 6
character * 29

dummy, temp, maxx, maxy, newx, newy


store, rp
prod, size(3)
str

record /rccoord/
record /xycoord/

curpos
xy

common /coord/
common /video/

maxx, maxy
size

call clearscreen( $gclearscreen )


call refresh()
dummy = setfont( size(l))
write(str, '(a9,a6,all,i2)') ' Product ',prod,' - Store ', store
dummy = getgtextextent( str )
call moveto( ( maxx - dummy ) / 2, newy( int2( 100 ) ), xy )
call outgtext( str )
call moveto( ( maxx - dummy ) / 2, newy( int2( 200 ) ) , xy )
temp = lineto( ( maxx + dummy ) / 2, newy( int2( 200 ) ) )
dummy = setfont( size(3) )
write(str, '(a5,il,al7,il,a5)') 'RP = ', rp, ' days
L T = ', It, ' days'
dummy = getgtextextent( str )
call moveto( ( maxx - dummy ) / 2, newy( int2( 150 ) ) , xy )
call outgtext( str )
dummy = setfont( size(2) )
dummy = getgtextextent( 'OPTIMAL POLICY' )
call moveto( newx( int2( 25 ) ) + maxx / 4 - dummy / 2, newy( int2( 250 ) ), xy )
call outgtext( 'OPTIMAL POLICY' )
call settextposition( 11, 12, curpos )
call outtext( 'Reorder Point :' )
call settextposition( 12, 12, curpos )
call outtext( 'Target Level :' )
call settextposition( 14, 12, curpos )
call outtext( 'Service Level :'.)
112

call settextposition( 15, 12, curpos )


call outtext( 'Annual Cost :' )
dummy = getgtextextent( 'CURRENT POLICY ')
call moveto( maxx - newx( int2( 25 ) ) - maxx / 4 - dummy / 2,
+
newy( int2( 250 ) ), xy )
call outgtext( ' C U R R E N T POLICY' )
call settextposition( 11, 48, curpos )
call outtext( 'Reorder Point:' )
call settextposition( 12, 48, curpos )
call outtext( 'Target Level :' )
call settextposition( 14, 48, curpos )
call outtext( 'Service Level :' )
call settextposition( 15, 48, curpos )
call outtext( 'Annual Cost :' )
call settextposition( 17, 29, curpos )
call outtext( 'Working . . . please wait' )
end

subroutine current( more )


include 'fgraph.fd'
dimension
integer * 2
integer
character * 1
character * 6
character * 7
character * 52

f(0:7,0:200), p(0:200,0:200)
dummy, maxx, maxy, newy
rp, bigs, smalls
more
size(3)
str
str2

record /xycoord/
record /rccoord/

xy
curpos

common /ptm/
common /costs/
common /video/
common /coord/

f, p, rp, It, bigs, smalls


fc, vc, eac, cac, clevel, mu
size
maxx, maxy

write(str,'(i3)') smalls
call settextposition( 11, 67, curpos )
call outtext( str )
write(str,'(i3)') bigs
call settextposition( 12, 67, curpos )
call outtext( str )
write(str,'(f5.1,al)') clevel * 100,'%'
113

call settextposition( 14, 64, curpos )


if( clevel .It. 0.975) dummy = settextcolor( 4 )
call outtext( str )
if( clevel .It. 0.975) dummy = settextcolor( 15 )
write(str,'(f6.2)') cac
call settextposition( 15, 64, curpos )
call outtext( str )
call settextposition( 17, 28, curpos )
call outtext( '
')
if( eac .le. cac ) then
icol = 12
save = cac - eac
pet = save / cac * 100
write(str,'(al,f4.1,a2)') '(', pet, '%)'
call settextposition( 18, 28, curpos )
call outtext( str )
else
icol = 48
save = eac - cac
end if
call settextposition( 17, icol, curpos )
call outtext( 'Annual Savings:' )
write(str,'(f6.2)') save
call settextposition( 17, icol + 16, curpos )
call outtext( str )
do while( more .ne. ' Y ' .and. more .ne. 'y' .and. more .ne. ' N '
+
.and. more .ne. 'n' )
call settextposition( 27, 67, curpos )
call outtext( '
')
call settextposition( 27, 12, curpos)
str2 = 'Would you like to evaluate a different policy? (y/n)'
call outtext( str2 )
call input( 27, 67, 1 )
read( * , '(al)') more
end do
if( more .eq. ' Y ' .or. more .eq. 'y' ) then
dummy = setfont( size(2))
dummy = getgtextextent( ' A L T E R N A T E POLICY' )
call moveto( ( maxx - dummy ) / 2, newy( int2( 640 ) ) , xy )
call outgtext('ALTERNATE POLICY')
end if
close( 7 )
end

114

subroutine alternate( more )


include 'fgraph.fd'
dimension
real
integer
integer * 2
character * 1
character * 6
character * 52

f(0:7,0:200), p(0:200,0:200)
mu
rp, bigs, smalls
dummy, newx, newy, maxx, maxy
more
str
str2

record /rccoord/

curpos

common /ptm/
common /costs/
common /coord/

f, p, rp, It, bigs, smalls


fc, vc, eac, cac, clevel, mu
maxx, maxy

call setviewport( newx( int2( 100 ) ) , newy( int2( 700 ) ) , newx( int2( 900 ) ) ,
+
newy( int2( 940 ) ) )
call clearscreen( $gviewport)
call setviewport( 0, 0, maxx, maxy )
call settextposition( 23, 12, curpos )
call outtext( 'Reorder Point :' )
write(str,'(i3)') smalls
call settextposition( 23, 30, curpos )
call outtext( str )
call settextposition( 24, 12, curpos )
call outtext( 'Target Level :' )
write(str,'(i3)') bigs
call settextposition( 24, 30, curpos )
call outtext( str )
call settextposition( 23, 48, curpos )
call outtext( 'Service Level :' )
write(str,'(f5.1,al)') clevel * 100,'%'
call settextposition( 23, 64, curpos )
if( clevel .It. 0.975) dummy = settextcolor( 4 )
call outtext( str )
if( clevel .It. 0.975) dummy = settextcolor( 15 )
call settextposition( 24, 48, curpos)
call outtext( 'Annual Cost :' )
write(str,'(f6.2)') cac
call settextposition( 24, 64, curpos )
call outtext( str )
more = ' '

115

do while( more .ne. ' Y ' .and. more .ne. 'y' .and. more .ne. ' N ' .and. more .ne. 'n
call settextposition( 27, 65, curpos )
call outtext( '
')
call settextposition( 27, 12, curpos )
str2 = 'Would you like to evaluate a different policy? (y/n)'
call outtext( str2 )
call input( 27, 67, 1 )
read( * , '(al)') more
end do
end

subroutine refresh()
include 'fgraph.fd'
integer
integer * 2

dummy4
dummy2, newx, newy, maxx, maxy

common /coord/

maxx, maxy

call clearscreen( $gclearscreen )


dummy4 = setcolor( int2( 15 ) )
dummy2 = rectangle( $gborder, newx( int2( 50 ) ) , newy( int2( 50 ) ),
+
newx( int2( 950 ) ), newy( int2( 950 ) ) )
end

subroutine input( iy, ix, length )


include 'fgraph.fd'
integer * 2
integer

dummy2, maxx, maxy


dummy4

record /rccoord/
common /coord/

curpos
maxx, maxy

dummy4 = setcolor( int2( 4 ) )


dummy2 = rectangle( $gborder, ( maxx * i x / 8 0 ) - 1 5 , ( maxy * iy / 30 ) - 22
+
( maxx * ( i x + length ) / 80 ) + 2, ( maxy * iy / 30 ) + 5 )
call settextposition( iy, ix, curpos )
dummy4 = setcolor( int2( 15 ) )
end
116

subroutine clearinput( iy, ix, length )


include 'fgraph.fd'
integer * 2
integer

dummy2, maxx, maxy


dummy4

common /coord/ maxx, maxy


dummy4 = setcolor( int2( 1 ) )
dummy2 = rectangle( $gborder, (maxx * ix / 80 ) - 15, ( maxy * iy / 30 ) +
( maxx * ( ix + length ) / 80 ) + 2, ( maxy * iy / 30 ) + 5 )
dummy4 = setcolor( int2( 15 ) )
end

subroutine borderl()
include 'fgraph.fd'
integer * 2

dummy2, maxx, maxy

common /coord/

maxx, maxy

dummy2 = rectangle( $gborder, ( maxx * 1 0 / 8 0 ), maxy * 1 2 / 3 0 - 7 ,


+
( maxx * 70 / 80 ), ( maxy * 18 / 30 ) )
end

subroutine border2()
include 'fgraph.fd'
integer * 2

dummy2, maxx, maxy

common /coord/

maxx, maxy

dummy2 = rectangle( $gborder, ( maxx * 1 0 / 8 0 ), maxy * 1 1 / 3 0 - 7 ,


+
( maxx * 70 / 80 ), ( maxy * 19 / 30 ) )
end

117

integer * 2 function newx( xcoord )


integer * 2
real * 4

xcoord, maxx, maxy


tempx

common /coord/

maxx, maxy

tempx = maxx / 1000.


tempx = xcoord * tempx + 0.5
newx = tempx
end
integer * 2 function newy( ycoord )
integer * 2
real * 4

ycoord, maxx, maxy


tempy

common /coord/

maxx, maxy

tempy = maxy / 1000.


tempy = ycoord * tempy + 0.5
newy = tempy
end

118

Appendix J
The Source Code for the "Main" Module

include 'fgraph.fi'

subroutine opt()
include 'fgraph.fd'
dimension
dimension
real
integer
character * 1
character * 6
character * 40

f(0:7,0:200), p(0:200,0:200)
pi(0:200), spi(0:200), temppi(0:200), tempspi(0:200)

record /rccoord/

curpos

common /initial/
common /ptm/
common /vector/
common /costs/

dir, prod, store, smax


f, p, rp, It, bigs, smalls
pi, spi
fc, vc, eac, cac, clevel, mu

mean, mu
store, rp, smalls, bigs, smin, smax, ssopt, bsopt
q, t
prod, str
dir

10

do 10 i = 0, 7
do 10 j = 0, 200
f(i,j) = 0
f(0,0) = 1
fsum = 0.

read in demand distribution

20

j = store / 10
k = mod( store, 10 )
q = char( j + 48 )
t = char( k + 48 )
read(l,1000) ( q, i = 1, 10 ), price
read(l,1100)
read(l,1200) max, ( f(l,max), j = 1, store )
do 20 j = max-1, 0, -1
read(l,1200) k, ( f(l,j), i = 1, store )
close( 1 )
imax = 0
do while( imax .eq. 0 )
if( f(l,max) .eq. 0 ) then
119

max = max - 1
else
imax = 1
end if
end do

if( max .ge. 50 ) write(8, * ) 'WARNING: M A X EXCEEDS 50'


ssopt = 0
bsopt = 0
eac = I.elO
fill = 0.

fc = 0.085
vc = ( .30 / 365. ) * price
*

40
50

create the cumulative demand distribution and convolve the demand up to 'rp' days
do 40 i = 0, max
fsum = fsum + f(l,i)
do 50 i = 0, max
f(l,i) = f(l,i) / fsum
mu = mean( f, max )
call conv( f, rp, max )
obtain an initial solution
call lbound( f, rp, mu, max, smin )
bigs - - smin
smalls = - 1
call update 1( smin )
smalls = smalls - 1
call steady()

60

iterate for S = smin to smax


do while( bigs .It. smax )
iflag = 0
temp = service( mu )
if( temp .ge. 0.975 ) then
do while( temp .ge. 0.975 .and. smalls .ge. 0 )
slevel = temp
do 60 i = 0, bigs
temppi(i) = pi(i)
tempspi(i) = spi(i)
if( smalls .gt. 0 ) then
call update 1( smalls - 1 )
call steady()
temp = service( mu )

120

else
smalls = smalls - 1
end if
end do
call update 1( smalls + 1 )
do 70 i= 0 , bigs
pi(i) = temppi(i)
spi(i) = tempspi(i)
else
do while( temp .It. 0.975 .and. smalls .It. bigs-1 .and. iflag .eq. 0 )
tcost = cost( fc, vc )
if( tcost .ge. eac ) iflag = 1
call update 1( smalls + 1 )
call steady()
temp = service( mu )
end do
slevel=temp
if( smalls .eq. bigs-1 .and. slevel .It. 0.975 ) iflag = 1
end if
if( iflag .eq. 0 ) then
tcost = cost( fc, vc )
if( tcost .It. eac ) then
eac = tcost
fill = slevel
ssopt
smalls
bsopt = bigs
end if
end if
call update2( bigs + 1 )
call steady()
end do
;

print optimal policy to the screen


write(str,'(i3)') ssopt
call settextposition( 11, 31,
call outtext( str )
write(str,'(i3)') bsopt
call settextposition( 12, 31,
call outtext( str )
write(str,'(f5.1,al)') fill *
call settextposition( 14, 28,
call outtext( str )
write(str,'(f6.2)') eac
call settextposition( 15, 28,
call outtext( str )

curpos )

curpos )
100,'%'
curpos)

curpos )

121

1000
1100
1200

format( //10(al), f8.2 )


format(////)
format( /i9, 21(f5.0))
end

subroutine conv( f, rp, max )


*

convolves the demand up to 7 days


dimension
integer

10

f(0:7,0:200)
rp

do 10 i = 2, rp
do 10 j = 0, i * max
do 10 k = 0, j
f(i,j) = f(i,j) + f(l,k) * f(i-l,j-k)
end

subroutine lbound( f, rp, mu, max, smin )


*

calculates a lower bound for S


dimension
real
integer

f(0:7,0:200)
mu, lost
rp, smin

smin = 0
if( mu .gt. 0 ) then

10

j = 0
fill = 0.
do while( fill .It. 0.975 )
smin = j
.lost = 0.
do 10 k = 0, max
if( smin .It. k ) lost = lost + ( k - smin ) * f(rp,k)
fill = 1. - lost / ( rp * mu )
j = J + 1
end do
end if
if( smin .It. 1 ) smin = 1
end
122

subroutine updatel( new )


*

updates the transition matrix for policy (s,S) to one for (new,S)
dimension
integer

f(0:7,0:200), p(0:200,0:200)
rp, bs, ss

common /ptm/

f, p, rp, It, bs, ss

consider new > s


if( ( new - ss ) .gt. 0 ) then

20

40
30

60
50
10
*

80
90
70

do 10 i = ss + 1, new
sum = 0.
do 20 k = 0, i - l
sum = sum + f(lt,k) * tail( f, rp - It, bs - k )
p(i,0) = sum + tail( f, It, i ) * tail( f, rp - It, bs - i )
do 30 j = 1, bs-i
sum = 0.
do 40 k = 0, i - l
sum = sum + f(lt,k) * f(rp-lt,bs-j-k)
p(i,j) = sum + tail( f, It, i ) * f(rp-lt,bs-j-i)
do 50 j = bs-i+1, bs
sum = 0
do 60 k = 0, bs-j
sum = sum + f(lt,k) * f(rp-lt,bs-j-k)
p(i,j) = sum
continue
consider new < s
else
do 70 i =ss, new + 1, -1
p(i,0) = tail( f, rp, i )
do 80 j =1, i
p(i,j) = f(rp,i-j)
do 90 j = i+1, bs
p(i,j) = 0.
continue
end if
ss = new

123

subroutine update2( new )


*

updates the transition matrix for policy (s,S) to one for (s,new)
dimension
integer

f(0:7,0:200), p(0:200,0:200)
rp, bs, ss

common /ptm/

f, p, rp, It, bs, ss

note: it is assumed that new > S

consider i < = ss

20

30

50
40
10
*

60

80
90
70

do 10 i = 0, ss
do 20 j = new, new-bs+1, -1
p(i,j) = p(i,j-new+bs)
sum = 0.
do 30 k = 0, i - l
sum = sum + f(lt,k) * tail( f, rp - It, new - k )
p(i,0) = sum + tail( f, It, i ) * tail( f, rp - It, new - i )
do 40 j = 1, new-bs
sum = 0.
do 50 k = 0, i - l
sum = sum + f(lt,k) * f(rp-lt,new-j-k)
p(i,j) = sum + tail( f, It, i ) * f(rp-lt,new-j-i)
continue
consider i > ss
do 60 i = ss +1, bs
do 60 j = bs +1, new
p(i,j) = 0.
do 70 i = bs + 1, new
p(i,0) = tail( f, rp, i )
do 80 j = 1, i
p(i,j) = f(rp,i-j)
do 90 j = i+1, bs .
p(i,j) = 0.
continue
bs = new
end

124

subroutine steady()
solves for the steady state probabilities

20
10
30

40

dimension
dimension
integer

f(0:7,0:200), p(0:200,0:200), a(0:200,0:200)


pi(0:200), spi(0:200)
rp, bs, ss

common /ptm/
common /vector/

f, p, rp, It, bs, ss


pi, spi

do 10 i = 0, bs
do 20 j = 0, bs
a(ij) = p(i,j)
a(i,i) = a(i,i) - 1.
pi(i) = 0.
spi(i) = 0.
call trans( a, bs )
do 30 j = 0, bs
a(bs,j) = 1.
pi(bs) = 1.
call gauss( a, pi, bs )
if( It .eq. rp ) then
do 40 j = 0, bs
spi(j) = piO)
else
call shift()
end if
end
subroutine trans( a, n )

transposes a square matrix


dimension

10

a(0:200,0:200)

do 10 i = 0, n-l
do 10 j = i+1, n
r = a(i,j)
c = a(j,i)
a(i j ) = c
a(j,i) = r

125

subroutine gauss( a, x, n )
*

solves a system of linear equations


dimension

a(0:200,0:200), x(0:200)

tol = l.e-10
do 10 i = 0, n-1
k = i

20

30

d = abs( a(i,i))
do 20 j = i + 1, n
c = abs( aG,i))
if( c .gt. d ) then
k = j
d = c
end if
continue
if( k .ne. i ) then
do 30 j = i, n
c = a(i,j)
a(i,j) = a(k,j)
a(k,j) = c
c = x(i)
x(i) = x(k)
x(k) = c
end if
if( abs( a(i,i)) .le. tol) return

40

60
50
10

e = a(i,i)
do 40 j = i, n
a(i,j) = a(i,j) / e
x(i) = x(i) / e
do 50 j = i+1, n
e = - a(j,i)
do 60 k = i, n
a(j,k) = a(j,k) + e * a(i,k)
x(j) = x(j) + e * x(i)
continue
if( abs( a(n,n)) .le. tol) return
x(n) = x(n) / a(n,n)
126

70

a(n,n) = 1.
do 70 i = n, 1, -1
do 70 j = i - l , 0, -1
e = - a(j,i)
x(j) = x(j) + e * x(i)
end

subroutine shift()
*

calculates the steady-state probabilities for a shift of "It" days


dimension
integer

f(0:7,0:200), p(0:200,0:200), pi(0:200), spi(0:200)


rp, bs, ss

common /ptm/
common /vector/

f, p, rp, It, bs, ss


pi, spi

20
10

do 10 i = 0, ss
spi(bs-i) = spi(bs-i) + pi(i) * tail( f, It, i )
do 20 j = bs-i+1, bs
spi(j) = spi(j) + pi(i) * f(lt,bs-j)
continue

40
30

do 30 i = ss + 1, bs
spi(O) = spi(O) + pi(I) * tail( f, It, i )
do 40 j = 1, i
spi(j) = spi(j) + pi(I) * f(lt,i-j)
continue
end

subroutine policy( new )


evaluates the policy (new,bigs)
dimension
real
integer

f(0:7,0:200), p(0:200,0:200)
mu
rp, bigs, smalls

common /ptm/
common /costs/

f, p, rp, It, bigs, smalls


fc, vc, eac, cac, clevel, mu

call update 1( bigs)


call update 1( new )
127

call steadyO
cac = cost( fc, vc )
clevel = service( mu )
end

real function mean( f, max )


*

calculates the mean daily demand


dimension

10

f(0:7,0:200)

mean = 0.
do 10 i = 1, max
mean = mean + i * f(l,i)
end

function service( mu )
calculates 1 minus the ratio of expected demand not met to expected demand
dimension
real
integer

f(0:7,0:200), p(0:200,0:200), pi(0:200), spi(0:200)


mu
rp, bigs, smalls

common /ptm/
common /vector/

f, p, rp, It, bigs, smalls


pi, spi

service = 1.

20
10

if( mu .gt. 0. ) then


do 10 j = 0, bigs
sum = 0.
do 20 k = 0, j-1
sum = sum + ( k - j ) * f(rp,k)
service = service - spi(j) * ( rp * mu - j - sum ) / (rp * mu)
end if
end

128

function cost( fc, vc )


calculates the annual expected inventory cost

10

dimension
integer

f(0:7,0:200), p(0:200,0:200), pi(0:200), spi(0:200)


rp, bigs, smalls

common /ptm/
common /vector/

f, p, rp, It, bigs, smalls


pi, spi

stock = ei()
cost = 0.
do 10 i = 0, smalls
cost = cost + fc * pi(i)
cost = cost + vc * stock
cost = cost * 365. / rp
end

function ei()
calculates the expected amount of inventory during the review period
dimension
integer

f(0:7,0:200), p(0:200,0:200), pi(0:200), spi(0:200)


rp, bigs, smalls

common /ptm/
common /vector/

f, p, rp, It, bigs, smalls


pi, spi

ei = 0.

20
10

do 10 i = 0, bigs
sum = 0.
do 20 d = 0, rp-1
do 20 k = 0, i - l
sum = sum + ( i - k ) * f(d,k)
ei = ei + spi(i) * sum
end

129

function tail( f, i, j )
*

evaluates Pr{ X(i) > = j }


dimension

10

f(0:7,0:200)

sum = 0
do 10 k = 0, j-1
sum = sum + f(i,k)
tail = 1. - sum
end

130

Appendix K
Current and Optimal Policies for Product Category 20 at Store 6

CURRENT
PRODUCT

Cost
($)

OPTIMAL
CSL

(%)

Cost
($)

SAVINGS
CSL
(%)

($)

(%)

200001

12

14

7.48

100.0

3.19

97.7

4.29

57.4%

200002

6.52

99.9

4.20

98.5

2.32

35.6%

200004

2.35

100.0

1.43

98.6

0.92

39.1%

200006

2.89

100.0

1.69

99.7

1.20

41.5%

200008

2.60

100.0

1.84

97.8

0.76

29.2%

200010

1.68

100.0

0.89

98.6

0.79

47.0%

200016

5.06

100.0

2.33

98.7

2.73

54.0%

200017

4.68

100.0

2.99

98.1

1.69

36.1%

200020

2.16

100.0

0.78

98.6

1.38

63.9%

200025

14

18

7.50

100.0

11

3.39

97.7

4.11

54.8%

200032

0.39

100.0

0.39

100.0

0.00

0.0%

200047

1.26

100.0

0.49

98.6

0.77

61.1%

200048

2.89

100.0

1.40

97.8

1.49

51.6%

200049

2.02

100.0

1.19

98.5

0.83

41.1%

200050

1.28

100.0

0.39

98.6

0.89

69.5%

200052

3.93

99.9

2.24

97.7

1.69

43.0%

201030

7.85

99.7

6.16

98.9

1.69

21.5%

201032

21

26

. 36.62

100.0

11

13.42

97.8

23.20

63.4%

201036

4.04

100.0

2.38

98.1

1.66

41.1%

201038

25

45

18.74

100.0

23

8.97

97.5

9.77

52.1%

201045

2.82

98.6

2.82

98.6

0.00

0.0%

201502

1.48

99.3

1.23

99.7

0.25

16.9%

201503

1.99

100.0

1.31

99.7

0.68

34.2%

201505

3.50

99.7

1.78

97.5

1.72

49.1%

201506

6.42

100.0

3.60

98.0

2.82

43.9%

131

CURRENT
PRODUCT

Cost
($)

OPTIMAL
CSL

(%)

SAVINGS

Cost

CSL

($)

(%)

($)

(%)

201507

7.28

100.0

3.12

97.9

4.16

57.1%

201508

2.20

100.0

0.55

100.0

1.65

75.0%

201509

2.29

100.0

0.64

98.6

1.65

72.1%

201510

2.20

100.0

0.55

100.0

1.65

75.0%

201511

2.20

100.0

0.55

100.0

1.65

75.0%

201512

3.34

100.0

1.53

98.9

1.81

54.2%

201513

3.45

97.1

3.60

98.2

-0.15

-4.3%

201514

3.50

100.0

2.12

98.5

1.38

39.4%

201521

3.76

100.0

1.80

97.7

1.96

52.1%

201522

3.66

100.0

2.24

98.4

1.42

38.8%

201523

10

12

6.49

100.0

3.05

98.0

3.44

53.0%

201525

10

5.55

100.0

2.56

98.0

2.99

53.9%

201526

3.31

99.4

1.78

97.8

1.53

46.2%

201530

12

15

7.13

100.0

10

3.29

97.7

3.84

53.9%

201531

20

25

9.57

100.0

14

4.29

98.0

5.28

55.2%

201532

10

4.68

100.0

2.24

98.8

2.44

52.1%

201533

10

5.14

100.0

2.51

97.5

2.63

51.2%

201534

4.52

99.9

2.10

97.8

2.42

53.5%

201550

13

16

6.74..

100.0

10

2.73

97.7

4.01

59.5%

201551

4.33

100.0

2.35

98.3

1.98

45.7%

201552

2.29

100.0

1.28

99.7

1.01

44.1%

201553

25

35

25.15

100.0

19

11.66

97.5

13.49

53.6%

201554

10

20

8.65

100.0

14

5.93

97.6

2.72

31.4%

201555

10

20

5.63

100.0

2.66

97.6

2.97

52.8%

201556

2.81

99.7

2.13

98.5

0.68

24.2%

201558

3.49

99.9

2.16

97.5

1.33

38.1%

201564

2.94

99.9

1.52

98.2

1.42

48.3%

201566

4.07

100.0

1.74

97.7

2.33

57.2%

201568

3.99

100.0

1.72

97.8

2.27

56.9%

132

CURRENT
PRODUCT

Cost
($)

OPTIMAL
CSL

(%)

SAVINGS

Cost

CSL

($)

(%)

($)

(%)

201570

2.76

100.0

1.60

97.8

1.16

42.0%

201572

23

28

10.61

100.0

17

4.44

97.5

6.17

58.2%

201573

3.88

99.8

1.79

97.9

2.09

53.9%

201575

4.82

99.9

3.25

98.4

1.57

32.6%

201577

15

18

11.98

100.0

14

5.50

97.7

6.48

54.1%

201578

25

35

16.71

,100.0

20

8.38

97.7

8.33

49.9%

201579

10

7.41

100.0

10

3.86

97.6

3.55

47.9%

201580

16

26

11.85

100.0

14

6.43

97.7

5.42

45.7%

201581

10

6.06

99.9

3.90

97.7

2.16

35.6%

201582

10

20

5.47

100.0

3.05

97.6

2.42

44.2%

201586

10

5.45

100.0

2.91

98.3

2.54

46.6%

201589

2.95

100.0

1.51

99.0

1.44

48.8%

202005

12.12

99.8

11.95

97.6

0.17

1.4%

202006

8.76

95.8

13.13

97.8

-4.37

-49.9%

202036

8.76

99.7

7.18

98.6

1.58

18.0%

202037

9.35

98.9

9.35

98.9

0.00

0.0%

202055

14.63

99.3

14.63

99.3

0.00

0.0%

202072

3.51

98.6

3.51

98.6

0.00

0.0%

202073

16.69

99.9

12.45

97.8

4.24

25.4%

202100

24.22

99.9

18.09

98.1

6.13

25.3%

202101

6.63

100.0

4.58

99.6

2.05

30.9%

202105

12.12

97.7

12.12

97.7

0.00

0.0%

202106

10

26.57

100.0

4.25

97.8

22.32

84.0%

202107

5.59

100.0

2.79

100.0

2.80

50.1%

202900

80

90

25.94

100.0

21

43

9.13

97.6

16.81

64.8%

202901

10

14

6.14

100.0

15

3.72

97.7

2.42

39.4%

202907

3.50

99.8

2.36

97.9

1.14

32.6%

202916

110

130

22.95

100.0

32

69

9.12

97.5

13.83

60.3%

202918

30

40

13.36

100.0

23

5.81

97.5

7.55

56.5%

133

CURRENT
PRODUCT

OPTIMAL

Cost

CSL

($)

(%)

S
'

SAVINGS

Cost

CSL

($)

(%)

($)

(%)

202921

10

5.94

99.7

11

3.59

97.7

2.35

39.6%

202925

30

40

8.42

100.0

24

4.23

97.6

4.19

49.8%

202930

10

2.85

100.0

1.43

97.6

1.42

49.8%

203001

1.73

98.0

1.03

97.9

0.70

40.5%

203003

10

20

3.00

100.0

1.53

97.7

1.47

49.0%

203004

1.62

100.0

1.01

97.7

0.61

37.7%

203008

1.95

97.6

1.67

97.6

0.28

14.4%

203010

10

20

3.88

99.1

20

3.33

97.7

0.55

14.2%

203012

20

30

6.05

100.0

23

3.62

97.6

2.43

40.2%

203013

1.57

98.5

1.23

97.7

0.34

21.7%

203017

26

36

6.82

100.0

20

3.27

97.9

3.55

52.1%

203018

10

12

4.48

100.0

1.90

98.0

2.58

57.6%

203019

3.07

99.6

2.11

97.8

0.96

31.3%

203020

2.57

99.5

1.71

98.1

0.86

33.5%

203024

130

140

27.71

100.0

29

64

8.58

97.5

19.13

69.0%

203031

10

20

5.20

100.0

11

3.14

97.6

2.06

39.6%

203032

10

12

5.18

100.0

12

2.86

97.6

2.32

44.8%

203033

20

24

8.86

100.0

13

3.56

97.7

5.30

59.8%

203039

30

40

6.29

100.0

16

2.45

97.9

3.84

61.0%

203040

2.92

98.2

1.97

98.0

0.95

32.5%

203044

14

24

6.20

100.0

12

2.94

97.7

3.26

52.6%

203045

1.84

100.0

1.17

98.6

0.67

36.4%

203047

1.60

100.0

0.63

97.8

0.97

60.6%

203053

2.48

97.3

2.57

98.0

-0.09

-3.6%

203056

3.70

100.0

2.27

98.2

1.43

38.6%

203057

2.86

99.9

1.85

99.2

1.01

35.3%

203058

4.37

100.0

2.48

97.8

1.89

43.2%

203059

4.48

100.0

3.13

98.6

1.35

30.1%

203060

3.91

99.9

11

2.41

97.7

1.50

38.4%

134

CURRENT
PRODUCT

OPTIMAL

Cost

CSL

($)

(%)

SAVINGS

Cost

CSL

($)

(%)

($)

(%)

203061

2.80

99.0

1.79

98.8

1.01

36.1%

203064

10

4.73

99.9

2.57

97.9

2.16

45.7%

203065

2.29

99.2

1.89

97.6

0.40

17.5%

203066

5.30

100.0

2.98

97.7

2.32

43.8%

203067

3.39

99.5

2.21

97.6

1.18

34.8%

203068

50

60

20.03

100.0

11

27

7.11

97.6

12.92

64.5%

203069

2.95

96.8

10

2.47

97.5

0.48

16.3%

203070

18

20

10.05

100.0

14

3.91

97.6

6.14

61.1%

203071

3.21

96.7

3.20

98.4

0.01

0.3%

203072

3.13

100.0

1.80

98.4

1.33

42.5%

203076

2.68

100.0

1.99

99.6

0.69

25.7%

203081

10

20

5.29

100.0

2.95

97.6

2.34

44.2%

203082

7.25

100.0

4.51

97.7

2.74

37.8%

203083

10

20

10.46

100.0

11

6.62

98.2

3.84

36.7%

203085

12

16

17.79

100.0

3.50

99.2

14.29

80.3%

203086

12

16

21.50

100.0

6.88

98.0

14.62

68.0%

203091

12

14

20.01

100.0

8.97

97.6

11.04

55.2%

203093

13

16

30.57

100.0

10.39

98.0

20.18

66.0%

203094

145

175

195.22

100.0

34

45

37.27

97.5

157.95

80.9%

203095

10

12

7.21

100.0

13

3.30

97.7

3.91

54.2%

203096

6.73

99.9

4.63

97.9

2.10

31.2%

203097

30

40

49.61

100.0

14

14.67

97.6

34.94

70.4%

203098

4.90

100.0

2.45

100.0

2.45

50.0%

203099

21.64

100.0

11.45

97.9

10.19

47.1%

203202

5.31

100.0

2.68

98.6

2.63

49.5%

203312

2.37

30.3

12

13

7.48

98.6

-5.11

-215.6%

203313

3.29

100.0

1.37

98.6

1.92

58.4%

203314

3.78

100.0

1.72

97.8

2.06

54.5%

203315

9.08

99.0

7.86

97.7

1.22

13.4%

135

CURRENT
PRODUCT

Cost
($)

OPTIMAL
CSL
(%)

Cost
($)

SAVINGS
CSL
(%)

($)

(%)

203316

3.49

99.9

2 .

2.43

98.0

1.06

203317

1.24

97.7

1.24

97.7

0.00

0.0%

203318

1.36

83.3

2.20

98.5

-0.84

-61.8%

203319

2.47

100.0

1.16

98.1

1.31

53.0%

203321

3.12

100.0

1.24

98.1

1.88

60.3%

203322

2.89

100.0

1.75

98.6

1.14

39.4%

203323

2.95

99.3

2.39

98.5

0.56

19.0%

203324

1.02

98.6

1.02

98.6

0.00

0.0%

203325

2.51

99.7

1.56

97.5

0.95

37.8%

203326

1.44

96.0

1.58

97.9

-0.14

-9.7%

203327

2.92

97.8

2.90

98.1

0.02

0.7%

203400

5.11

99.9

2.94

97.6

2.17

42.5%

203403

10

6.89

98.1

11

6.43

97.8

0.46

203404

5.06

100.0

2.14

98.2

2.92

57.7%

203405

2.55

97.0

2.92

98.4

-0.37

-14.5%

203406

3.12

100.0

1.69

97.8

1.43

45.8%

203409

5.14

100.0

1.76

98.6

3.38

65.8%

203410

4.88

100.0

1.63

100.0

3.25

66.6%

203413

3.31

100.0

1.26

98.6

2.05

61.9%

203414

3.13

100.0

0.78

100.0

2.35

75.1%

203415

3.20

100.0

0.80

100.0

2.40

75.0%

203416

3.29

100.0

0.89

98.6

2.40

72.9%

203417

2.62

100.0

0.65

100.0

1.97

75.2%

203418

4.02

100.0

1.07

98.6

2.95

73.4%

203419

3.94

100.0

0.98

100.0

2.96

75.1%

203421

6.08

98.0

6.08

98.0

0.00

0.0%

203454

12.29

99.7

7.36

97.5

4.93

40.1%

203460

4.50

97.9

4.38

97.8

0.12

2.7%

203463

4.52

98.8

4.08

98.2

0.44

9.7%

136

30.4%

6.7%

CURRENT
PRODUCT

Cost
($)

OPTIMAL
CSL
(%)

SAVINGS

Cost

CSL

($)

(%)

($)

(%)

203472

8.06

98.2

8.05

98.1

0.01

0.1%

203473

10

12

11.09

100.0

4.78

98.0

6.31

56.9%

203474

10

12

10.87

100.0

4.02

98.1

6.85

63.0%

203477

2.55

99.9

1.83

97.8

0.72

28.2%

203478

2.53

97.8

2.53

97.8

0.00

0.0%

203483

12.71

100.0

6.51

97.7

6.20

48.8%

203484

9.26

100.0

5.35

98.1

3.91

42.2%

203488

2.21

100.0

1.30

98.4

0.91

41.2%

203503

7.05

100.0

3.43

97.6

3.62

51.3%

203506

4.90

99.3

3.29

98.6

1.61

32.9%

203507

9.05

100.0

.0

2.52

98.6

6.53

72.2%

203509

6.04

99.6

4.11

97.7

1.93

32.0%

203510

8.11

100.0

4.92

98.3

3.19

39.3%

203512

2.

5.96

99.0

5.96

99.0

0.00

0.0%

203520

6.87

99.9

4.69

98.1

2.18

31.7%

203521

19.53

100.0

9.59

98.2

9.94

50.9%

203523

2.00

100.0

1.00

100.0

1.00

50.0%

203525

3.00

100.0

1.00

100.0

2.00

66.7%

203527

6.26

100.0

3.16

97.7

3.10

49.5%

203532

5.17

100.0

3.32

98.1

1.85

35.8%

203533

4.95

100.0

1.70

98.6

3.25

65.7%

203566

4.34

97.6

4.34

97.6

0.00

0.0%

203590

12.23

92.7

18.30

98.7

-6.07

-49.6%

203591

12.28

90.5

20.62

98.3

-8.34

-67.9%

203596

14.96

99.7

14.96

99.7

0.00

0.0%

203597

15.03

100.0

11.23

98.6

3.80

25.3%

203598

22.35

99.9

14.85

98.7

7.50

33.6%

203599

14.95

99.6

14.95

99.6

0.00

0.0%

203601

5.40

99.6

4.19

98.8

1.21

22.4%

137

CURRENT
PRODUCT

OPTIMAL

Cost
($)

CSL

(%)

Cost
($)

SAVINGS
CSL
(%)

($)

(%)

203604

20

13.49

100.0

10

7.65

97.7

5.84

43.3%

203609

10

57.61

100.0

24.72

97.9

32.89

57.1%

203610

32.09

100.0

18.77

97.8

13.32

41.5%

203611

12.16

99.7

10.11

98.6

2.05

16.9%

203618

6.49

100.0

4.16

97.6

2.33

35.9%

203626

4.58

98.1

4.58

98.1

0.00

203641

16.13

99.8

10.98

98.1

5.15

31.9%

203642

48

60

104.91

100.0

13

17

26.82

97.7

78.09

74.4%

203650

3.50

100.0

2.58

98.6

0.92

26.3%

203655

68

80

72.65

100.0

14

22

16.99

97.5

55.66

76.6%

203672

78

90

230.43

100.0

19

23

44.54

97.5

185.89

80.7%

203675

9.73

99.2

9.41

98.1

0.32

3.3%

203676

24

30

60.12

100.0

11.20

98.1

48.92

81.4%

203677

94

100

236.52

100.0

18

22

38.50

97.8

198.02

83.7%

203678

10

32.32

100.0

17.94

98.0

14.38

44.5%

203679

14

57.80

100.0

26.94

97.8

30.86

53.4%

203680

194

200

640.14

100.0

37

48

92.45

97.5

547.69

85.6%

203681

10

16

51.57

100.0

16.33

97.9

35.24

68.3%

203683

17.50

100.0

12.07

98.2

5.43

31.0%

203696

24.86

99.7

20.85

98.6

4.01

16.1%

203698

15.90

98.1

15.90

98.1

0.00

0.0%

203699

41.16

99.8

29.19

98.2

11.97

29.1%

203702

3.40

97.2

4.97

98.6

-1.57

-46.2%

203703

5.45

100.0

3.78

99.7

1.67

30.6%

203704

5.06

99.6

3.44

97.8

1.62

32.0%

203705

8.12

100.0

4.03

99.6

4.09

50.4%

203712

6.99

100.0

3.48

98.6

3.51

50.2%

203717

5.85

100.0

3.74

97.6

2.11

36.1%

203740

3.94

100.0

1.97

100.0

1.97

50.0%

138

0.0%

CURRENT
PRODUCT

OPTIMAL

Cost

CSL

($)

(%)

SAVINGS

Cost

CSL

($)

(%)

($)

(%)

203877

7.12

100.0

3.27

99.3

3.85

54.1%

203879

4.47

99.6

3.05

97.8

1.42

31.8%

203906

4.56

100.0

3.37

98.6

1.19

26.1%

203907

4.57

98.1

4.57

98.1

0.00

0.0%

203911

4.51

98.6

4.51

98.6

0.00

0.0%

203914

4.60

96.6

6.20

98.2

-1.60

-34.8%

203916

13.95

100.0

7.23

99.0

6.72

48.2%

203919

14.17

100.0

8.67

98.3

5.50

38.8%

203921

3.34

98.1

3.34

98.1

0.00

0.0%

203931

10.65

99.8

7.49

97.6

3.16

29.7%

203932

10

12

19.09

100.0

9.56

97.9

9.53

49.9%

203935

17.47

100.0

10.62

98.0

6.85

39.2%

203936

5.98

95.2

8.92

98.1

-2.94

-49.2%

203937

3.06

98.6

3.06

98.6

0.00

0.0%

203938

6.23

99.0

5.43

98.0

0.80

12.8%

203939

4.13

94.8

6.06

97.8

-1.93

-46.7%

203942

8.50

99.7

6.96

98.6

1.54

18.1%

203943

8.39

99.7

5.68

97.5

2.71

32.3%

203954

8.65

100.0

4.32

100.0

4.33

50.1%

203961

25.24

100.0

11.14

98.3

14.10

55.9%

203977

12.16

94.5

24.58

98.1

-12.42

-102.1%

204001

15.95

100.0

10.47

97.6

5.48

34.4%

204004

7.29

97.7

7.29

97.7

0.00

0.0%

204510

1.06

100.0

0.53

98.6

0.53

50.0%

204511

1.52

97.9

1.52

97.9

0.00

204513

1.06

99.5

0.77

98.1

0.29

27.4%

204570

2.22

97.3

1.97

97.6

0.25

11.3%

204573

2.89

99.0

2.44

98.5

0.45

15.6%

204600

2.31

100.0

1.20

98.6

1.11

48.1%

139

0.0%

CURRENT
PRODUCT

OPTIMAL

Cost

CSL

($)

(%)

SAVINGS

Cost

CSL

($)

.(%)

($)

(%)

204601

2.52

96.2

3.13

98.0

-0.61

-24.2%

204603

3.54

99.6

2.68

98.3

0.86

24.3%

204604

3.36

98.6

3.02

97.6

0.34

10.1%

204649

6.75

100.0

3.64

99.6

3.11

46.1%

204663

3.21

98.8

2.43

98.2

0.78

24.3%

204665

3.05

100.0

1.53

100.0

1.52

49.8%

204666

2.45

100.0

1.22

100.0

1.23

50.2%

204667

1.22

100.0

1.22

100.0

0.00

0.0%

204668

0.94

100.0

0.52

98.6

0.42

44.7%

204808

2.77

100.0

0.88

97.8

1.89

68.2%

205350

3.08

99.6

3.08

99.6

0.00

0.0%

205375

2.41

99.1

1.93

97.8

0.48

19.9%

205376

2.44

100.0

1.81

99.8

0.63

25.8%

205377

2.26

100.0

1.19

97.8

1.07

47.3%

205378

2.27

100.0

1.56

97.8

0.71

31.3%

205379

2.63

100.0

1.61

98.6

1.02

38.8%

205380

3.59

100.0

2.10

99.6

1.49

41.5%

205381

2.52

99.8

2.21

97.6

0.31

12.3%

205382

4.92

99.8

3.69

97.9

1.23

25.0%

205383

2.44

99.7

1.60

97.5

0.84

34.4%

205384

8.02

100.0

5.09

98.6

2.93

36.5%

205385

3.36

99.4

2.64

98.4

0.72

21.4%

205389

5.98

93.4

6.45

97.6

-0.47

-7.9%

205390

2.91

88.7

3.65

97.7

-0.74

-25.4%

205392

2.45

99.1

2.01

97.9

0.44

18.0%

205393

1.90

97.2

1.87

98.5

0.03

1.6%

205394

' 2

1.90

100.0

1.38

98.6

0.52

27.4%

205395

1.62

99.9

1.14

97.8

0.48

29.6%

205397

2.38

99.9

1.45

98.1

0.93

39.1%

140

CURRENT
PRODUCT

OPTIMAL

Cost

CSL

($)

(%)

Cost
($)

SAVINGS
CSL
(%)

($)

(%)

205398

1.40

97.6

1.40

97.6

0.00

205635

3.90

96.7

4.19

98.2

-0.29

-7.4%

205752

3.30

97.2

4.83

98.6

-1.53

-46.4%

205905

1.66

98.6

1.66

98.6

0.00

0.0%

205922

1.08

97.2

1.44

98.6

-0.36

-33.3%

205925

2.59

99.8

2.28

97.6

0.31

12.0%

205932

1.80

95.8

2.46

97.8

-0.66

-36.7%

206018

2.14

100.0

1.07

100.0

1.07

50.0%

206019

2.02

100.0

1.01

100.0

1.01

50.0%

206101

0.87

100.0

0.48

98.6

0.39

44.8%

206118

3.34

100.0

2.45

99.5

0.89

26.6%

206119

6.91

100.0

3.56

97.8

3.35

48.5%

206121

2.43

99.9

1.75

97.8

0.68

28.0%

206350

3.33

95.8

4.80

97.8

-1.47

-44.1%

206383

3.20

100.0

3.20

100.0

0.00

0.0%

206393

3.19

77.6

6.08

97.5

-2.89

-90.6%

206405

2.01

100.0

1.34

98.7

0.67

33.3%

206406

5.57

100.0

3.12

99.1

2.45

44.0%

206407

3.07

99.9

2.83

98.1

0.24

7.8%

206408

3.30

99.6

3.30

99.6

0.00

0.0%

206409

3.22

99.7

3.22

99.7

0.00

0.0%

206410

5.73

100.0

2.28

99.2

3.45

60.2%

206411

6.01

100.0

2.59

98.0

3.42

56.9%

206414

10

12

13.86

100.0

6.34

97.7

7.52

54.3%

206415

10

12

8.94

10*0.0

2.85

97.6

6.09

68.1%

206417

10

20

5.61

100.0

3.10

97.6

2.51

44.7%

206418

3.07

99.9

1.86

97.9

1.21

39.4%

206454

3.77

99.8

2.66

97.9

1.11

29.4%

206455

4.90

100.0

3.07

97.6

1.83

37.3%

141

0.0%

CURRENT
PRODUCT

Cost
($)

OPTIMAL
CSL

(%)

Cost
($)

SAVINGS
CSL
(%)

($)

(%)

206456

5.12

100.0

3.34

97.8

1.78

34.8%

206458

4.81

100.0

3.30

97.8

1.51

31.4%

206459

1.98

100.0

1.02

97.7

0.96

48.5%

206504

6.21

99.9

4.58

97.8

1.63

26.2%

206511

3.20

100.0

2.33

99.6

0.87

27.2%

206515

0.87

100.0

0.87

100.0

0.00

0.0%

206516

1.12

95.8

1.41

97.8

-0.29

-25.9%

206517

2.83

95.8

4.03

97.8

-1.20

-42.4%

206530

0.96

98.6

0.96

98.6

0.00

0.0%

206547

1.05

97.2

1.40

98.6

-0.35

-33.3%

206550

1.18

97.2

1.60

98.6

-0.42

-35.6%

206551

1.32

94.5

2.09

98.1

-0.77

-58.3%

206552

1.33

100.0

1.33

100.0

0.00

0.0%

206553

3.79

99.8

2.62

98.7

1.17

30.9%

206565

1.46

97.2

2.02

98.6

-0.56

-38.4%

206567

1.22

91.9

1.92

97.8

-0.70

-57.4%

206572

1.22

98.6

1.22

98.6

0.00

0.0%

206573

2.55

99.0

2.46

99.5

0.09

3.5%

206576

2.96

99.3

2.96

99.3

0.00

0.0%

206610

3.85

100.0

1.92

100.0

1.93

50.1%

206812

0.95

98.6

0.95

98.6

0.00

0.0%

206856

3.48

99.9

2.50

99.3

0.98

28.2%

206857

1.80

97.2

2.53

98.6

-0.73

-40.6%

206858

1.50

98.6

1.50

98.6

0.00

0.0%

206872

1.22

100.0

1.22

100.0

0.00

0.0%

206876

1.55

97.2

2.16

98.6

-0.61

-39.4%

206901

0.99

100.0

0.40

97.8

0.59

59.6%

206902

2.46

100.0

1.16

97.6

1.30

52.8%

206903

1.63

100.0

0.95

98.4

0.68

41.7%

142

CURRENT
PRODUCT

OPTIMAL

Cost

CSL

($)

(%)

Cost
($)

SAVINGS
CSL
(%)

($)

(%)

206904

1.42

99.6

1.11

97.5

0.31

21.8%

206905

10

14

3.13

100.0

1.58

98.6

1.55

49.5%

206906

10

2.97

100.0

1.22

97.9

1.75

58.9%

206907

10

3.15

100.0

1.35

97.5

1.80

57.1%

206908

12

14

5.10

100.0

10

1.87

97.9

3.23

63.3%

206909

1.24

100.0

0.82

98.9

0.42

33.9%

206910

1.20

99.5

1.00

98.8

0.20

16.7%

206911

1.76

99.9

1.09

98.4

0.67

38.1%

206912

1.69

99.4

1.23

97.7

0.46

27.2%

206913

0.89

100.0

0.46

98.1

0.43

48.3%

206914

0.89

99.6

0.65

98.2

0.24

27.0%

206915

1.17

99.7

0.75

99.0

0.42

35.9%

206916

35

45

8.56

100.0

22

3.58

97.7

4.98

58.2%

206917

65

75

14.50

100.0

30

4.19

97.5

10.31

71.1%

206918

15

25

4.63

100.0

14

2.62

97.7

2.01

43.4%

206919

33

45

7.98

100.0

21

3.44

97.5

4.54

56.9%

206920

12

22

3.66

100.0

13

1.93

97.6

1.73

47.3%

206921

14

24

4.29

100.0

15

2.36

97.5

1.93

45.0%

206922

10

4.16

100.0

11

2.02

98.0

2.14

51.4%

206923

14

24

4.30

100.0

13

2.32

97.9

1.98

46.0%

206924

10

12

4.26

100.0

11

1.94

98.4

2.32

54.5%

206925

2.60

100.0

1.26

97.6

1.34

51.5%

206926

1.86

98.5

1.62

97.5

0.24

12.9%

206928

12

4.43

99.5

12

3.01

97.5

1.42

32.1%

206930

25

30

8.23

100.0

16

3.52

97.5

4.71

57.2%

206932

2.04

97.4

1.53

97.6

0.51

25.0%

206940

1.57

100.0

0.93

98.1

0.64

40.8%

206941

13

15

5.93

100.0

16

2.38

97.7

3.55

59.9%

206942

10

3.18

100.0

10

1.58

97.6

1.60

50.3%

143

CURRENT
PRODUCT

OPTIMAL

Cost

CSL

($)

(%)

Cost
($)

SAVINGS
CSL
(%)

($)

(%)

206943

14

24

4.43

100.0

17

2.50

97.6

1.93

43.6%

206944

11

14

4.81

100.0

11

2.06

98.1

2.75

57.2%

206945

0.74

99.9

0.48

98.1

0.26

35.1%

206946

14

24

4.08

100.0

17

2.30

97.7

1.78

43.6%

206947

18

28

5.06

100.0

19

2.70

97.5

2.36

46.6%

206948

18

28

5.21

100.0

18

2.57

97.6

2.64

50.7%

206949

14

24

4.30

100.0

12

2.28

97.5

2.02

47.0%

206950

0.70

100.0

0.35

98.6

0.35

50.0%

206951

1.45

100.0

0.48

98.1

0.97

66.9%

206952

1.16

100.0

0.27

98.6

0.89

76.7%

206953

1.54

100.0

0.51

97.6

1.03

66.9%

206955

1.44

100.0

0.91

98.0

0.53

36.8%

206964

1.98

99.4

1.33

97.6

0.65

32.8%

206965

1.73

99.6

0.93

99.0

0.80

46.2%

206996

10

4.54

100.0

2.16

97.8

2.38

52.4%

206997

10

3.67

100.0

1.74

97.8

1.93

52.6%

206998

2.61

100.0

1.07

98.6

1.54

59.0%

206999

1.17

99.8

. 0.86

97.6

0.31

26.5%

207145

2.69

100.0

10

1.36

97.6

1.33

49.4%

207146

2.19

100.0

0.87

97.5

1.32

60.3%

207147

1.29

100.0

0.37

98.6

0.92

71.3%

207148

1.34

100.0

0.40

97.8

0.94

70.1%

207501

9.69

100.0

6.34

98.4

3.35

34.6%

207502

10

12

13.64

100.0

6.22

98.2

7.42

54.4%

207503

6.22

97.5

5.77

97.5

0.45

7.2%

207504

10

12

5.28

99.8

13

3.15

97.5

2.13

40.3%

207505

10

12

4.72

100.0

2.04

97.8

2.68

56.8%

207506

3.76

100.0

1.81

97.8

1.95

51.9%

207507

3.91

100.0

1.80

97.9

2.11

54.0%

144

CURRENT
PRODUCT

Cost
($)

OPTIMAL
CSL

(%)

Cost
($)

SAVINGS
CSL
(%)

($)

(%)

207508

13

16

7.15

100.0

. 3

3.19

97.7

3.96

55.4%

207509

17

20

9.03

100.0

3.25

97.5

5.78

64.0%

207510

1.80

99.0

1.51

98.0

0.29

16.1%

207511

10

12

11.62

100.0

5.67

97.9

5.95

51.2%

207512

25

125

2.11

100.0

0.08

100.0

2.03

96.2%

207521

17

20

15.97

100.0

6.13

97.8

9.84

61.6%

207522

25

125

1.56

100.0

0.06

100.0

1.50

96.2%

207541

16

26

15.86

100.0

12

6.61

97.7

9.25

58.3%

207561

26

36

18.35

100.0

15

6.02

97.6

12.33

67.2%

207581

10

20

8.50

100.0

3.68

97.7

4.82

56.7%

207591

12

15

7.40

100.0

10

3.49

97.8

3.91

52.8%

207592

15

7.79

100.0

4.74

97.8

3.05

39.2%

207593

12

16.50

100.0

7.33

98.1

9.17

55.6%

207594

4.76

100.0

2.70

97.7

2.06

43.3%

207595

1.73

99.9

1.24

98.5

0.49

28.3%

207596

2.71

100.0

1.30

97.6

1.41

52.0%

207597

. 2.90

100.0

1.40

97.8

1.50

51.7%

207598

2.03

100.0

0.65

97.8

1.38

68.0%

145

Anda mungkin juga menyukai