You are on page 1of 20

INTRODUCCIÓN A LA TEORÍA DE COLAS

(L Í NEAS DE ESPERA)

E LABORADO POR

A GUAYO G ONZÁLEZ J AIME F RANCISCO


C HÁVEZ H EREDIA A NDREA
M ORENO G ALVÁN D IEGO A ARÓN

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.

De esto se siguen distintos objetivos y enfoques de dicha teoría. En matemáticas se engloba la


investigación de operaciones con objetivo de optimizar la capacidad del sistema con respecto del
costo y el tiempo de espera; , mientras que en ciencias de la computación se abordan procesos de
envío y recepción de información a un servidor para su ejecución. Sin embargo, para fines de este
proyecto, estudiaremos la simulación a través de eventos discretos, enunciando tres casos básicos de
la teoría de colas: a) Sistema de colas con un único Servidor; b) Sistema de colas con dos servidores
en serie, c) Sistema de colas con dos servidores en paralelo y, d) Un ejemplo de reparación de
máquinas, usando un de sistema de colas con cuatro servidores en paralelo.
Es importante resaltar que los sistemas en serie y en paralelo se pueden generalizar para k servidores
con k ≥ 2.

2. Simulación por Eventos Discretos: Sistema de Colas


Considerando la simulación de algún sistema que involucre el tiempo, hay gran variedad de estas
aplicaciones; por ejemplo, podemos simular el sistema climático; para ello, notemos que los eventos
simulados serían continuos pues la gráfica del evento observado contra el tiempo no tendría saltos.
Por otro lado, supongamos que simulamos los movimientos de un almacén, los pedidos ordenados
llegan y son almacenados, reduciendo el inventario, pero éste es actualizado ocasionalmente. En-
tonces el inventario per se es una variable y la gráfica del número de artículos contra tiempo es
escalonada; es decir, que los eventos son discretos.

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.

Figura 1: Elementos de un sistema de colas.

2.1. Caracterizando un Sistema de Colas


Para describir de manera analítica un sistema de colas a partir de las tres partes primordiales
en una fila de espera mostradas en la Figura 1, introduciremos los conceptos y notación de la Tabla
1, que se encuentra al final del Apéndice y analizaremos más a detalle cada componente.
1. Llegadas o entradas al sistema. Tenemos características tales como tamaño de la población
y una distribución estadística.
a) Tamaño de la población. Ésta puede ser finita o infinita. Cuando el número de clientes
en cualquier momento dado es una pequeña porción de todas las llegadas potenciales,
la población es considerada entonces como infinita. La mayoría de los modelos de colas
asumen este tipo de población pues en el caso finito el número de clientes del sistema
afecta la tasa de llegada, por lo que cualquier cliente potencial está ya sea en fila de
espera o siendo atendido.

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

0 ≤ t0 < t1 < t2 < . . . < tn < . . .

Las variables aleatorias τk = tk − tk−1 , k = 1, 2, 3, . . . se llaman tiempos entre llegadas y


denotamos por τ un tiempo entre llegadas arbitrario. Asumimos normalmente que {τi }i≥1
es una sucesión de variables aleatorias independientes idénticamente distribuidas. Luego,
para describir el patrón de llegada, damos una función de distribución del tiempo entre
llegadas P (τ ≤ t).
Debido a las propiedades de la función exponencial descritas en el Apéndice, asumimos
τ ∼ exp(λ). Como el tiempo entre llegadas de los clientes de un sistema de colas se
distribuye exponencial, el patrón de llegada Λ(t) que es el número de llegadas al instante
t es el máximo n tal que tn ≤ t para t ≥ 0; es decir, es un proceso Poisson de intensidad
λ y se cumple que el tiempo promedio entre llegadas es E(τ ) = λ1 .

2. Línea de espera. Características de la fila, como si ésta es finita o no y la disciplina de los


clientes.
a) Capacidad máxima del sistema de colas. Intuitivamente, de acuerdo a la naturaleza
de la línea de espera, se asumen tres tipos de capacidad del sistema. Se dice que la
capacidad de la fila es infinita si el cliente que llega puede esperar para recibir el servicio
en caso de que el mecanismo de servicio esté lleno. En los “sistemas de pérdida", se
tiene capacidad cero, es decir si un cliente llega cuando no hay servidores disponibles,
el cliente es “rechazado"(por ejemplo en los servicios telefónicos de atención al cliente).
Por último, otros sistemas tienen capacidad positiva mas no infinita si la longitud de la
fila no admite más de cierto número de clientes.
Utilizamos K para representar el número máximo de clientes admitidos en el sistema.
b) Disciplina de la cola. Esto se refiere a la forma en que los clientes reciben el servicio.
Las disciplinas que normalmente se asumen son cuatro y reciben sus nombres por sus
siglas en inglés. Cuando en el sistema el primer cliente que llega es el primero en ser
atendido, decimos que es de tipo FIFO (“First-In-First-Out”) o FCFS (“First-Come-
First-Served”); si es disciplina LIFO (“Last-In-First-Out”) o LCFS (“Last-Come-First-
Served”), el último cliente en llegar es el primero en ser atendido; para RSS (“Random-
Selection-For-Service”) o SIRO (“Service-In-Random-Order”) se seleccionan a los clientes
de manera aleatoria, es decir, cada uno tiene la misma probabilidad de ser atendido; o
en el caso de la disciplina PRI (‘Priority-Service”), algunos clientes tienen tratamiento
especial y la fila es dividida en clases de prioridad de acuerdo al tratamiento preferencial
en consideración.
3. Mecanismo de servicio. Características de éste, tales como diseño y distribución estadística
del tiempo de servicio.

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.

