0% found this document useful (0 votes)
215 views17 pages

Visual Basic Formulas de Erlang

The document describes a model for call center staffing where calls arrive according to a Poisson process and have exponentially distributed handling times. It provides the formulas for calculating: 1) The probability that all agents are busy in steady state using the Erlang-C formula. 2) The distribution of wait times for customers and the expected wait time. 3) The minimum number of agents needed in each hour of a call center's operation to achieve a target service level of 95% of customers waiting less than 20 seconds.

Uploaded by

Mayra Trigueros
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
215 views17 pages

Visual Basic Formulas de Erlang

The document describes a model for call center staffing where calls arrive according to a Poisson process and have exponentially distributed handling times. It provides the formulas for calculating: 1) The probability that all agents are busy in steady state using the Erlang-C formula. 2) The distribution of wait times for customers and the expected wait time. 3) The minimum number of agents needed in each hour of a call center's operation to achieve a target service level of 95% of customers waiting less than 20 seconds.

Uploaded by

Mayra Trigueros
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 17

Ejercicio de modelaje en un Call center

Germn Riao a n 5 de febrero de 2005


A un call center llegan llamadas de acuerdo con un proceso de Poisson de tasa . Las llamadas tienen una duracin exponencial de media 1 . Hay k agentes atendiendo las llamadas, que trabajan de manera o independiente. El conmutador puede mantener en espera tantas llamadas como sea necesario. a. Halle la probabilidad de que en estado estable todos los operarios estn ocupados. Respuesta: e C(k, r) = 1 rm m! m=0
k1

rm rk 1 + m! k! 1 r/k m=0

k1

donde r = / = k. Nota esta se conoce como la frmula Erlang-C. o Respuesta: La probabilidad de que en estado estable todos los operarios estn ocupados es: e

C(k, r) = 1 (p0 + p1 + p2 + . . . + pk1 ) pero para la M/M/k se sabe que pi = p0 = ri p0 i!


k1

(1)

para 0 i k 1
1

(2) (3)

rk 1 rm + m! k! 1 r/k m=0

reemplazando (2) en (1) se tiene:

C(k, r) = 1 p0 1 +
k1

r1 r2 rk1 + + ... + 1! 2! (k 1)! (4)

= 1 p0

rm m! m=0

reemplazando (3) en (4) se tiene: rm m! m=0


k1

C(k, r) = 1

rm rk 1 + m! k! 1 r/k m=0

k1

b. Llamaremos Wq la espera t pica de un cliente antes de ser atendido si encuentra el sistema en estado estable. La distribucin de el nmero de personas que encuentra enfrente un arribo al llegar al sistema o u es igual a la distribucin de estado estable. esto se conoce como PASTA (Poisson arrivals see time o 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 estn ocupados, es decir C(k, r). e c. Demuestre que si hay espera esta se distribuye exponencialmente, es decir P (Wq < t|Wq > 0) = 1 e(k)t Respuesta: Primero se dene: t>0

H(t) = P (Wq t|Wq > 0),

Esta distribucin se obtiene condicionando en el nmero de personas que encuentra un arribo en la o u cola as :

H(t) =
i=0

P (Wq t|Wq > 0, i en cola) P (i en cola|Wq > 0) .


2 1

(5)

De la parte 1 de la ecuacin (5) se dene o qi = P (i en cola|Wq > 0),

que se calcula como sigue qi = = = = = P (i en cola, Wq > 0) P (Wq > 0) P (i + k en el sistema) P (Wq > 0) pi+k i = 0, 1, 2... C(k, r) k k k+i 1 p0 C(k, r) k! 1 p k i . C(k, r)

(6)

En la pgina 270 del libro de Kulkarni azul se tiene la demostracin del siguiente reslutado: a o pk 1 pk = (1 )C(k, r),

C(k, r) =

(7)

reemplazando (7) en (6) se tiene que:

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 parmetro , es decir una exponencial de a parmetro k. L espera en cola condicional es, por lo tanto la suma de (i + 1) exponenciales que como a se sabe es Erlang, por lo tanto P (Wq t|Wq > 0, i en cola) = Fi+1 (t; k) donde Fr (t; ) es la fda de una Erlang de parmetros r y es decir a
t

Fr (t; ) =
0

r xr1 ex dx (r 1)!)

