5.4 Colas con múltiples servidores

Generalizamos los modelos anteriores a situaciones donde tenemos múltiples servidores.

5.4.1 M/M/s

Es una generalización del modelo \(M/M/1\) en el caso en que haya \(s\) servidores. Se trata pues de una cola en la que la distribución del tiempo entre llegadas consecutivas es una \(exp(\lambda)\), la distribución del tiempo de servicio es \(exp(\mu)\) y hay \(s\) servidores. En este caso la población potencial y la capacidad de la cola son infinitas y la disciplina de la cola es FIFO.

Las tasas de llegadas vienen dadas por

\[\lambda_n = \lambda, \text{ para } n = 0, 1,...\] y las tasas de servicio

\[\mu_n = \begin{cases} n\mu & \text{ si } n = 1, 2,...,s\\ s\mu & \text{ si } n = s+1, s+2,... \end{cases} \]

con ratio de ocupación

\[\rho = \frac{\lambda}{\mu s}\]

A partir de las ecuaciones de equilibrio podemos obtener la relación entre tasas de llegadas y servicio:

\[ c_n = \begin{cases} \frac{\lambda^n}{n!\mu^n} & \text{ si } n = 0, 1,...,s\\ \frac{\lambda^s}{s!\mu^s}\rho^{n-s} & \text{ si } n = s+1, s+2,... \end{cases} \]

La suma de la serie de los \(c_n\) será convergente (el sistema es estacionario) si \(\rho < 1\), es decir, \(\lambda < s\mu\).

Ejemplo 5.1 En una determinada planta de fabricación, la operación final es una operación de pintura. En el centro de pintura siempre hay dos trabajadores que trabajan en paralelo, aunque debido a la configuración física, no pueden ayudarse mutuamente. Las llegdas al centro de pintura se producen según un proceso de Poisson con con una tasa de llegada media de 100 al día. Cada trabajador tarda una media de 27 minutos en pintar cada artículo. Últimamente, el exceso de trabajo en curso es motivo de preocupación, por lo que la dirección está considerando ampliar el centro de pintura y contratar a un tercer trabajador. (Se supone que el tercer trabajador, tras un periodo de formación, también tardará una media de 27 minutos por pieza). Otra opción sería comprar un robot para realizar la tarea de los trabajadores, ya que se sabe que el tiempo medio que tardará en cada pieza es de 10 minutos.

  • Analiza cada uno de los tres sistemas respecto de las medidas de eficiencia e indica que alternativa reduciría el inventario.
  • El coste del inventario (incluyendo la pieza que se está trabajando) se estima en 0,50 euros por pieza y hora. El coste por trabajador (salario y gastos generales) se estima en 40.000 euros al año, y el coste de instalación y mantenimiento de un robot se estima en 100.000 euros al año ¿Qué alternativa, si es que hay alguna, es justificable utilizando un criterio de coste esperado a largo plazo?

Se proponen tres sistemas de colas con las características siguientes (utilizando como unidad de tiempo las horas):

  • Situación 1. Cola \(M/M/2\) con \(\lambda = 100/24\) y \(\mu = 60/27\)
  • Situación 2. Cola \(M/M/3\) con \(\lambda = 100/24\) y \(\mu = 60/27\)
  • Situación 3. Cola \(M/M/1\) con \(\lambda = 100/24\) y \(\mu = 60/10\)

Para determinar que sistema mejoraría el estado del inventario utilizamos varias medidas relativas a cada uno de ellos:

  • ratio de ocupación,
  • probabilidad de que el sistema este ocupado,
  • tiempo medio de las piezas en el sistema.

Definimos los tres sistemas y obtenemos las medidas de interés. Para los sistemas \(M/M/s\) utilizaremos la función NewInput.MMC, donde el parámetro \(c\) indica el número de servidores. Generamos los tres sistemas:

# Parámetros de los sistemas
lambda <- 100/24
muk <- 60/27
mu1 <- 60/10

# M/M/2
env.MM2 <- NewInput.MMC(lambda = lambda, mu = muk, c = 2, n = 2)
s.MM2 <- QueueingModel(env.MM2)
# M/M/3
env.MM3 <- NewInput.MMC(lambda = lambda, mu = muk, c = 3, n = 2)
s.MM3 <- QueueingModel(env.MM3)
# M/M/1
env.MM1 <- NewInput.MM1(lambda = lambda, mu = mu1, n = 2)
s.MM1 <- QueueingModel(env.MM1)

Obtenemos y comparamos las diferentes medidas consideradas

# ratio de ocupación
c(s.MM2$RO, s.MM3$RO, s.MM1$RO)
## [1] 0.9375000 0.6250000 0.6944444
# Probabildid de que el sistema este ocupado
c(1-s.MM2$Pn[1], 1-s.MM3$Pn[1], 1-s.MM1$Pn[1])
## [1] 0.9677419 0.8677686 0.6944444
# Tiempo medio en el sistema
c(s.MM2$W, s.MM3$W, s.MM1$W)
## [1] 3.7161290 0.6049587 0.5454545

