Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Calculoscallcenter
Calculoscallcenter
Germán Riaño
5 de febrero de 2005
A un call center llegan llamadas de acuerdo con un proceso de Poisson de tasa λ. Las llamadas tienen
una duración exponencial de media µ−1 . Hay k agentes atendiendo las llamadas, que trabajan de manera
independiente. El conmutador puede mantener en espera tantas llamadas como sea necesario.
a. Halle la probabilidad de que en estado estable todos los operarios estén ocupados. Respuesta:
k−1
! k−1
!
X rm X rm rk 1
C(k, r) = 1 − / + ,
m=0
m! m=0
m! k! 1 − r/k
ri
pi = p0 para 0 ≤ i ≤ k − 1 (2)
i!
k−1
!−1
X rm rk 1
p0 = + (3)
m=0
m! k! 1 − r/k
r1 r2 rk−1
C(k, r) = 1 − p0 1+ + + ... +
1! 2! (k − 1)!
k−1
!
X rm
= 1 − p0 (4)
m=0
m!
k−1
! k−1
!
X rm X rm rk 1
C(k, r) = 1 − / + .
m=0
m! m=0
m! k! 1 − r/k
b. Llamaremos Wq la espera tı́pica de un cliente antes de ser atendido si encuentra el sistema en estado
estable. La distribución de el número de personas que encuentra enfrente un arribo al llegar al sistema
es igual a la distribución de estado estable. esto se conoce como PASTA (Poisson arrivals see time
averages).
1
Demuestre que
P (Wq > 0) = C(k, r)
Respuesta:
La probabilidad de que un cliente tenga que esperar es la probabilidad de que cuando llegue al sistema
no encuentre servidores disponibles para ser atendido. De acuerdo con la propiedad de pasta esto es
igual a la probabilidad en estado estable todos los servidores estén ocupados, es decir C(k, r).
c. Demuestre que si hay espera esta se distribuye exponencialmente, es decir
Respuesta:
Primero se define:
P (i en cola, Wq > 0)
qi =
P (Wq > 0)
P (i + k en el sistema)
=
P (Wq > 0)
pi+k
= i = 0, 1, 2...
C(k, r)
k k+i
1 k ρ
= p0
C(k, r) k!
1
= p k ρi . (6)
C(k, r)
En la página 270 del libro de Kulkarni azul se tiene la demostración del siguiente reslutado:
pk
C(k, r) =
1−ρ
pk = (1 − ρ)C(k, r), (7)
2
qi = (1 − ρ)ρi i = 0, 1, . . .
Para la componente 2 de (5) razonamos de la siguiente manera. Si hay i en cola cuando llega un cliente
entonces el tiempo en cola para este arribo es la suma de (i + 1) esperas, donde cada una de estas
esperas es el mı́nimo de k exponenciales independientes de parámetro µ, es decir una exponencial de
parámetro kµ. L espera en cola condicional es, por lo tanto la suma de (i + 1) exponenciales que como
se sabe es Erlang, por lo tanto
Esta es la fdp de una exponencial de parámetro kµ(1 − ρ) y por lo tanto su fda correspondiente viene
dada por
H(t) = 1 − e−µk(1−ρ)t .
d. Halle EWq .
1 1
EWq = P (Wq > 0)E(Wq |Wq > 0) = C(k, r)
kµ 1 − r/k
Respuesta:
Del numeral b se sabe que:
De otro lado se sabe del numeral c se sabe que si hay espera esta se distribuye exponencialmente,
entonces:
1
E(Wq |Wq > 0) = , (9)
(kµ − λ)
3
λ
además se tiene que r = µ, entonces de la ecuación (9) se tiene que:
1 1
E(Wq |Wq > 0) = , (10)
kµ (1 − kr )
1 1
EWq = C(k, r)
kµ 1 − r/k
Respuesta:
P (Wq ≤ t) = P (Wq ≤ t|Wq = 0)P (Wq = 0) + P (Wq ≤ t|Wq > 0)P (Wq > 0)
= 1(1 − C(k, r)) + (1 − e−kµ(1−ρ)t )C(k, r)
= 1 − C(k, r)e−kµ(1−ρ) .
f. Cierto call center abre 9 horas al dı́a de 8 a 5 pm y las tasa de llamadas en cada hora se pueden ver
en la siguiente tabla.
Horas Tasa
8:00 - 9:00 40
9:00 - 10:00 50
10:00 -11:00 70
11:00 - 12:00 110
12:00 - 1:00 120
1:00 - 2:00 30
2:00 - 3:00 20
3:00 - 4:00 10
4:00 - 5:00 10
Se ha observado que la duración de las llamadas se puede ajustar con una distribución exponencial
de media 3 minutos. Se quiere tener un nivel de servicio que garantice que el 95 % de los clientes
esperen menos de 20 segundos a ser atendidos. Determine el mı́nimo número de agentes que se deben
programar en cada hora para satisfacer este requerimiento de servicio. Suponga que en cada hora la tasa
es constante a lo largo de la hora y que se logra estado estable de modo que pueda usar las ecuaciones
anteriores. Ayuda: comience por determinar para cada intervalo el número de agentes necesarios para
que el sistema sea estable, y aumente esta cantidad hasta lograr el nivel de servicio requerido.
Respuesta:
Comenzamos por elaborar un pequeño código en VBA que implementa la fórmula Erlang-C. Refiérase al
apéndice ?? para verlo, en la función ErlangC_PWait. En esta función la expresión With WorksheetFunction
permite usar las funciones de excel con solo poner un punto. Fı́jese que la fórmula se calcula en términos
4
de la acumulativa de la distribución Poisson como
k−1
! k−1
!
X rm X rm rk 1
C(k, r) = 1 − / +
m=0
m! m=0
m! k! 1 − r/k
rk 1
k! 1−r/k
= Pk−1 rm rk 1
m=0 m! + k! 1−r/k
r k e−r
= Pk−1
k!
r m e−r r k e−r
Mult. por (1 − ρ)e−r
(1 − ρ) m=0 m!+ k!
F (k; r) − F (k − 1; r)
=
F (k; r) − ρF (k − 1; r)
donde F (n; r) es la fda de la distribución Poisson con media r evaluada en n. En el código de vba
se usa la función PoissonCDF para calcular la acumulativa. Dicha función invoca la función de Excel,
pero si falla se aproxima usando la normal. Esto ocurre para parámetros r grandes pues exp−r se hace
muy pequeño, pero es precisamente para esos valores para los cuales
x + 0,5 − r
F (x; r) ' Φ √
r
. El 0,5 viene del hecho que estamos aproximando una distribución discreta con una continua. Usando
esta función se calcula la Tabla 1 (Ud encontrará en Sicua la hoja de Excel con los cálculos).
La columna k-estab contiene el número de agentes necesarios para que el sistema sea estable. Incre-
mentamos k a partir de dichos valores hasta lograr el nivel de servicio deseado (95 %). Esto no es difı́cil
de hacer a mano, pero esta implementado en ErlangC_minAgentes en el Apéndice ??.
g. Los agentes son estudiantes que trabajan turnos de 4 horas contiguas. Determine el número de estu-
diantes que debe contratar y la asignación de horas. Use cualquier software de programación lineal
entera, o el solver de Excel.
Respuesta:
Construiremos un MIP con los siguientes parámetros
T = Número de periódos
L = Duración de los turnos (en nuestro caso 4)
Rt = Agentes requeridos en periodo t
Llamaremos xt el número de agentes que comienzan su turno en el perı́odo t. Dichos agentes estarán
activos en t, t + 1, . . . , t + L − 1. El último perı́odo en el cuál pueden comenzar es en t − L + 1. La
función objetivo es minimizar el número de agentes contratados:
T −L−1
X
xt
t=1
5
Debemos garantizar que el número de agentes en el periodo t sea mayor a los requeridos Rt . En un
periodo tı́pico t están trabajando aquellos contratados en ese periodo más los contratados en t − 1,
t − 2 t − 3 y t − 4. Es decir, el número de agentes en el periodo t se puede escribir como
Mt
X
xs ,
s=mt
xt ∈ Z +
Archivo callcenter.mos
( ! ******************************************************
f i l e c a l l c e n t e r . mos
‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘
******************************************************* ! )
model ” C a l l c e n t e r ”
uses ”mmxprs”
parameters
i n p u t F i l e=” . / c a l l c e n t e r . dat ”
o u t p u t F i l e =” . / c a l l c e n t e r . t x t ”
end−parameters
declarations
! Conjuntos
PERIODOS : set of integer ! Rango de p e r i o d o s de tiempo
! Parámetros
MinAgentes : array (PERIODOS) of integer ! Minimo numero de a g e n t e s
L : integer ! Numero de t u r n o s c o n t i g u o s
! Var d e c i s i ó n
s t a r t s : array (PERIODOS) of mpvar ! a g e n t e s que comienzan en t
6
end−declarations
i n i t i a l i z a t i o n s from i n p u t F i l e
PERIODOS MinAgentes L
end−i n i t i a l i z a t i o n s
! Numero de p e r i o d o s
T := g e t s i z e (PERIODOS ) ;
! O b j e t i v o : minimizar numero de a g e n t e s
TotAgentes := sum( t i n PERIODOS | t <= T − L + 1 ) s t a r t s ( t )
! Minimos deben s e r s a t i s f e c h o s :
f o r a l l ( t i n PERIODOS) do
mn := m a x l i s t ( 1 , t−L+1);
mx := m i n l i s t ( t , T−L+1)
r e q ( t ):= sum( s i n mn . . mx) s t a r t s ( s ) >= MinAgentes ( t )
end−do
! R e s u e l v a e l problema
minimize ( TotAgentes )
! Genere e l r e p o r t e
i f ( o u t p u t F i l e <>” ” ) then
f o p e n ( o u t p u t F i l e ,F OUTPUT)
end−i f
writeln ( ” S t a t u s : ” , g e t P r o b l e m S t a t u s ( g e t p r o b s t a t ) ) ;
writeln ( ”Numero T o t a l de Agentes : ” , g e t o b j v a l ) ;
writeln ;
writeln ( ” P e r i o d o Comz Tot Req” )
f o r a l l ( t i n PERIODOS) do
write ( s t r f m t (PERIODOS( t ) , 6 ) )
write ( s t r f m t ( g e t s o l ( s t a r t s ( t ) ) , 8 ) )
write ( s t r f m t ( MinAgentes ( t )− g e t s l a c k ( r e q ( t ) ) , 8 ) )
writeln ( s t r f m t ( g e t s o l ( MinAgentes ( t ) ) , 8 ) )
end−do
f c l o s e (F OUTPUT)
end−model
7
Archivo callcenter.txt
S t a t u s : S o l v e d to o p t i m a l i t y .
Numero T o t a l de Agentes : 19
Podemos ver que la solución óptima usará 19 agentes. La columna Comz dice cuántos deben comenzar
por turno, mientras que la columna Tot contiene el número disponible en ese turno.
También solucionamos el problema usando el solver de Excel, y encontró una solución alterna también
con 19 agentes. El archivo está disponible en Sicua para consulta. La solución de excel está en la Tabla
2.
Aunque las dos soluciones usan el mismo número de agentes, vale la pena compararlas en cuanto a la
calidad de servicio que ofrecen para ver cuál es preferible. Al ver la Tabla 3 vemos que la de Excel
ofrece niveles de servicio ligeramente superiores.
Xpress Excel
Horas λ µ r k C(k, r) P (W q <= 20s) k C(k, r) P (W q <= 20s)
8:00 - 9:00 40 20 2.00 5 5.970 % 95.722 % 5 5.970 % 95.722 %
9:00 - 10:00 50 20 2.50 6 4.744 % 96.784 % 10 0.029 % 99.987 %
10:00 -11:00 70 20 3.50 8 2.989 % 98.187 % 12 0.030 % 99.988 %
11:00 - 12:00 110 20 5.50 10 6.279 % 96.192 % 14 0.179 % 99.930 %
12:00 - 1:00 120 20 6.00 11 4.922 % 97.176 % 11 4.922 % 97.176 %
1:00 - 2:00 30 20 1.50 13 0.000 % 100.000 % 9 0.003 % 99.999 %
2:00 - 3:00 20 20 1.00 11 0.000 % 100.000 % 7 0.009 % 99.996 %
3:00 - 4:00 10 20 0.50 9 0.000 % 100.000 % 5 0.018 % 99.989 %
4:00 - 5:00 10 20 0.50 3 1.515 % 98.852 % 3 1.515 % 98.852 %
PROM 4.308 % 97.330 % 1.888 % 98.846 %
8
h. Suponga ahora que los agentes se contratan por 4 horas diarias, pero no necesariamente contiguas,
pues puede haber una interrupción de hasta una hora. Genere un nuevo programa de turnos.
Respuesta:
Definimos las siguientes cantidades
i = periodos,i ∈ {1, . . . , T }
j = turnos, j ∈ {1, . . . , M }
Aij = 1(El turno j cubre el periodo i)
Ri = Numero requerido de agentes en periodo i
xj = número de agentes contratados para el turno j
La matriz A se arma buscando los posibles turnos que satisfacen el requerimiento de la interrupción.
Nosotros encontramos 21 turnos que se pueden ver en la Tabla 5:
El modelo a resolver es el siguiente.
T
X
Minimizar z= ci xi
i=1
M
X
sujeto a Aij xj ≥ Ri i = 1, . . . , T Requerimiento de agentes
j=1
xj ∈ Z +
A continuación mostramos la implementación en Xpress, ası́ como les resultados obtenidos. Podemos
ver que la solución usa 14 agentes, es decir una reducción de 5 agentes respecto a la solución original.
Archivo callcenter2.mos
( ! ******************************************************
f i l e c a l l c e n t e r 2 . mos
‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘
En e s t e modelo s e hace e l s c h e d u l i n g usando e l e n f o q u e
de s e t c o v e r i n g .
Germán Riaño . U n i v e r s i d a d de l o s Andes
******************************************************* ! )
model ” C a l l c e n t e r ”
uses ”mmxprs”
parameters
i n p u t F i l e=” . / c a l l c e n t e r 2 . dat ”
outputFile = ” ./ callce nte r2 . txt ”
end−parameters
declarations
! Conjuntos
PERIODOS : set of integer ! Rango de p e r i o d o s de tiempo
TURNOS: set of integer
! Parámetros
MinAgentes : array (PERIODOS) of integer ! Minimo numero de a g e n t e s
A: array (PERIODOS,TURNOS) of integer !A( i , j )=1 s i t u r r n o j c u b r e i
Costo : array (TURNOS) of r e a l
end−declarations
9
i n i t i a l i z a t i o n s from i n p u t F i l e
PERIODOS TURNOS MinAgentes A Costo
end−i n i t i a l i z a t i o n s
! Var de d e c i s i o n
declarations
a g e n t e s : array (TURNOS) of mpvar ! a g e n t e s que comienzan en t
end−declarations
f o r a l l ( j i n TURNOS) a g e n t e s ( j ) i s i n t e g e r
! O b j e t i v o : minimizar C o s t o s
TotCosto := sum( j i n TURNOS) Costo ( j ) * a g e n t e s ( j )
! Minimos deben s e r s a t i s f e c h o s :
f o r a l l ( t i n PERIODOS) do
r e q ( t ):= sum( j i n TURNOS| A( t , j )=1) a g e n t e s ( j ) >= MinAgentes ( t )
end−do
! R e s u e l v a e l problema
minimize ( TotCosto )
! Genere e l r e p o r t e
i f ( o u t p u t F i l e <>” ” ) then
f o p e n ( o u t p u t F i l e ,F OUTPUT)
end−i f
writeln ( ” S t a t u s : ” , g e t P r o b l e m S t a t u s ( g e t p r o b s t a t ) ) ;
writeln ( ” Costo T o t a l : ” , g e t o b j v a l ) ;
writeln ( ”Numero T o t a l de Agentes : ” , sum( j i n TURNOS) g e t s o l ( a g e n t e s ( j ) ) ) ;
writeln ;
writeln ( ” P e r i o d o Total Req” )
f o r a l l ( t i n PERIODOS) do
write ( s t r f m t (PERIODOS( t ) , 6 ) )
write ( s t r f m t ( MinAgentes ( t )− g e t s l a c k ( r e q ( t ) ) , 8 ) )
writeln ( s t r f m t ( g e t s o l ( MinAgentes ( t ) ) , 8 ) )
end−do
writeln ;
writeln ( ”Turno Agentes ”)
! f o r a l l ( j i n TURNOS| g e t s o l ( a g e n t e s ( j )) >0) do
f o r a l l ( j i n TURNOS) do
write ( s t r f m t (TURNOS( j ) , 6 ) )
writeln ( s t r f m t ( g e t s o l ( a g e n t e s ( j ) ) , 8 ) )
end−do
f c l o s e (F OUTPUT)
end−model
10
Archivo callcenter2.txt
S t a t u s : S o l v e d to o p t i m a l i t y .
Costo T o t a l : 14
Numero T o t a l de Agentes : 14
Turno Agentes
1 2
2 2
7 2
11 2
12 1
13 1
14 1
20 2
21 1
Obtuvimos también la solución usando el Solver de Excel. La solución encontrada también tiene 14
agentes, pero es ligeramente diferente de la de Xpress, se puede ver en la Tabla 6. Las comparamos
ambas y se puede ver la comparación en la Tabla 4. De nuevo la de Excel es ligeramente superior en
su desempeño.
Xpress Excel
Horas λ µ r k C(k, r) P (W q <= 20s) k C(k, r) P (W q <= 20s)
8:00 - 9:00 40 20 2.00 5 5.970 % 95.722 % 6 1.869 % 98.802 %
9:00 - 10:00 50 20 2.50 6 4.744 % 96.784 % 6 4.744 % 96.784 %
10:00 -11:00 70 20 3.50 8 2.989 % 98.187 % 8 2.989 % 98.187 %
11:00 - 12:00 110 20 5.50 10 6.279 % 96.192 % 10 6.279 % 96.192 %
12:00 - 1:00 120 20 6.00 11 4.922 % 97.176 % 11 4.922 % 97.176 %
1:00 - 2:00 30 20 1.50 5 2.014 % 98.635 % 5 2.014 % 98.635 %
2:00 - 3:00 20 20 1.00 4 2.041 % 98.538 % 4 2.041 % 98.538 %
3:00 - 4:00 10 20 0.50 4 0.181 % 99.878 % 3 1.515 % 98.852 %
4:00 - 5:00 10 20 0.50 3 1.515 % 98.852 % 3 1.639 % 98.758 %
PROM 4.532 % 97.175 % 4.207 % 97.418 %
Tabla 4: Comparación entre la soluciones de Xpress y Excel para el problema con turnos flexibles
11
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
8:00 - 9:00 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0
9:00 - 10:00 1 1 0 0 0 0 0 1 0 0 0 1 1 0 0 0 1 1 0 0 0
10:00 -11:00 1 1 1 0 0 0 1 0 1 0 0 0 1 1 0 0 1 1 1 0 0
11:00 - 12:00 1 1 1 1 0 0 1 1 0 1 0 1 0 1 1 0 0 1 1 1 0
12:00 - 1:00 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1
1:00 - 2:00 0 0 1 1 1 1 0 1 1 1 0 0 1 1 0 1 0 1 0 1 1
2:00 - 3:00 0 0 0 1 1 1 0 0 1 1 1 0 0 1 1 0 0 0 1 0 1
3:00 - 4:00 0 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 0
4:00 - 5:00 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
12
# Turno 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 TOT REQ
#ope en turno 3 0 2 1 - - 2 2 - 0 3 - - - - - 1 - - - - 14
8:00 - 9:00 3 - - - - - 2 - - - - - - - - - 1 - - - - 6 5
9:00 - 10:00 3 0 - - - - - 2 - - - - - - - - 1 - - - - 6 6
10:00 -11:00 3 0 2 - - - 2 - - - - - - - - - 1 - - - - 8 8
11:00 - 12:00 3 0 2 1 - - 2 2 - 0 - - - - - - - - - - - 10 10
12:00 - 1:00 - 0 2 1 - - 2 2 - - 3 - - - - - 1 - - - - 11 11
1:00 - 2:00 - - 2 1 - - - 2 - 0 - - - - - - - - - - - 5 5
2:00 - 3:00 - - - 1 - - - - - 0 3 - - - - - - - - - - 4 4
3:00 - 4:00 - - - - - - - - - 0 3 - - - - - - - - - - 3 3
4:00 - 5:00 - - - - - - - - - - 3 - - - - - - - - - - 3 3
Tabla 6: Solución para el problema de turnos flexibles encontrada con el solver de excel. Usa un total de 14 agentes
.
i. Suponga ahora que se tiene en cuenta la impaciencia de los clientes. En particular suponga que la
impaciencia es exponencial con media de 1.5 minutos. Calcule el número agentes necesarios para que
el nivel de servicio se mantenga.
Respuesta:
De acuerdo con la información dada θ = 60/1,5 = 40 por hora. Implementamos las fórmulas de
Mandelbaum y Zeltyn para el modelo M/M/k + G, para el caso exponencial. En el Apéndice A se
puede ver el código usado. En la Tabla 7 se puede ver los resultados obtenidos. El nivel de servicio
acá se calcula como P {W < t}, es decir para todos los clientes (contando los que abandonan). Si Ud
usa el calculador Erlang-X disponible en http://www.math.vu.nl/∼koole/ccmath/ErlangX.php Ud.
obtendrá resultados ligeramente diferentes, pues allı́ calculan el nivel de servicio como P {V < t}, es
decir usando tiempo virtual. Si el porcentaje de abandonos no es muy alto estas dos cantidades no
diferirán mucho. Podemos concluir que al tener en cuenta los abandonos se necesita un agente menos
entre las 10 y las 3 de la tarde, lo cuál puede significar un ahorro.
Lo único en el código de VBA que amerita mención es el cálculo de la función gamma imcompleta
Z b
γ(a, b) = ta−1 e−t dt.
0
Excel no tiene una función para la gamma incompleta, pero tiene la función de distribución gamma
Z x α−1 −t/β
t e
F (x; α, β) = α Γ(α)
dt.
0 β
Es fácil ver que la gamma incompleta se puede calcular como
γ(a, b) = Γ(a) × F (b; a, 1).
Excel no tiene Γ(a), pero sı́ GammaLn, que calcula su logaritmo.
13
Output Average Half Width
Espera en Cola en min 2.7242 0.17
Numero Promedio en Cola 0.04128384 0
Porcentaje de Abandonos 5.8845 0.32
TSF 95.3471 0.32
14
Simulation MinimizeTotal TSF Cap[9] Cap[8] Cap[7] Cap[6] Cap[5] Cap[4] Cap[3] Cap[2] Cap[1] Total
1 52 97.5591 3 3 3 4 10 9 9 6 5 52
12 48 97.079 3 1 3 2 10 9 9 6 5 48
21 46 95.815 3 1 3 2 9 9 10 4 5 46
38 43 95.3691 2 1 3 2 11 9 8 4 3 43
Best: 152 42 95.3196 2 1 3 2 9 9 8 5 3 42
Tabla 9: Resultados de la simulación con Arena + OptQuest. Las cantidades Cap[i] representan el número de servidores disponibles en el periodo i.
Para cada escenario se corren suficientes replicaciones que garanticen intervalos de confianza del 95 % no sean más anchos que el 2 % de la media (es
decir el intervalo a lo sumo del 4 % de la media)
A. Código de VBA
Archivo CallCenters.bas
A t t r i b u t e VB Name = ” C a l l C e n t e r s ”
Option E x p li c i t
’ UTILITY FUNCTIONS
’ I n c o m p l e t e gamma F u n c t i o n
Function gammaInc ( x , y )
With WorksheetFunction
gammaInc = . GammaDist ( y , x , 1 , True ) * Exp ( . GammaLn( x ) )
End With
End Function
’ F a i l −s a f e P o i s s o n CDF
Public Function PoissonCDF ( n , mean )
On Error GoTo UseNormal
PoissonCDF = WorksheetFunction . P o i s s o n ( n , mean , True )
Exit Function
UseNormal :
PoissonCDF = WorksheetFunction . NormDist ( n + 0 . 5 , mean , Sqr ( mean ) , True )
End Function
’ERLANG−C FUNCTIONS
’P(W>0) i n an E r l a n g C
Public Function ErlangC PWait ( k , r )
Dim numer , deno
With WorksheetFunction
numer = PoissonCDF ( k , r ) − PoissonCDF ( k − 1 , r )
deno = PoissonCDF ( k , r ) − ( r / k ) * PoissonCDF ( k − 1 , r )
End With
ErlangC PWait = numer / deno
End Function
’ Telephone s e r v i c e f a c t o r P(W<t )
Public Function ErlangC TSF ( k , r , mu, t )
Dim rho As Double
ErlangC TSF = 1# − ErlangC PWait ( k , r ) * Exp( −(k − r ) * mu * t )
End Function
’ Number o f a g e n t s needed f o r TSF
Public Function ErlangC minAgents ( r , mu, TSF , t a r g e t T i m e )
Dim k As Integer
With WorksheetFunction
k = . RoundUp ( r , 0 )
I f k = r Then k = k + 1
While ErlangC TSF ( k , r , mu, t a r g e t T i m e ) < TSF
k = k + 1
Wend
End With
ErlangC minAgents = k
End Function
15
ErlangC ASA = Wq
End Function
’ERLANG A FUNCTIONS
’ From Mandelbaum and Z e l t y n
muOLambda = mu / lambda
Ei = 1 ’ E s t e e s E0
For i = 1 To k − 1
Ei = 1 + i * muOLambda * Ei
Next i
ErlangA E = Ei
End Function
16
E = ErlangA E ( lambda , mu, k )
Gbt = Exp(− t h e t a * time )
ErlangA TSF = 1 − lambda * Gbt * J t / (E + lambda * J )
End Function
Public Function ErlangA PWait ( lambda , mu, t h e t a , k )
Dim J , E
J = ErlangA J ( lambda , mu, t h e t a , k )
E = ErlangA E ( lambda , mu, k )
ErlangA PWait = lambda * J / (E + lambda * J )
End Function
17