Reemplazando en (5) se tiene que

H(t) =
i=0

Fi+1 (t; k) qi .

Derivando con respecto a t podemos obtener la densidad correspondiente

h(t) =
i=0

(k)i+1 ti ekt (1 )i i!

=e

kt

(1 )k
i=0

(k)i i!

= (1 )kekt ekt = (k)(1 )ek(1)t t 0.

Esta es la fdp de una exponencial de parmetro k(1 ) y por lo tanto su fda correspondiente viene a dada por H(t) = 1 ek(1)t .

d. Halle EWq . EWq = P (Wq > 0)E(Wq |Wq > 0) = C(k, r) Respuesta: Del numeral b se sabe que: 1 1 k 1 r/k

P (Wq > 0) = C(k, r).

(8)

De otro lado se sabe del numeral c se sabe que si hay espera esta se distribuye exponencialmente, entonces: 1 , (k )

E(Wq |Wq > 0) =

(9)

adems se tiene que r = a

entonces de la ecuacin (9) se tiene que: o 1 1 r , k (1 k )

E(Wq |Wq > 0) =

(10)

reemplazando (8) y (10) en la ecuacin del enunciado se tiene que: o EWq = C(k, r) e. Halle P (Wq t). Respuesta: P (Wq t) = 1 C(k, r)ek(1)t 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 ek(1)t )C(k, r) = 1 C(k, r)ek(1) . t>0 1 1 k 1 r/k

f. Cierto call center abre 9 horas al d de 8 a 5 pm y las tasa de llamadas en cada hora se pueden ver a en la siguiente tabla. Horas 8:00 - 9:00 9:00 - 10:00 10:00 -11:00 11:00 - 12:00 12:00 - 1:00 1:00 - 2:00 2:00 - 3:00 3:00 - 4:00 4:00 - 5:00 Tasa 40 50 70 110 120 30 20 10 10

Se ha observado que la duracin de las llamadas se puede ajustar con una distribucin exponencial o o 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 nmero de agentes que se deben u 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 nmero de agentes necesarios para u que el sistema sea estable, y aumente esta cantidad hasta lograr el nivel de servicio requerido. Respuesta: Comenzamos por elaborar un pequeo cdigo en VBA que implementa la frmula Erlang-C. Rerase al n o o e apndice ?? para verlo, en la funcin ErlangC_PWait. En esta funcin la expresin With WorksheetFunction e o o o permite usar las funciones de excel con solo poner un punto. F jese que la frmula se calcula en trminos o e

de la acumulativa de la distribucin Poisson como o C(k, r) = 1 rm m! m=0


rk 1 k! 1r/k k1 r m m=0 m! k1

rm rk 1 + m! k! 1 r/k m=0

k1

rk 1 k! 1r/k

(1 ) + F (k; r) F (k 1; r) = F (k; r) F (k 1; r)

r k er k! k1 r m er m=0 m!

r k er k!

Mult. por (1 )er

donde F (n; r) es la fda de la distribucin Poisson con media r evaluada en n. En el cdigo de vba o o se usa la funcin PoissonCDF para calcular la acumulativa. Dicha funcin invoca la funcin de Excel, o o o pero si falla se aproxima usando la normal. Esto ocurre para parmetros r grandes pues expr se hace a muy pequeo, pero es precisamente para esos valores para los cuales n F (x; r) x + 0,5 r r

. El 0,5 viene del hecho que estamos aproximando una distribucin discreta con una continua. Usando o esta funcin se calcula la Tabla 1 (Ud encontrar en Sicua la hoja de Excel con los clculos). o a a Horas 8:00 - 9:00 9:00 - 10:00 10:00 -11:00 11:00 - 12:00 12:00 - 1:00 1:00 - 2:00 2:00 - 3:00 3:00 - 4:00 4:00 - 5:00 40 50 70 110 120 30 20 10 10 20 20 20 20 20 20 20 20 20 r 2.00 2.50 3.50 5.50 6.00 1.50 1.00 0.50 0.50 k-estab 3 3 4 6 7 2 2 1 1 k 5 6 8 10 11 5 4 3 3 0.400 0.417 0.438 0.550 0.545 0.300 0.250 0.167 0.167 C(k, r) 0.0597 0.0474 0.0299 0.0628 0.0492 0.0201 0.0204 0.0152 0.0152 P (W q <= 20s) 0.9572 0.9678 0.9819 0.9619 0.9718 0.9863 0.9854 0.9885 0.9885

