martes, 23 de febrero de 2010

Caso 6: A la cola (o Viernes 15)

El caso de esta semana es presentado por:

http://www.youtube.com/watch?v=gJ9erPEfC2U
http://www.opti-stat.net/~alex/cgph/public_html/m4216/projsf97/mm1.html

El primer video es una noticia en la cual conductores de pipas de aguas negras se ven obligados a esperar entre 12 y 24 hrs para poder vaciar su pipa, y ante estos problemas hay quienes recurren a vaciarlas en lugares prohibidos.
El segundo link es un applet en el cual podemos ver la cantidad de personas que se encuentran en una linea de espera, y podemos cambiar los valores de la llegada de clientes y la velocidad en que son atendidos, así vemos que cuando llegan pocos clientes y el tiempo de servicio es muy corto no existe fila, o si es alrevez, tenemos una gran cantidad de clientes en la fila.

Para este caso se trasaron 4 metas:
1) Introducción de "Teoría de colas".
2) Distribuciones principales para teoria de colas.
3) ¿Cuando es necesario simular las colas?
4) Aplicaciones de teoria de colas.

Meta 1:
Introducción a Teoría de colas.
Como a todos nos ha pasado alguna ves, no hemos tenido que ver en la engorrosa y frustrante situación de hacer cola, ya sea en el supermercado, en la tienda de la esquina, a la hora de la repartición de las bolsitas en una fiesta, ¡en el banco en quincena! (el horroroso viernes 15), etc.

Si usted fuera el dueño de algun negocio, le importarian a menor o mayor grado sus clientes (despues de todo ellos son los del dinero), y no querría que estos tuvieran que esperar mucho tiempo para que alguien los atendiera (podrían irse con la competencia), pero claro, para poder atenderlos mas rapido necesitariamos mas maquinas/gente/cajeros/computadoras/mesas, y para tener estos USTED tendría que pagarlos, así que nos vemos en un problema, debemos poner la cantidad justa de maquinas/cajeros/gente/computadoras/mesas/etc. para que nuestros clientes no tengan que esperar mucho para ser atendidos Y que no sea muy costoso para nosotros.

Este es un de los problemas que nos planteamos cuando queremos analizar las propiedades de una cola con Teoria de colas.


Como ya todos hemos estado en una cola, muchas de las caracteristicas de una cola nos son familiares:

Fuente de entrada o población potencial: Es un conjunto de individuos (no necesariamente seres vivos) que pueden llegar a solicitar el servicio en cuestión. Podemos considerarla finita o infinita.
Cuando la población es finita y no relativamente muy grande, la cantidad de individuos que entran al sistema depende de la cantidad actual que estan en la cola.

Cliente: Es todo individuo de la población potencial que solicita servicio. Suponiendo que los tiempos de llegada de clientes consecutivos son 0<..., será importante conocer el patrón de probabilidad según el cual la fuente de entrada genera clientes.

Capacidad de la cola: Es el máximo número de clientes que pueden estar haciendo cola. De nuevo, puede suponerse finita o infinita.

Disciplina de la cola: Es el modo en el que los clientes son seleccionados para ser servidos. Las disciplinas más habituales son:
La disciplina FIFO (first in first out), también llamada FCFS (first come first served): según la cual se atiende primero al cliente que antes haya llegado. La disciplina LIFO (last in first out), también conocida como LCFS (last come first served) o pila: que consiste en atender primero al cliente que ha llegado el último. La RSS (random selection of service), o SIRO (service in random order), que selecciona a los clientes de forma aleatoria.

Mecanismo de servicio: Es el procedimiento por el cual se da servicio a los clientes que lo solicitan. La cola, propiamente dicha, es el conjunto de clientes que hacen espera, es decir los clientes que ya han solicitado el servicio pero que aún no han pasado al mecanismo de servicio.


Meta 2:
Distribuciones principales para teoria de colas
:
Con lo que hemos visto los unicos lugares en los cuales podemos pensar en distribuciones de probabilidad en una cola son:
El tiempo de llegada de los clientes y en el tiempo de servicio.

Existen dos clases básicas de tiempo entre llegadas:

Determinístico, en el cual clientes sucesivos llegan en un mismo intervalo de tiempo, fijo y conocido. Un ejemplo clásico es el de una línea de ensamble, en donde los artículos llegan a una estación en intervalos invariables de tiempo (conocido como ciclos de tiempo)

Probabilístico, en el cual el tiempo entre llegadas sucesivas es incierto y variable. Los tiempos entre llegadas probabilísticos se describen mediante una distribución de probabilidad.
En el caso probabilístico, la determinación de la distribución real, a menudo, resulta difícil. Sin embargo, una distribución, la distribución exponencial, ha probado ser confiable en muchos de los problemas prácticos.

El tiempo de servicio pude ser determinístico o probabilístico. Con un tiempo de servicio determinístico, cada cliente requiere precisamente de la misma cantidad conocida de tiempo para ser atendido. Con un tiempo de servicio probabilístico, cada cliente requiere una cantidad distinta e incierta de tiempo de servicio. Los tiempos de servicio probabilísticos se describen matemáticamente mediante una distribución de probabilidad. En la práctica resulta difícil determinar cuál es la distribución real, sin embargo, una distribución que ha resultado confiable en muchas aplicaciones, es la distribución exponencial.

Meta 3:
¿Cuando es necesario simular las colas?

La teoría de formación de una cola es a menudo demasiado restrictiva matemáticamente para ser capaz de modelar todas las situaciones verdaderas a nivel mundial. Por ejemplo; los modelos matemáticos a menudo asumen el número de clientes, o la capacidad de la cola infinitos, cuando es evidente que estos límites deben estar limitados.

