Professional Documents
Culture Documents
(L Í NEAS DE ESPERA)
E LABORADO POR
PROBABILIDAD
P ROFESOR
J OAQUÍN O RTEGA S ÁNCHEZ
Departamento de Matemáticas
Universidad de Guanajuato
A GOSTO - D ICIEMBRE
2017
1. Introducción
Para conocer el comportamiento de los eventos a lo largo del tiempo se desarrolla la simulación
de modelos probabilísticos. Dichos modelos implican generar el mecanismo estocástico (aleatorio)
del modelo y luego observar el flujo resultante de éste a lo largo del tiempo.Como resultado del
estudio de eventos en tiempo continuo surgen dos tipos de simulación; 1) por medio de eventos
discretos y, 2) a través de eventos continuos. Para tiempo continuo podemos suponer la simulación
de un circuito eléctrico o de algún proceso químico y en el caso discreto se puede analizar el proceso
de nacimientos y muertes o un sistema de línea de espera.
La teoría de colas es el estudio matemático de las colas o líneas de espera dentro de un sis-
tema. Esta teoría estudia factores como la distribución del tiempo entre llegadas de las personas
(clientes) y del tiempo de servicio entre otros que se abordarán en la Sección 1.1. El primer artículo
con respecto a la teoría de colas fue publicado en 1909 por el matemático danés Agner Krarup
donde se enfocó en el estudio del problema de la dimensión de líneas y centrales de conmutación
telefónica para el servicio de llamadas.
En el caso particular de la simulación del segundo sistema enunciado, se hace uso de la Si-
mulación por Eventos Discretos (SED). De acuerdo con el autor del libro “Simulation – The
Practice of Model Development"(2004), Robinson Stewart, una SED modela la operación de un
sistema como una secuencia discreta de eventos en el tiempo. Cada evento ocurre en un instante
específico de tiempo y marca un cambio de estado en el sistema. Entre dos eventos consecutivos
no se asume algún cambio en el sistema, por lo que la simulación puede saltar directamente en el
tiempo de un evento al siguiente.
1
Una aplicación usual de la Simulación por Eventos Discretos es el modelado de Colas o Líneas
de Espera; por ejemplo, los clientes que llegan a un banco para ser atendidos por un cajero, las
filas del supermercado o la espera en servidores de computación. Considerando el primer ejemplo,
los componentes del sistema son los clientes/fila y los cajeros y los eventos son llegada del cliente
y salida del cliente. Los estados del sistema, que son determinados por los eventos, son el número
de clientes en la fila (un entero entre 0 y n) y el estado del cajero (ocupado o disponible). Las
variables aleatorias necesarias para caracterizar este sistema como estocástico son tiempo de llegada
entre clientes y Tiempo de Servicio en Cajero.
En general, la Figura 1 representa los elementos de un sistema de colas de manera gráfica. Los
clientes forman una población o fuente que alimenta la línea de espera para recibir algún tipo de
servicio. Usamos “cliente” para referirnos a cualquier situación que requiera servicio. El mecanismo
de servicio del sistema tiene uno o más servidores. Un servidor es la entidad capaz de realizar el
servicio requerido por el cliente. Si todos los servidores están ocupados cuando un cliente entra al
sistema, el cliente debe unirse a la línea de espera hasta que algún servidor esté disponible.
2
b) Patrón de llegada. Los clientes llegan al servicio de acuerdo a un horario conocido o de
manera aleatoria. Las llegadas se consideran aleatorias cuando son independientes entre
sí y su ocurrencia no puede ser predicha de manera exacta. Entonces, dada una tasa
promedio de llegadas, λ, si éstas se distribuyen uniformemente en el tiempo, por ejemplo
cada h unidades de tiempo, el mecanismo de servicio puede proveer mejor atención si los
clientes llegan por bloques. Asumimos entonces, que siempre las llegadas ordenadas de
clientes comienzan en el momento t = 0 y en los tiempos
3
a) Número de servidores. El modelo más sencillo es el sistema de un único servidor, en
el cual sólo se puede atender un cliente a la vez. Un sistema de múltiples servidores tiene
c servidores idénticos que proveen el mismo servicio a tantos clientes como c de manera
simultánea. En un sistema de infinitos servidores cada cliente que llega es atendido
inmediatamente por un servidor.
b) Distribución del tiempo de servicio. Usualmente la distribución exponencial es usa-
da para describir el tiempo de atención de un servicio debido a la propiedad de Markov
(revisar Apéndice punto 4). Entonces, si el tiempo de servicio es exponencial, el tiempo
esperado que le queda a un cliente para completar el servicio es independiente del servicio
ya provisto (revisar propiedad 5 del Apéndice). Supongamos ahora que el sistema de colas
tiene n servidores idénticos, cada uno con tiempo de servicio exponencial de parámetro
µ y todos están ocupados en este momento. Sea Ti el tiempo restante de servicio para el
servidor i (i = 1, . . . , n). Por la propiedad de Markov, cada Ti tiene distribución expo-
nencial con parámetro µ. Luego T , el tiempo hasta la terminación siguiente del servicio,
es el mínimo de {T1 , T2 , . . . , Tn }. Por tanto, por la propiedad 7 descrita en el Apéndice, T
tiene distribución exponencial con parámetro nµ; el sistema de colas en tiempo presente
actúa como un sistema de un único servidor exponencial con tasa promedio de servicio
nµ.
En la teoría de colas, si el tiempo de servicio de distribuye exponencial se llama servicio
aleatorio y la función de distribución Ws (t) está dada por
Ws (t) = P (x ≤ t) = 1 − e−µt
1
donde µ = E(s) es la tasa promedio de servicio, y puede ser definida como la tasa pro-
medio de clientes procesados por un servidor mientras el servidor está ocupado.
w =q+s
W = Wq + Ws (∗∗).
4
Por otra parte, la relación fundamental que debe cumplir el sistema de colas bajo condiciones
generales cuando se encuentra en un estado constante, es la enunciada en el Teorema 1. Común-
mente se le conoce como la Fórmula de Little en honor al matemático, John D. C. Little.
De la fórmula de Little y las ecuaciones (∗) y (∗∗), asumiendo que λ y Ws están dados, podemos
calcular W , Wq , L y Lq si se conoce cualquiera de ellas. Por ejemplo, sabiendo el valor de W
L = λW, Wq = W − Ws , Lq = λWq
De manera simplificada se usa A/B/c y asumimos que el tamaño de la fila es infinita así como
la población y que la disciplina es de tipo FIFO. Luego los símbolos habitualmente usados para A
y B son:
5
3. ¿Cómo Simular un Sistema de Colas?
Dado que las líneas de espera son una experiencia cotidiana surge la necesidad de diseñar me-
canismos que permiten optimizar el flujo de atención con respecto a la tasa de llegada teniendo el
mínimo número de servidores.
La siguiente función genera la variable aleatoria Ts , que determina el tiempo hasta la primera
llegada después del tiempo s, usando el método del rechazo con X = − ln (1−U
λ
)
∼ E(λ) para obtener
Ts ∼ s + E(λ(s))
con los parámetros s, l (cota superior de la función L(t)), y la función de valores esperados L.
1 def generateT (s , l , L ) :
2 while ( True ) :
3 t = s
4 u = stats . uniform . rvs ()
5 t = t - 1/ l * np . log ( u )
6 u = stats . uniform . rvs ()
7 if u <= l / L ( t ) :
8 return t
En el código mostrado a continuación usamos la función anterior para generar 1000 variables
1
aleatorias que se distribuyen exponencial con media λ(t) horas, con λ(t) = − 83 t2 + 3t + 2 una
parábola de vértice en (4, 8) cuyo λmax = 4 y λ(0) = λ(8) = 2.
1 # Funci ó n lambda :
2 def L ( t ) :
3 return ( -3./8.*( t **2.) + 3.* t +2. )
4 lmax = 4.
5
6 # Generamos las exponenciales
7 T = []
8 for i in range (1000) :
9 T . append ( generateT (0. , lmax , L ) )
6
1 H = plt . hist (T , bins = 25)
2 plt . show ( H )
Al llevar a cabo la simulación consideramos que hay un tiempo fijo T , después del cual no se
admiten más llegadas, pero el sistema termina de atender a todos los clientes que se encontraban
en la fila hasta el instante T . Por medio de este modelo, determinamos lo siguiente:
a) El tiempo promedio, después de transcurrido T , en el que el último cliente sale del sistema;
es decir, el tiempo después de T hasta que no haya clientes en el sistema.
b) El tiempo promedio que un cliente se encuentra en el sistema.
Consideremos las siguientes variables:
t = variable que almacena el tiempo transcurrido
N A = número de llegadas (al tiempo t)
N D = número de salidas (al tiempo t)
n = número de clientes en el sistema (al tiempo t)
Notemos que el estado del sistema se actualiza si llega o si sale un cliente o si sale uno, así que éstos
son los eventos a considerar. Introducimos las variables ta y td, para registrar el tiempo después de t
de la siguiente llegada y de la siguiente salida, respectivamente. Repetimos N veces el proceso para
recabar suficiente información. A este método para calcular el valor esperado se le conoce como
Método Bootstrap.
7
1 tiempo_extra = 0
2 tiempo_pr om ed i o = 0
3 N = 500
4 T = 8.0 # Tiempo total 8 hrs
5
6 def generateY () : # Tiempo que dura el cliente en ventanilla
7 return stats . expon . rvs ( scale = 0.2)
1 for k in range ( N ) :
2 # Inicializamos las variables
3 t = 0.0 # Tiempo actual
4 NA = ND = 0 # No . de llegadas , salidas al tiempo t
5 t0 = generateT (0. , lmax , L ) # Tiempo al que ocurre la primer llegada
6
7 td = INF # Tiempo de la primer partida es infinto por ahora ( pues no ha llegado nadie )
8 ta = t0 # Primer llgada despues de t es t0
9
10 n =0 # Numero de clientes en el sistema al tiempo t
11
12 # Tiempos a los cuales se realiz ó una llegada o una salida
13 Tllegadas = []
14 Tsalidas = []
15
16 # Diccionario con clave el tiempo al que hay n en el sistema
17 Teventos = {}
18 Teventos [0.0] = 0
19
20 while ( True ) :
21 # Dividimos en casos
22 if ( ta <= td and ta <= T ) : # Ocurre una llegada antes de una salida y aun no cierra
23 t = ta
24 NA = NA + 1
25 n = n +1
26 ta = generateT (t , lmax , L )
27
28 if n ==1: # n era 0 , por lo que no hab í amos generado salidas de
ventanilla
29 td = t + generateY ()
30 Tllegadas . append ( t )
31 Teventos [ t ] = n
32
33 elif ( td < ta and td <= T ) : # Ocurre una salida antes que una llegada y aun no cierra
34 t = td
35 n = n - 1
36 ND = ND + 1
37 if n == 0: # Si ya no hay clientes en el sistema
38 td = INF
39 else :
40 td = t + generateY ()
41 Tsalidas . append ( t )
42 Teventos [ t ] = n
43
44 elif ( min ( ta , td ) > T and n >0) : # Ocurre evento despu é s de T y aun hay clientes en la
cola
45 t = td
46 n = n -1
47 ND = ND + 1
48 if n >0:
49 td = t + generateY ()
50 Tsalidas . append ( t )
51 Teventos [ t ] = n
52
53 elif ( min ( ta , td ) > T and n == 0) : # Ocurre evento despu é s de T pero ya no hay nadie en
cola
54 tiempo_extra = tiempo_extra + 60* max ( t - T ,0)
8
55 break
56
57 # Obtener media
58 dif = []
59 for i in range ( ND ) :
60 dif . append ( Tsalidas [ i ] - Tllegadas [ i ])
61 tiemp o _p ro m ed i o = ti e mp o_ p ro me d io + 60 * np . mean ( dif )
62
63 tiempo_extra = tiempo_extra / N
64 tiempo_pr om ed i o = ti e mp o_ p ro m ed io / N
a) 38.470404769 min
b) 40.8908243553 min
Graficamos la última de las simulaciones; el eje x representa las horas y el eje y el estado del
sistema, como ilustra la Figura 4.
1 # Graficar numero de clientes en el sistema
2 gra = plt . plot (* zip (* sorted ( Teventos . items () ) ) )
3 plt . show ( gra )
9
3.2. Sistema de Colas con Dos Servidores en Serie: M/Gi /1/∞/∞/F IF O,
i = 1, 2
En el caso de este sistema, el mecanismo de servicio consta de dos servidores y el tiempo entre
llegadas tiene distribución exponencial de parámetro λ. Asumimos que tanto la población como la
capacidad de la fila son de tamaño infinito. Ahora, suponemos que cada cliente primero debe ser
atendido por el servidor 1 y luego por el servidor 2, entonces notemos que localmente, cada servidor
tiene su propio sistema de cola descrito por M/Gi /1/∞/∞/F IF O para i = 1, 2, donde G1 es la
distribución del tiempo de atención del servidor 1 y G2 del segundo servidor.
10
El tiempo de reparación de las máquinas es una variable aleatoria independiente con distribución
cualquiera, es decir G. Supondremos que las máquinas son puestas a trabajar en la fábrica hasta
que fallen, pues nos va a interesar el tiempo en el que podemos dejar las máquinas trabajando y
hacer una pausa de trabajo antes de que no tengamos máquinas disponibles. El tiempo desde que
una máquina comienza a trabajar hasta que falle, es independiente del pasado y tiene distribución
cualquiera, sea F . Diremos que el sistema o la fábrica colapsa si una máquina falla y no hay má-
quinas disponibles en la reserva.
Dado lo anterior, nos interesa el valor esperado del tiempo hasta que el sistema colapsa E[T ],
donde T es la variable aleatoria del tiempo que que el sistema se mantiene activo hasta que colapsa.
Primero definimos la distribución del tiempo de falla de cada máquina (F ) y la distribución del
tiempo que tomará en repararse (G). Suponemos
1 # Consideramos una distribuci ó n exponencial de par á metro lamb ( t )
2 def F ( t ) :
3 return generateT (t , 0.5 , lamb )
4 def lamb ( t ) :
5 return 0.5
6
7 def G ( t ) :
8 return ( t + stats . gamma . rvs (1 , loc = 0.25 , scale = 0.5) )
11
9 s = 4 # Maquinas de reserva
10
11 # Creamos tiempos de fallos
12 for i in range (4) :
13 t_fallos . append ( F ( t ) )
14 t_fallos . sort () # Ordenamos los tiempos de fallo de menor a mayor
15
16
17 # Vamos actualizando el sistema
18 while True :
19 if ( t_fallos [0] < t_reparacion ) :
20 t = t_fallos [0]
21 r += 1 # Otra m á quina a fallado
22
23 # Condici ó n de paro
24 if ( r == s +1) : # Si las m á quinas en reparaci ó n excede al n ú mero en reserva
25 return t # Termina programa
26
27 if ( r <= s ) : # Si a ú n hay m á quinas en reserva pon nueva en uso
28 t_fallos [0] = F ( t ) # Calcula el tiempo al cu á l fallar á
29 t_fallos . sort () # Ordena
30
31 if ( r == 1) : # Si antes r = 0
32 t_reparacion = G ( t )
33
34 elif ( t_reparacion <= t_fallos [0]) :
35 t = t_reparacion
36 r -= 1
37
38 if (r >0) : # Si hay m á quinas esperando a ser reparadas
39 t_reparacion = G ( t )
40
41 if ( r == 0) :
42 t_reparacion = INF
Supongamos que nos contrata una empresa que elabora motores para automóviles con el fin de
asesorarlos en la inversión de nueva maquinaria para la fábrica. Para la elaboración de los motores
se requieren 4 máquinas de trabajando simultáneamente por lo que se invertirá en la compra de al
menos 4 de ellas. Se recomienda la existencia de algunas máquinas en reserva; pues en caso del fallo
de una, ésta se puede reemplazar por otra, sin afectar la producción (mientras la otra es enviada
a reparación). Si en algún momento falla una máquina y no se tiene ninguna en reserva, toda la
producción de la fábrica debe detenerse, lo cual se quiere que evitar.
El capital a invertir será de 400, 000 dólares. Se ofrecen máquinas de diversas marcas con diferente
costo y cada empresa asegura cierta estimación del tiempo de vida, antes de enviar el producto a
12
reparación. La lista de oferta de acuerdo a la compañía es la siguiente:
Queremos comprar al menos 4 máquinas, donde las sobrantes serán puestas en reserva, de forma
tal que el tiempo transcurrido del sistema antes de detener la producción sea máximo. La única
restricción es comprar las máquinas de una única marca.
Después de hablar con la persona encargada de la reparación de las máquinas, sabemos que
reparar una máquina lleva al menos una semana ( 14 de mes), debido al tiempo de diagnóstico, y en
la mayoría de los casos el arreglo es casi inmediato. A partir de eso, decidimos modelar el tiempo de
reparación con distribución Gamma de parámetro 0.5 recorrida un cuarto de mes. Por otra parte, es
razonable modelar el tiempo de vida de las máquinas con una distribución exponencial con media
la especificada por el proveedor.
Finalmente, nos preguntamos qué marca comprar. Considerando el presupuesto, podemos decidir
entre 10 máquinas de AA Máquinas, 8 de Pro Machines o 6 de S&T. Utilizando el proceso descrito
en el código anterior, simulamos para N = 600 y obtenemos los siguientes resultados:
a) 8.00 meses con AA Máquinas
13
14
A. APÉNDICE
1 1
2. E(X) = λ y V ar(X) = λ2 = (E(X))2
k!
3. E(X k ) = λk
= k!(E(X))k para k = 1, 2, 3, . . .
5. Suponiendo que el número de llegadas, Y , de algún sistema por unidad de tiempo está descrito
por una variable aleatoria Poisson de parámetro λ. Entonces el tiempo T entre cualesquiera
dos llegadas consecutivas (el tiempo entre llegadas) es independiente del tiempo entre llegadas
de cualesquiera otras dos llegadas consecutivas que no se empalmen con las anteriores, tiene
distribución exponencial con parámetro λ. Por lo tanto E(T ) = λ1 y P (T ≤ t) = 1 − e−λt .
6. Suponiendo que el tiempo entre llegadas de clientes de un sistema de colas son variables
aleatorias independientes e idénticamente distribuidos con distribución exponencial, cada una
con media λ1 . Entonces el número de llegadas, Yt , in cualquier intervalo de tiempo de tamaño
t > 0, tiene una distribución Poisson de parámetro λt.
7. Suponiendo que X1 , X2 , . . . , Xn son variables aleatorias independientes con distribución ex-
ponencial con parámetros λ1 , λ2 , . . . , λn , respectivamente, y Y = mı́n{X1 , X2 , . . . , Xn }. En-
tonces Y se distribuye exponencialmente con parámetro λ = λ1 + λ2 + . . . + λn . En particular,
si λi = λ para cada i = 1, . . . , n, entonces Y es exponencial con parámetro nλ.
15
Como se mencionó anteriormente, la distribución asociada al número de llegadas, es Poisson.
Si la variable aleatoria Y tiene distribución Poisson con parámetro λ > 0, entonces su función de
densidad es:
e−λ λn
P (Y = n) = para n = 0, 1, 2, 3, . . .
n!
y podemos caracterizar este proceso en dos formas por medio de los siguientes teoremas.
Teorema a.
{Λ(s), s ≥ 0} es un proceso Poisson Homogéneo de intensidad λ si y sólo si se cumplen
las siguientes tres propiedades:
a) Λ(0) = 0
b) Λ(t + s) − Λ(s) ∼ P oiss(λt)
c) Λ(t) tiene incrementos independientes, es decir si t0 < t1 < . . . < tn , entonces
son independientes Λ(t1 ) − Λ(t0 ), Λ(t2 ) − Λ(t1 ), . . . , Λ(tn ) − Λ(tn−1 ).
Teorema b.
{Λ(s), s ≥ 0} es un proceso Poisson No-Homogéneo de intensidad λ(s), s ≥ 0 si y sólo
si se cumplen las siguientes tres propiedades:
a) Λ(0) = 0
Rt
b) Λ(t + s) − Λ(s) ∼ P oiss( 0 λ(k)dk)
c) Λ(t) tiene incrementos independientes, es decir si t0 < t1 < . . . < tn , entonces
son independientes Λ(t1 ) − Λ(t0 ), Λ(t2 ) − Λ(t1 ), . . . , Λ(tn ) − Λ(tn−1 ).
16
Tabla 1: Notación y Definiciones Básicas en la Teoría de Colas
17
Ns Variable aleatoria que describe el estado constante del número de clientes en el mecanismo de servicio
Pn (t) Probabilidad de que hayan n clientes en el sistema de espera al tiempo t, asumiendo algún número inicial al tiempo 0
pn Estado constante de la probabilidad de que hayan n clientes en el sistema
q Variable aleatoria que describe el tiempo que un cliente espera en la línea antes de ser atendido
λ
ρ Uso de servidores = cµ
s Variable aleatoria que describe el tiempo de servicio
τ Variable aleatoria que describe el tiempo entre llegadas
w Variable aleatoria que describe el tiempo total que un cliente permanece en el sistema, incluyendo el tiempo en la fila y el de servicio, w = q + s
W Esperanza del estado constante del tiempo en el sistema, E[w] = E[q] + E[s]
Wq Esperanza del estado constante del tiempo en la fila, excluyendo el tiempo de servicio, E[q] = W − E[s]
Ws Valor esperado del tiempo de servicio, E[s]
Λ(t) Variable aleatoria que describe el número de llegadas al instante t (patrón de llegada)
18
Referencias
[1] Allen, A.O., Probability, Statistics and Queueing Theory – With Computer Science Applica-
tions, Primera edición, Academic Press, Estados Unidos, 1978.
[2] Bose, S.K., An Introduction to Queueing Systems, Primera edición, Kluwer Academic / Ple-
num Publishers (KA/PP), India, 2002.
[3] Ross, S.M., Simulation, Cuarta edición, Elsevier Academic Press Publications, California,
2006.
[4] Wolff, R.W., Stochastic Modeling and the Theory of Queues, Primera edición, Prentice-Hall,
Inc., Estados Unidos, 1989.
19