Tabla 1: Resultados para el modelo Erlang-C La columna k-estab contiene el nmero de agentes necesarios para que el sistema sea estable. Increu 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 Apndice ??. e g. Los agentes son estudiantes que trabajan turnos de 4 horas contiguas. Determine el nmero de estuu diantes que debe contratar y la asignacin de horas. Use cualquier software de programacin lineal o o entera, o el solver de Excel. Respuesta: Construiremos un MIP con los siguientes parmetros a T = Nmero de peridos u o L = Duracin de los turnos (en nuestro caso 4) o Rt = Agentes requeridos en periodo t Llamaremos xt el nmero de agentes que comienzan su turno en el per u odo t. Dichos agentes estarn a activos en t, t + 1, . . . , t + L 1. El ultimo per odo en el cul pueden comenzar es en t L + 1. La a funcin objetivo es minimizar el nmero de agentes contratados: o u
T L1

xt
t=1

Debemos garantizar que el nmero de agentes en el periodo t sea mayor a los requeridos Rt . En un u periodo t pico t estn trabajando aquellos contratados en ese periodo ms los contratados en t 1, a a t 2 t 3 y t 4. Es decir, el nmero de agentes en el periodo t se puede escribir como u
Mt

xs ,
s=mt

donde m = m n(1, t L + 1) y M = mx(t, T a las restricciones x1 x1 + x2 x1 + x2 + x3 x1 + x2 + x3 x2 + x3 x3

L + 1). Para mayor claridad escribimos expl citamente R1 R2 R3 R4 R5 R6 R7 R8 R9

+ x4 + x4 + x4 x4

+ x5 + x5 + x5 x5

+ x6 + x6 + x6 x6

El modelo se puede escribir as


T L1

Minimizar

z=
t=1 Mt

xt xs Rt

sujeto a
s=mt

t = 1, . . . , T

Requerimento de agentes

xt Z + A continuacin mostramos el modelo resuelto en Xpress-MP y el resultado arrojado o

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 endparameters forward function g e t P r o b l e m S t a t u s ( s t a t u s : integer ) : s t r i n g declarations ! Conjuntos PERIODOS : set of integer ! Rango de p e r i o d o s de tiempo ! Par metros a 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 o s t a r t s : array (PERIODOS) of mpvar ! a g e n t e s que comienzan en t

enddeclarations

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 endi 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 ) ; ! Creamos l a v a r i a b l e s l o para l o s p r i m e r o s TL p e r i o d o s o ! p ue s no pueden comenzar ms t a r d e a f o r a l l ( t i n PERIODOS | t <= T L + 1 ) do create ( starts ( t ) ) ; ! starts ( t ) is integer ; enddo ! 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 , tL+1); mx := m i n l i s t ( t , TL+1) r e q ( t ):= sum( s i n mn . . mx) s t a r t s ( s ) >= MinAgentes ( t ) enddo

! 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) endi 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 ) ) enddo f c l o s e (F OUTPUT)

! returns function status function g e t P r o b l e m S t a t u s ( s t a t u s : integer ) : s t r i n g case s t a t u s of XPRS OPT : r e t u r n e d := S o l v e d t o o p t i m a l i t y . XPRS UNF : r e t u r n e d := U n f i n i s h e d . XPRS INF : r e t u r n e d := I n f e a s i b l e . XPRS UNB : r e t u r n e d := Unbounded . e l s e r e t u r n e d := Unknown s t a t u s . endcase endfunction endmodel

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 Periodo 1 2 3 4 5 6 7 8 9 Comz 5 1 2 2 6 3 0 0 0 Tot 5 6 8 10 11 13 11 9 3 Req 5 6 8 10 11 5 4 3 3