Es cuando queremos conocer las caracteristicas de una cola con estas propiedades que es importante la simulación de una cola.

Meta 4:
Aplicaciones de teoria de colas

La teoría de colas generalmente es considerada una rama de investigación operativa porque sus resultados a menudo son aplicables en una amplia variedad de situaciones como: negocios, comercio, industria, ingenierías, transporte y telecomunicaciones.


Simulando una cola:
Para simular una cola necesitaremos:
Distribución en que llegan los clientes a la fila así como la media de esta distribución.
Distribución en que los clientes son atendidos, así como la media de esta distribución.

Para programar esto, lo mas natural es crear un vector en el cual tendremos a el tiempo que lleva el cliente en la cola, iremos dejando que pase el tiempo (discreto) y cuando un cliente sea atendido pues lo borramos de la cola, también tendremos una limitante en cuanto al número de clientes en la cola.

Ahora, si el lector ha sido fiel al blog talvez lo anterior hizo sonar algunas campanas, si no talvez le interese leer esto.
En el caso de las mariposas necesitabamos la tasa de natalidad de las mariposas, que seguía una distribución uniforme, la cantidad de mariposas no podía superar cierto limite (restricciones de espacio/comida), y la tasa de mortalidad de las mariposas.

Se realizo un programa que simulara una linea de espera y se corrieron varias instancias, el programa consistia en lo siguiente, se corria un loop para la cantidad de tiempo que el sistema estaría disponible (para las instancias que corrimos los tiempo estan los segundos), dentro de este loop primero se aumentaba en 1 el tiempo que llevaban los clientes en la cola y los que estaban siendo atendidos.
El proceso de llegadas de clientes se hacía con una distribución poisson con media lamnda, en la cual el valor lamnda es el número promedio de clientes que llegan en un tiempo dado.
Posteriormente si había servidores disponibles los clientes pasaban a estos y abandonaban la cola.
Luego me hubiera gustado que los servidores tubieran una distribución exponencial en cuanto al tiempo que tardaban en atender a los clientes, pero no se me ocurrio como lograr esto, lo que se hizo fue, se daba un parametro miu, que es el tiempo promedio en que se atiende a un cliente, para nuestro caso esto era dado en minutos, luego cada segundo, la probabilidad de que un cliente fuera atendido es de 1/(60*miu) (si se tardaba en promedio miu=1, en promedio esta probabilidad atenderia a un cliente cada minuto).

Como es demasiada información el poner como se fue dando la cola, solo se agregan ciertos datos relevantes.

lamnda = 2
Miu = 0.5
Servidores = 2
Maximacola = 60
tiempo = 100000 segundos ( 27 hrs)
promedio de clientes en la cola = 0.2772
Tiempo de espera promedio en la cola = 0.1549 (en minutos)

lamnda = 2
Miu = 0.75
Servidores = 2
Maximacola = 60
tiempo = 100000 segundos ( 27 hrs)
promedio de clientes en la cola = 1.4036
Tiempo de espera promedio en la cola = 0.7277 (en minutos)

lamnda = 2
Miu = 0.85
Servidores = 2
Maximacola = 60
tiempo = 100000 segundos ( 27 hrs)
promedio de clientes en la cola = 4.5065
Tiempo de espera promedio en la cola = 2.294 (en minutos)

lamnda = 2
Miu = 0.85
Servidores = 2
Maximacola = 60
tiempo = 1500000 segundos ( 416 hrs)
promedio de clientes en la cola = 5.7208
Tiempo de espera promedio en la cola = 2.88 (en minutos)

lamnda = 2
Miu = 0.89
Servidores = 2
Maximacola = 60
tiempo = 100000 segundos ( 27 hrs)
promedio de clientes en la cola = 6.1451
Tiempo de espera promedio en la cola = 3.2037 (en minutos)

lamnda = 2
Miu = 0.89
Servidores = 2
Maximacola = 60
tiempo = 900000 segundos
promedio de clientes en la cola = 6.177
Tiempo de espera promedio en la cola = 3.1145 (en minutos)

lamnda = 2
Miu = 0.89
Servidores = 2
Maximacola = 60
tiempo = 1500000 segundos
promedio de clientes en la cola = 6.4362
Tiempo de espera promedio en la cola = 3.2425 (en minutos)

De estas instancias podemos darnos cuenta que algo no salio bien :S
Si llegan 2 clientes por minuto y se atiende a un cliente en menos de un minuto y se cuentan con 2 servidores, uno esperaria que no existiera mucha cola.
Por eso realice para mismos parametros corridas de mayor tiempo, para con esto quitar la idea de que pudieron ser problemas con la aleatoriedad (un caso raro en que lleguen muchos clientes a la ves).

Aunque hay algo mal, podemos ver que en general los resultados siguen hasta cierto punto la tendencia esperada, entre mas tiempo se tarda en atender a un cliente mayor es la fila que se forma.

Cosas que se pueden agregar al programa son, que diferentes servidores tengan diferentes tiempos para servicio a cliente (alguien que apenas esta aprendiendo tarda mas)
Agregar redes de colas, en las cuales el cliente al terminar su primer servicio no necesariamente salga del sistema, si no que pase a otra cola.
Permitir la especificación en la distribución de llegadas de los clientes y en el de tiempo de servicio.
Así como permitir que el cliente que llegue no entre a la cola (si ves mucha cola en el banco mejor no entras)
Y que los clientes se fastidien de estar haciendo cola y se vallan.

No hay comentarios:

Publicar un comentario