De acuerdo a las caracterizaciones mencionadas ante-


riormente, ciertas variables aleatorias de la Tabla 1 se re-
lacionan entre sí. Algunas correspondencias se muestran
en la Figura 2 y el resto están dadas por las siguientes
ecuaciones. Con respecto al número de clientes en distin-
tas partes del sistema, se cumple

N (t) = Nq (t) + Ns (t) ⇒ N = Nq + Ns

luego, al calcular el valor esperado de cada variable de la


segunda ecuación, se tiene

L = Lq + Ls (∗). Figura 2: Algunas variables aleatorias


Considerando el tiempo, claramente se ve que usadas en la modelación de colas.

w =q+s

donde al calcular la esperanza de las variables obtenemos

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.

Teorema 1. Fórmula de Little


Si λ y w existen y son finitos, entonces L existe. Más aún L = λw.

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

2.1.1. Notación de Kendall


Para facilitar la descripción de un sistema de colas, es común utilizar la notación de Kendall,
la cual tiene la forma
A/B/c/K/m/Z

donde A = distribución del tiempo entre llegadas (τ )


B = distribución del tiempo de servicio s
c = número de servidores
K = capacidad del sistema
m = número de la población
Z = disciplina de la cola

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:

M Distribución exponencial (si A = M entonces se tiene un proceso Poisson);


D Distribución determinista (constante);
Ek Distribución Erlang de orden k;
Hk Distribución hiper-exponencial de orden k;
G Distribución general (cualquiera)

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.

Abordaremos el proceso de simulación de colas generando variables aleatorias utilizando Python


añadiendo las librerías numpy y scipy (de contenido matemático y científico) y matplotlib para
graficar.
 
1 import numpy as np
2 import matplotlib . pyplot as plt
3 import matplotlib . patches as mpat
4 import scipy . stats as stats
5 import scipy as sc
6 INF = 2.0**31
7 # Configura tamaño m á ximo de las figuras creadas con pyplot
8 % matplotlib inline
9 plt . rcParams [ " figure . figsize " ] = (10 , 6)
 

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 ) )
 

y creamos un histograma con los datos (que se muestra en la Figura 3).

6
 
1 H = plt . hist (T , bins = 25)
2 plt . show ( H )
 

Figura 3: Histograma con los datos.

3.1. Sistema de Colas con Un Único Servidor: M/G/1


Consideremos un sistema donde el mecanismo de servicio consiste de un único servidor, los
clientes llegan de acuerdo con un proceso Poisson de intensidad λ y el tiempo de atención cumple
con una distribución cualquiera. En este modelo, asumimos que la capacidad del sistema es infinita
con disciplina FIFO, por lo que tras la llegada de un cliente si el servidor no está ocupado se forma
en la línea de espera o es atendido en caso contrario y tras recibir el servicio éste deja el sistema.
En la notación de Kendall, este sistema queda descrito por M/G/1.

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
 

Imprimimos los valores esperados:


 
1 print ( " a ) " , tiempo_extra , " min . " )
2 print ( " b ) " , tiempo_promedio , " min . " )
 

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 )
 

Figura 4: Número de clientes en el sistema.

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.

3.3. Sistema de Colas con Dos Servidores en Paralelo: M/Gi /1/∞/∞/F IF O,


i = 1, 2
Este sistema es similar al de dos servidores en serie; sin embargo, para decir que el mecanismo
de servicio es en paralelo, suponemos la siguiente condición: tras la llegada del cliente, si ambos
servidores están ocupados, se une a la fila de espera, pero si alguno de ellos (ya sea el servidor 1 o
2) se encuentra disponible, entonces el cliente es atendido por éste. Luego al igual que el sistema
en serie, localmente este sistema es M/Gi /1/∞/∞/F IF O con i = 1, 2 de acuerdo al servidor que
ofrece la atención.

3.4. Ejemplo: Un Problema de Reparación de Máquinas