Podemos ver que la solucin ptima usar 19 agentes. La columna Comz dice cuntos deben comenzar o o a a por turno, mientras que la columna Tot contiene el nmero disponible en ese turno. u Tambin solucionamos el problema usando el solver de Excel, y encontr una solucin alterna tambin e o o e con 19 agentes. El archivo est disponible en Sicua para consulta. La solucin de excel est en la Tabla a o a 2.
Horas 8:00 - 9:00 9:00 - 10:00 10:00 -11:00 11:00 - 12:00 12:00 - 1:00 1:00 - 2:00 TOTAL NECESARIOS #ope q comz 5 5 2 2 2 3 19 8-9 5 9 - 10 5 5 10 -11 5 5 2 11 - 12 5 5 2 2 12 - 1 5 2 2 2 11 11 1-2 2-3 3-4 4-5

2 2 2 3 9 5

2 2 3 7 4

2 3 5 3

3 3 3

5 5

10 6

12 8

14 10

Tabla 2: Disposicin de agentes ptima encontrada por Excel. o o Aunque las dos soluciones usan el mismo nmero de agentes, vale la pena compararlas en cuanto a la u calidad de servicio que ofrecen para ver cul es preferible. Al ver la Tabla 3 vemos que la de Excel a ofrece niveles de servicio ligeramente superiores. Xpress C(k, r) P (W q <= 20s) 5.970 % 95.722 % 4.744 % 96.784 % 2.989 % 98.187 % 6.279 % 96.192 % 4.922 % 97.176 % 0.000 % 100.000 % 0.000 % 100.000 % 0.000 % 100.000 % 1.515 % 98.852 % 4.308 % 97.330 % Excel P (W q <= 20s) 95.722 % 99.987 % 99.988 % 99.930 % 97.176 % 99.999 % 99.996 % 99.989 % 98.852 % 98.846 %

Horas 8:00 - 9:00 9:00 - 10:00 10:00 -11:00 11:00 - 12:00 12:00 - 1:00 1:00 - 2:00 2:00 - 3:00 3:00 - 4:00 4:00 - 5:00 PROM

40 50 70 110 120 30 20 10 10

20 20 20 20 20 20 20 20 20

r 2.00 2.50 3.50 5.50 6.00 1.50 1.00 0.50 0.50

k 5 6 8 10 11 13 11 9 3

k 5 10 12 14 11 9 7 5 3

C(k, r) 5.970 % 0.029 % 0.030 % 0.179 % 4.922 % 0.003 % 0.009 % 0.018 % 1.515 % 1.888 %

Tabla 3: Comparacin de los resultados de Excel y Xpress o

h. Suponga ahora que los agentes se contratan por 4 horas diarias, pero no necesariamente contiguas, pues puede haber una interrupcin de hasta una hora. Genere un nuevo programa de turnos. o Respuesta: Denimos 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 = nmero de agentes contratados para el turno j u La matriz A se arma buscando los posibles turnos que satisfacen el requerimiento de la interrupcin. o Nosotros encontramos 21 turnos que se pueden ver en la Tabla 5: El modelo a resolver es el siguiente.

Minimizar

z=
i=1 M

ci xi Aij xj Ri

sujeto a
j=1

i = 1, . . . , T

Requerimiento de agentes

xj Z + A continuacin mostramos la implementacin en Xpress, as como les resultados obtenidos. Podemos o o ver que la solucin usa 14 agentes, es decir una reduccin de 5 agentes respecto a la solucin original. o o o

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 . Germn Ria o . U n i v e r s i d a d de l o s Andes a n ******************************************************* ! ) 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 endparameters forward function g e t P r o b l e m S t a t u s ( s t a t u s : integer ) : s t r i n g declarations ! Conjuntos PERIODOS : set of integer ! Rango de p e r i o d o s de tiempo TURNOS: set of integer ! Par metros a 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 enddeclarations

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 endi 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 enddeclarations 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 ) enddo

! 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) endi 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 ) ) enddo 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 ) ) enddo f c l o s e (F OUTPUT)

