SERVICE.MOD

From Support

Jump to: navigation, search

Back to Model Library

See also: How to read .MOD pages

Contents

Description

SERVICE.MOD simulates a customer service center that has two types of customers, walk-ins and call-ins. The simulation model is designed to examine the effects on the system’s performance of having different numbers of agents and phone lines.

The agents are cross-trained to handle both walk-in and call-in customers, which are assumed here to take identically distributed service times. Calls that come in when all agents are busy are automatically put on hold if any open phone lines are available; otherwise, they get a busy signal. Walk-in customers arriving when all agents are busy must wait in a single queue. Whenever an agent finishes service, if there are calls on hold, they will be answered before any further waiting walk-in customers are serviced. Giving call-in customers priority over walk-in customers is a common, although very annoying, customer service desk behavior.

State Variables

State Variables in SERVICE.MOD
Variable Name Abbreviation Variable Description Size Type
QUEUE Q[i] Number of customers waiting (0=queue, 1=on hold) 2 Integer
AGENTS A Number of idle agents 1 Integer
LINES L Number of open phone lines 1 Integer
CIAR CIAR Call-in Arrival Rate 1 Real
WIAR WIAR Walk-in Arrival Rate 1 Real
TYPE TYPE Total number of replications < 10 1 Integer
C C Lower bound for appropriate Beta distribution 1 Real
D D Upper bound for appropriate Beta distribution 1 Real
P P Shape parameter 1 for Beta distribution 1 Real
R R Shape parameter 2 for Beta distribution 1 Real

Vertices

Vertices in SERVICE.MOD
Vertex Name Vertex Description State Changes
RUN Start of the run Q[0]=0, Q[1]=0
WALKIN A customer walks in TYPE=0,Q[TYPE]=Q[TYPE]+1,C=DISK{TIMING.DAT;1},D=DISK{TIMING.DAT;2}-C,P=DISK{TIMING.DAT;3},R=DISK{TIMING.DAT;4}
CALLIN A customer calls in TYPE=1,C=DISK{TIMING.DAT;1},D=DISK{TIMING.DAT;2}-C,P=DISK{TIMING.DAT;3},R=DISK{TIMING.DAT;4}
GETLINE Seize the line first to prevent "phantom server." (Added by Wai Kin Chan, 06/11/05) L=L-1
HOLD A call is placed on hold Q[TYPE]=Q[TYPE]+1
START An agent starts serving a customer A=A-1,Q[TYPE]=Q[TYPE]-1,C=DISK{TIMING.DAT;5},D=DISK{TIMING.DAT;6}-C,P=DISK{TIMING.DAT;7},R=DISK{TIMING.DAT;8}
FINISH An agent finishes serving a customer A=A+1, L=L+TYPE

Initialization Conditions

Initialization Conditions in SERVICE.MOD
Variable Description
CIAR Call-in Arrival Rate
WIAR Walk-in Arrival Rate
AGENTS Number of idle agents
LINES Number of open phone lines

Event Relationship Graph

SERVICE.MOD
SERVICE.MOD

English Translation

An English translation is a verbal description of a model, automatically generated by SIGMA.

The SIGMA Model, SERVICE.MOD, is a discrete event simulation. 
I. STATE VARIABLE DEFINITIONS.
For this simulation, the following state variables are defined:
AGENTS: Number of idle agents   (integer valued)
LINES: Number of open phones   (integer valued)
QUEUE[2]: Number of customers waiting (0=queue, 1=onhold)   (integer valued)
CIAR: Callin Arrival Rate  (real valued)
WIAR: Walkin Arrival Rate  (real valued)
TYPE: Customer type (0=Walkin, 1=Callin)   (integer valued)
C: Lower bound for appropriate Beta distribution  (real valued)
D: Upper bound for appropriate Beta distribution  (real valued)
P: Shape parameter 1 for Beta distribution  (real valued)
Q: Shape parameter 2 for Beta distribution  (real valued)
II. EVENT DEFINITIONS.
Simulation state changes are represented by event vertices (nodes or balls) in a SIGMA graph.  
Event vertex parameters, if any, are given in parentheses. Logical and dynamic relationships 
between pairs of events are represented in a SIGMA graph by edges (arrows) between event vertices.  
Unless otherwise stated, vertex execution priorities, to break time ties, are equal to 5.
1. The RUN(WIAR,CIAR,AGENTS,LINES) event occurs when a simulation run is started.
   Initial values for, WIAR,CIAR,AGENTS,LINES, are needed for each run.
   This event causes the following state change(s):
   QUEUE[0]=0
   QUEUE[1]=0
   After every occurrence of the RUN event:
   Unconditionally, schedule the Callin() event to occur in (1.0/CIAR)*ERL{1} time units.
   Unconditionally, schedule the Walkin() event to occur in (1.0/WIAR)*ERL{1} time units.
   (Time ties are broken by an execution priority of 4.)