Desde el punto de vista de ratio de ocupación el mejor sistema sería el de tres trabajores, pero si utilizamos los otros dos criterios el mejor sistema sería el que utiliza el robot.

Hacemos ahora la evaluación de costes por hora teniendo en cuenta que cada año tiene 8760 horas (365*24). Para obtener los costes asociados debemos estimar el número de piezas en el sistema por hora para evaluar el coste total de inventario, ay añadir el coste de la mano de obra. En esta situación tenemos:

# Coste M/M/2
s.MM2$L*0.50 + 2*(40000/8760)
## [1] 16.87436
# Coste M/M/3
s.MM3$L*0.50 + 3*(40000/8760)
## [1] 14.95896
# Coste M/M/1
s.MM3$L*0.50 + (100000/8760)
## [1] 12.67586

Atendiendo a los costes, el modelo que utiliza el robot resulta en un menor coste por hora por lo que resulta el más beneficioso.

5.4.2 M/M/s/K

Es una generalización del modelo \(M/M/1/K\) en el caso en que haya \(s\) servidores. Las tasas de llegada son casi idénticas a las del modelo \(M/M/1\), mientras que las de servicio son exáctamente iguales a las de un \(M/M/s\):

\[\lambda_n = \begin{cases} \lambda \text{ para } n = 0, 1,..., K+s-1\\ 0 \text{ para } n = K+s, K+s+1,... \end{cases} \]

\[\mu_n = \begin{cases} n\mu & \text{ si } n = 1, 2,...,s\\ s\mu & \text{ si } n = s+1, s+2,... \end{cases} \]

con ratio efectivo de ocupación

\[\bar{\rho} = \frac{\bar{\lambda}}{\mu s}\]

Este sistema siempre es estacionario. A continuación, se presenta un ejemplo de este sistema donde se muestra la función que debemos usar para analiar este tipo de cola.

Ejemplo 5.2 Por razones técnicas, una centralita con dos operadoras sólo permite mantener tres llamadas en espera (de tal forma que cualquier llamada producida cuando ya hay dos siendo atendidas por las operadoras y otras tres en espera, recibe el tono de “línea ocupada”). Las llamadas llegan según un proceso de Poisson, a razón de 6 por minuto, siendo l5 segundos la media del tiempo que tarda cada operadora en direccionar una llamada y dicho tiempo de distribución exponencial. Calcular:

  • El porcentaje de tiempo en que cada operadora está ocupada y el número medio de servidores ocupados.
  • El número medio de llamadas en espera.
  • La probabilidad de que una llamada obtenga la señal de “línea ocupada.”
  • Calcular las tres cantidades anteriores bajo el supuesto de que se amplie a 5 las llamadas en espera.

Para el análisis de este sistema utilizamos la función NewInput.MMCK donde además de las tasas, debemos indicar el número de servidores, y la capacidad del sistema. Tomaremos como unidad de tiempo los minutos de forma que \(\lambda = 6\) y \(\mu = 60/15 = 4\). La capacidad del sistema es \(K = 5\) que se corresponde con dos llamadas atendidas y tres en espera. Se trata pues de un sistema \(M/M/2/5\).

# M/M/2/5
env.MM25 <- NewInput.MMCK(lambda = 6, mu = 4, c = 2, k = 5)
s.MM25 <- QueueingModel(env.MM25)

Veamos como responder a cada una de las cuestiones planteadas utilizando los resultados del sistema diseñado. para responder al primer apartado debemos obtener el ratio efectivo de ocupación, asi como la diferencia entre el número medio de clientes en el sistema y el número medio de clientes en la cola para determinar el número medio de servidores ocupados.

# Porcentaje de tiempo servidor ocupado
round(100*s.MM25$RO, 2)
## [1] 68.62
# Número medio de servidores ocupados
s.MM25$L - s.MM25$Lq
## [1] 1.372329

La ocupación de cada operadora es del 68.6% y el número medio de operadores ocupados es del 1.4. Con respecto al número medio de llamadas en espera tenemos:

# Número medio de llamadas en espera
s.MM25$Lq
## [1] 0.6336252

En cuanto a la probabilidad solicitada debemos calcular \(P(N_q = 3) = P(N = 5)\) que se obtiene como:

# Probabilidad de linea ocupada
s.MM25$Pn[6]
## [1] 0.08511384

Tan solo en un 8.5% de las ocasiones salta el mensaje de línea ocupada, es decir, el sistema esta ocupado al 100%.

Evaluamos ahora el incremento del tamaño de sistema aumentado las llamadas en espera.

# M/M/2/7
env.MM27 <- NewInput.MMCK(lambda = 6, mu = 4, c = 2, k = 7)
s.MM27 <- QueueingModel(env.MM27)
# Porcentaje de tiempo servidor ocupado
round(100*s.MM27$RO, 2)
## [1] 71.77
# Número medio de servidores ocupados
s.MM27$L - s.MM27$Lq
## [1] 1.435402
# Número medio de llamadas en espera
s.MM27$Lq
## [1] 1.014966
# Probabilidad de linea ocupada
s.MM27$Pn[8]
## [1] 0.04306559