! returns function status function g e t P r o b l e m S t a t u s ( s t a t u s : integer ) : s t r i n g case s t a t u s of XPRS OPT : r e t u r n e d := S o l v e d t o o p t i m a l i t y . XPRS UNF : r e t u r n e d := U n f i n i s h e d . XPRS INF : r e t u r n e d := I n f e a s i b l e . XPRS UNB : r e t u r n e d := Unbounded . e l s e r e t u r n e d := Unknown s t a t u s . endcase endfunction endmodel

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 Periodo 1 2 3 4 5 6 7 8 9 Turno 1 2 7 11 12 13 14 20 21 Total 5 6 8 10 11 5 4 4 3 Agentes 2 2 2 2 1 1 1 2 1 Req 5 6 8 10 11 5 4 3 3

Obtuvimos tambin la solucin usando el Solver de Excel. La solucin encontrada tambin tiene 14 e o o e agentes, pero es ligeramente diferente de la de Xpress, se puede ver en la Tabla 6. Las comparamos ambas y se puede ver la comparacin en la Tabla 4. De nuevo la de Excel es ligeramente superior en o su desempeo. n

Horas 8:00 - 9:00 9:00 - 10:00 10:00 -11:00 11:00 - 12:00 12:00 - 1:00 1:00 - 2:00 2:00 - 3:00 3:00 - 4:00 4:00 - 5:00 PROM

40 50 70 110 120 30 20 10 10

20 20 20 20 20 20 20 20 20

r 2.00 2.50 3.50 5.50 6.00 1.50 1.00 0.50 0.50

k 5 6 8 10 11 5 4 4 3

Xpress C(k, r) P (W q <= 20s) 5.970 % 95.722 % 4.744 % 96.784 % 2.989 % 98.187 % 6.279 % 96.192 % 4.922 % 97.176 % 2.014 % 98.635 % 2.041 % 98.538 % 0.181 % 99.878 % 1.515 % 98.852 % 4.532 % 97.175 %

k 6 6 8 10 11 5 4 3 3

Excel C(k, r) P (W q <= 20s) 1.869 % 98.802 % 4.744 % 96.784 % 2.989 % 98.187 % 6.279 % 96.192 % 4.922 % 97.176 % 2.014 % 98.635 % 2.041 % 98.538 % 1.515 % 98.852 % 1.639 % 98.758 % 4.207 % 97.418 %

Tabla 4: Comparacin entre la soluciones de Xpress y Excel para el problema con turnos exibles o 11

8:00 - 9:00 9:00 - 10:00 10:00 -11:00 11:00 - 12:00 12:00 - 1:00 1:00 - 2:00 2:00 - 3:00 3:00 - 4:00 4:00 - 5:00 Tabla 5: Posibles turnos con hasta una hora de interrupcin o

1 1 1 1 1 0 0 0 0 0

2 0 1 1 1 1 0 0 0 0

3 0 0 1 1 1 1 0 0 0

4 0 0 0 1 1 1 1 0 0

5 0 0 0 0 1 1 1 1 0

6 0 0 0 0 0 1 1 1 1

7 1 0 1 1 1 0 0 0 0

8 0 1 0 1 1 1 0 0 0

9 0 0 1 0 1 1 1 0 0

10 0 0 0 1 0 1 1 1 0

11 0 0 0 0 1 0 1 1 1

12 1 1 0 1 1 0 0 0 0

13 0 1 1 0 1 1 0 0 0

14 0 0 1 1 0 1 1 0 0

15 0 0 0 1 1 0 1 1 0

16 0 0 0 0 1 1 0 1 1

17 1 1 1 0 1 0 0 0 0

18 0 1 1 1 0 1 0 0 0

19 0 0 1 1 1 0 1 0 0

20 0 0 0 1 1 1 0 1 0

21 0 0 0 0 1 1 1 0 1

12
3 2 2 2 2 2 2 2 2 2 0 0 0 0 3 3 3 3 2 2 2 2 1 1 1 1 4 1 5 6 7 2 8 2 9 10 0 11 3 12 13 14 15 16 17 1 1 1 1 1 18 19 20 21 TOT 14 6 6 8 10 11 5 4 3 3 REQ 5 6 8 10 11 5 4 3 3 .

# Turno #ope en turno

1 3

2 0

8:00 - 9:00 9:00 - 10:00 10:00 -11:00 11:00 - 12:00 12:00 - 1:00 1:00 - 2:00 2:00 - 3:00 3:00 - 4:00 4:00 - 5:00

3 3 3 3 -

0 0 0 0 -