2. The Callin() event occurs when a customer calls.
   This event causes the following state change(s):
   TYPE=1
   C=DISK{TIMING.DAT;1}
   D=DISK{TIMING.DAT;2}-C
   P=DISK{TIMING.DAT;3}
   Q=DISK{TIMING.DAT;4}
   After every occurrence of the Callin event:
   Unconditionally, schedule the next callin customer;
   that is, schedule the Callin() event to occur in (1.0/CIAR)*(C+D*BET{P;Q}) time units.
   If LINES>0, then the call is answered or automatically placed on hold;
   that is, schedule the GetLine(TYPE) event to occur without delay...
   using the parameter value(s) of TYPE.
   (Time ties are broken by an execution priority of 3.)
3. The Walkin() event occurs when a customer walks in.
   This event causes the following state change(s):
   TYPE=0
   QUEUE[TYPE]=QUEUE[TYPE]+1
   C=DISK{TIMING.DAT;1}
   D=DISK{TIMING.DAT;2}-C
   P=DISK{TIMING.DAT;3}
   Q=DISK{TIMING.DAT;4}
   After every occurrence of the Walkin event:
   Unconditionally, schedule the next walkin customer;
   that is, schedule the Walkin() event to occur in (1.0/WIAR)*(C+D*BET{P;Q}) time units.
   If AGENTS>0, then schedule the Start(TYPE) event to occur without delay...
   using the parameter value(s) of TYPE.
   (Time ties are broken by an execution priority of 4.)
4. The Start(TYPE) event occurs when an agent starts serving a customer.
   This event causes the following state change(s):
   AGENTS=AGENTS-1
   QUEUE[TYPE]=QUEUE[TYPE]-1
   C=DISK{TIMING.DAT;5}
   D=DISK{TIMING.DAT;6}-C
   P=DISK{TIMING.DAT;7}
   Q=DISK{TIMING.DAT;8}
   After every occurrence of the Start event:
   Unconditionally, serve the customer;
   that is, schedule the Finish(TYPE) event to occur in 2*(C+D*BET{P;Q}) time units...
   using the parameter value(s) of TYPE.
5. The Finish(TYPE) event occurs when an agent finishes serving a customer.
   This event causes the following state change(s):
   AGENTS=AGENTS+1
   LINES=LINES+TYPE
   After every occurrence of the Finish event:
   If QUEUE[0]>0 or QUEUE[1]>0, then answer any calls on hold;
   that is, schedule the Start(TYPE) event to occur without delay...
   using the parameter value(s) of (QUEUE[1]>0).
   (Time ties are broken by an execution priority of 4.)
6. The Hold(TYPE) event occurs when a call is placed on hold.
   This event causes the following state change(s):
   QUEUE[TYPE]=QUEUE[TYPE]+1
   After every occurrence of the Hold event:
   If AGENTS>0, then agents are available to take the call;
   that is, schedule the Start(TYPE) event to occur without delay...
   using the parameter value(s) of TYPE.
   (Time ties are broken by an execution priority of 3.)
7. The GetLine(TYPE) event occurs when Seize the line first to prevent "phantom server." 
   (Added by Wai Kin Chan, 06/11/05).
   This event causes the following state change(s):
   LINES=LINES-1
   After every occurrence of the GetLine event:
   Unconditionally, schedule the Hold(TYPE) event to occur in .05 time units...
   using the parameter value(s) of TYPE.
   (Time ties are broken by an execution priority of 3.)

Comments

This simulation, SERVICE.MOD, is in the subfolder, XLDEMO2. You can read this model into SIGMA to examine it in greater detail and run it a few times. If you do this, note that the number of available LINES (if any) is decremented in the GETLINE event and not in the HOLD event. If LINES were instead decremented in the HOLD event, a subtle error would occur when two call-in customers arrive less than 3 seconds apart and only one of the LINES is available. Both customers would then each schedule a HOLD event after 3 second delays. The execution of these two HOLD events would cause the number of idle LINES to be decreased twice, becoming negative. The rule of thumb illustrated here is to decrement available resource counts immediately when their availability is tested, after a zero-delay top priority edge. (In the Event Execution Sequence section it shows how a delay of * will cause immediate event execution). A typical output plot from this simulation gives the number of calls on hold, customers in line, available agents and available phone lines.

See A More Elegant Spreadsheet Interface using VBA and Tutorial for using the Service Center Spreadsheet Simulator for more information.




Back to top

Back to Model Library

Personal tools
Navigation