Para este problema, supondremos que tenemos n máquinas trabajando, por ejemplo, máquinas
de coser en una fábrica de zapatos. En caso de que una de estas máquinas falle, tenemos de re-
serva r máquinas listas para usar. Además, las máquinas que fallan son llevadas inmediatamente a
reparación con un especialista que las repara una a la vez, es decir, la etapa de reparación de las
máquinas se puede simular como una cola en serie de un solo servidor. Cuando una máquina es
reparada se lleva a la fábrica y se usa como máquina de repuesto, como lo ilustra la Figura 5.

Figura 5: Modelo de reparación de máquinas.

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

F ∼ E(2) y G ∼ Γ(0.25, 0.5)

 
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) )
 

Decimos que un evento ocurre cuando


una máquina se descompone o cuando una
descompuesta ha quedado reparada. Pa-
ra llevar un registro de cuándo ocurre un
evento, tenemos que guardar los tiempos
a los cuales las máquinas actualmente ac-
tivas se descompondrán y los tiempos en
que las máquinas que actualmente están
en reparación, serán reparadas.
Creamos una función que simule el pro-
ceso que se presenta en la Figura 6; des-
de que empiezan a trabajar las máquinas,
Figura 6: Simulando el modelo de reparación. hasta que colapsa el sistema, y así obtene-
mos el promedio requerido. Siempre quere-
mos determinar el menor de los n tiempos
de fallo. Entonces procedemos a crear la lista ordenada que contenga dichos tiempos y una variable
que contenga el tiempo al cual la máquina en reparación será funcional nuevamente.
 
1 def simulaSistema () :
2 t_fallos = []
3 t_reparacion = INF
4
5 # Inicializamos variables :
6 t = 0.0 # Variable que guarda el tiempo
7 r = 0 # N ú mero de m á quinas descompuestas al tiempo t
8 n = 4 # Maquinas que deben estar activas

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
 

Ahora, ejecutamos la función simulaSistema() N veces y almacenamos los tiempos en los


cuales el sistema colapsa. Al final obtenemos la media muestral de los resultados.
 
1 N = 600
2 resultados = []
3 for i in range ( N ) :
4 r = simulaSistema ()
5 resultados . append ( r )
6
7 R = np . mean ( resultados )
8 print ( " Tiempo promedio : " ,R )
 

Tiempo promedio: 4.7140990706

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:

Empresa Costo (dólares) Tiempo de Vida (meses)


AA Máquinas 40, 000 2
Pro Machines 50, 000 3
S&T 65, 000 5

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

b) 12.74 meses con Pro Machines


c) 11.44 meses con S&T
Por lo tanto, decidimos comprar las 8 máquinas de Pro Machine.

13
14
A. APÉNDICE

El patrón de llegada que comúnmente se asume en la modelación de un sistema de colas es la


distribución exponencial. Si X es una variable aleatoria continua con distribución exponencial de
parámetro λ > 0, entonces su función de probabilidad y función de distribución están dadas por:

fX (x) = λe−λx Ix≥0 (x) y FX (x) = 1 − e−λx Ix≥0 (x)

y cumple con las siguientes propiedades:

1. Si u < λ, entonces la función generadora de momentos ψ está dada por


λ
ψ(u) =
λ−u

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, . . .

4. X cumple con la propiedad de Markov, es decir para t, h > 0

P (X > t + h|X > t) = P (X > h)

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!

donde P (Y = n) = probabilidad de n llegadas


n = número de llegadas
λ = tasa promedio de llegadas

Recordemos que dadas τ1 , τ2 , . . . variables aleatorias independientes idénticamente distribuidas


con distribución exponencial de parámetro λ, t0 = 0 y tn = τ1 + . . . + τn para n ≥ 1 definimos
proceso Poisson de parámetro (o intensidad) λ > 0 como

Λ(s) = máx{n : tn ≤ s}, s≥0

donde ti = tiempo de la llegada i


τi = tiempos entre las llegadas i, i − 1
Λ(s) = número de llegadas hasta el instante s y se distribuye Poisson con parámetro (λs)

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

c Número de servidores idénticos


L Esperanza del estado constante del número de clientes en el sistema, E[N ]
Lq Esperanza del estado constante del número de clientes en el sistema, sin incluir aquellos en servicio, E[Nq ]
λ Tasa promedio de llegadas al sistema
µ Tasa promedio de atención por servidor, es decir, la tasa promedio de servicios completados cuando un servidor está ocupado
N (t) Variable aleatoria que describe el número de clientes en el sistema al tiempo t
N Variable aleatoria que describe el estado constante del número de clientes en el sistema
Nq (t) Variable aleatoria que describe el número de clientes en la fila al tiempo t
Nq Variable aleatoria que describe el estado constante del número de clientes en la fila
Ns (t) Variable aleatoria que describe el número de clientes recibiendo servicio al tiempo t

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

You might also like