Tabla 6: Solucin para el problema de turnos exibles encontrada con el solver de excel. Usa un total de 14 agentes o

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 nmero agentes necesarios para que u el nivel de servicio se mantenga. Respuesta: De acuerdo con la informacin dada = 60/1,5 = 40 por hora. Implementamos las frmulas de o o Mandelbaum y Zeltyn para el modelo M/M/k + G, para el caso exponencial. En el Apndice A se e puede ver el cdigo usado. En la Tabla 7 se puede ver los resultados obtenidos. El nivel de servicio o ac se calcula como P {W < t}, es decir para todos los clientes (contando los que abandonan). Si Ud a 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 a decir usando tiempo virtual. Si el porcentaje de abandonos no es muy alto estas dos cantidades no diferirn mucho. Podemos concluir que al tener en cuenta los abandonos se necesita un agente menos a entre las 10 y las 3 de la tarde, lo cul puede signicar un ahorro. a Lo unico en el cdigo de VBA que amerita mencin es el clculo de la funcin gamma imcompleta o o a o
b

(a, b) =
0

ta1 et dt.

Excel no tiene una funcin para la gamma incompleta, pero tiene la funcin de distribucin gamma o o o
x 1 t/

F (x; , ) =
0

e dt. ()

Es fcil ver que la gamma incompleta se puede calcular como a (a, b) = (a) F (b; a, 1). Excel no tiene (a), pero s GammaLn, que calcula su logaritmo. Horas 8:00 - 9:00 9:00 - 10:00 10:00 -11:00 11:00 - 12:00 12:00 - 1:00 1:00 - 2:00 2:00 - 3:00 3:00 - 4:00 4:00 - 5:00 40 50 70 110 120 30 20 10 10 20 20 20 20 20 20 20 20 20 40 40 40 40 40 40 40 40 40 r 2.00 2.50 3.50 5.50 6.00 1.50 1.00 0.50 0.50 k-estab 3 3 4 6 7 2 2 1 1 k 5 6 7 9 10 4 3 3 3 0.400 0.417 0.500 0.611 0.600 0.375 0.333 0.167 0.167 P {wait > 0} 4.9354 % 3.9364 % 6.0290 % 9.5657 % 7.6311 % 6.1677 % 7.5903 % 1.4001 % 1.4001 % P {Abandon} 1.6507 % 1.1877 % 1.7220 % 2.4947 % 1.8536 % 2.3248 % 3.3014 % 0.5843 % 0.5843 % P (W q <= 20s) 97.4084 % 98.0716 % 97.1476 % 95.7534 % 96.8198 % 96.5220 % 95.3912 % 99.1730 % 99.1730 %

Tabla 7: Clculos para el modelo Erlang A a j. Haga un estudio de simulacin para corroborar sus resultados. o Respuesta: Hicimos un modelo en Arena (archivo callcenter.doe) y corrimos optquest (archivo callcenter.opt) variando el nmero de personas en cada hora. La Tabla 9 muestra las mejores soluciones encontradas u por OptQuest. La mejor solucin usa 42 operarios-hora con un TSF de %95,31, mientras que la nuestra o recomendaba 55. En la Tabla 8 se pueden ver algunos de los resultados pertinentes. Nuestra hoja de clculo predice 92,2707 % para la conguracin encontrada por Arena. La razn para la discrepancia a o o es que nuestro anlisis usa ecuaciones de estado estable mientas que la simulacin tiene en cuenta a o que cuando la tasa sube al sistema le toma un tiempo saturarse. Quiere esto decir que los resultados anal ticos deben desecharse? No. Por una lado los usamos de punto de partida para el OptQuest, lo cul ayudo a que la convergencia fuese ms rpido. Pero adems los resultados anal a a a a ticos los obtuvimos rpidamente en una hoja de clculo, mientras que la simulacin requiri mas tiempo para hacer el a a o o modelo y para correr (ya usando software especializado que tiene un costo mayor). 13

Output Espera en Cola en min Numero Promedio en Cola Porcentaje de Abandonos TSF Tabla 8: Resultados de la simulacin o

Average 2.7242 0.04128384 5.8845 95.3471

Half Width 0.17 0 0.32 0.32

14 TSF 97.5591 97.079 95.815 95.3691 95.3196 Cap[9] 3 3 3 2 2 Cap[8] 3 1 1 1 1 Cap[7] 3 3 3 3 3 Cap[6] 4 2 2 2 2 Cap[5] 10 10 9 11 9 Cap[4] 9 9 9 9 9 Cap[3] 9 9 10 8 8 Cap[2] 6 6 4 4 5 Cap[1] 5 5 5 3 3 Total 52 48 46 43 42

Simulation 1 12 21 38 Best: 152

MinimizeTotal 52 48 46 43 42

Tabla 9: Resultados de la simulacin con Arena + OptQuest. Las cantidades Cap[i] representan el nmero de servidores disponibles en el periodo i. o u Para cada escenario se corren sucientes replicaciones que garanticen intervalos de conanza del 95 % no sean ms anchos que el 2 % de la media (es a decir el intervalo a lo sumo del 4 % de la media)

A.

Cdigo de VBA o
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 ASA= a v e r a g e s p e e d answer = Wating i n Q Public Function ErlangC ASA ( r , mu, k ) Dim rho , Lq , Wq rho = r / k Lq = ErlangC PWait ( k , r ) * rho / ( 1 rho ) Wq = Lq / (mu * rho )

15

ErlangC ASA = Wq End Function ERLANG A FUNCTIONS From Mandelbaum and Z e l t y n Function ErlangA J ( lambda , mu, t h e t a , k ) Dim lambdaOtheta lambdaOtheta = lambda / t h e t a ErlangA J = Exp( lambdaOtheta ) / t h e t a * WorksheetFunction . Power ( lambdaOtheta , k * mu / t h e t a ) * gammaInc ( k * mu / t h e t a , lambdaOtheta ) End Function Function E r l a n g A J t ( lambda , mu, t h e t a , k , t ) Dim lambdaOtheta lambdaOtheta = lambda / t h e t a E r l a n g A J t = Exp( lambdaOtheta ) / t h e t a * WorksheetFunction . Power ( lambdaOtheta , k * mu / t h e t a ) * gammaInc ( k * mu / t h e t a , lambdaOtheta * Exp( t h e t a * t ) ) End Function Function ErlangA JH ( lambda , mu, t h e t a , k , J ) Dim lambdaOtheta lambdaOtheta = lambda / t h e t a ErlangA JH = J / t h e t a Exp( lambdaOtheta ) / t h e t a / t h e t a * WorksheetFunction . Power ( lambdaOtheta , k * mu / t h e t a 1 ) * gammaInc ( k * mu / t h e t a + 1 , lambdaOtheta ) End Function Function ErlangA JHt ( lambda , mu, t h e t a , k , Jt , t ) Dim lambdaOtheta lambdaOtheta = lambda / t h e t a ErlangA JHt = J t / t h e t a Exp( lambdaOtheta ) / t h e t a / t h e t a * WorksheetFunction . Power ( lambdaOtheta , k * mu / t h e t a 1 ) * gammaInc ( k * mu / t h e t a + 1 , lambdaOtheta * Exp( t h e t a * t ) ) End Function Function ErlangA E ( lambda , mu, k ) Dim Ei As Double , muOLambda As Double , i As Integer 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 Public Function ErlangA Dim J , E J = ErlangA J ( lambda , E = ErlangA E ( lambda , ErlangA PAbandon = ( 1 End Function PAbandon ( lambda , mu, k , t h e t a ) mu, t h e t a , k ) mu, k ) + ( lambda k * mu) * J ) / (E + lambda * J )

Public Function ErlangA TSF ( lambda , mu, t h e t a , k , time ) Dim J , E , Jt , Gbt J = ErlangA J ( lambda , mu, t h e t a , k ) J t = E r l a n g A J t ( lambda , mu, t h e t a , k , time )

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 Number o f a g e n t s needed f o r TSF Public Function ErlangA minAgents ( lambda , mu, t h e t a , TSF , t a r g e t T i m e ) Dim k As Integer With WorksheetFunction k = 1 While ErlangA TSF ( lambda , mu, t h e t a , k , t a r g e t T i m e ) < TSF k = k + 1 Wend End With ErlangA minAgents = k End Function

17

You might also like