Descargar el fichero: colas.xlsx
La Teoría de colas es una especialidad de la Investigación Operativa que nos permite estudiar el comportamiento de servicios atendidos en los que se producen esperas. Es el caso típico de una cola en un banco, o un microprocesador que debe atender una lista de trabajos. En este artículo vamos a considerar un servicio médico de una consulta donde un único médico ha de atender a una serie de pacientes que llegan a lo largo de la mañana. Se trata de determinar mediante Simulación de Montecarlo los usuarios que se encuentran en la cola en cada momento.
En primer lugar hemos de recoger datos. Realizamos un estudio observando dos variables:
- Datos históricos de tiempo entre llegadas (minutos)
- Datos de tiempos de servicio (minutos)
Organizamos esta información en forma de tabla de frecuencias.
Necesitaremos generar una serie de números aleatorios para poder efectuar la simulación de Montecarlo.
Con la información anterior procedemos a crear la tabla de la Hoja2.
Trabajamos con el formato de celda personalizado h:mm. El inconveniente que tiene esta forma de trabajar es que en realidad Excel trabaja con decimales. Así un minuto que en este formato sería 0:01 si lo mostramos en formato general arroja un valor de 0,000694444444444444. Esto supone que al establecer igualdades o desigualdades es frecuente obtener errores. Por ejemplo, si queremos saber si dos celdas contienen el mismo valor expresado en horas y minutos (hh:mm) es posible que veamos lo mismo, por ejemplo 0:23 (que son 23 minutos), pero si lo tuviéramos en formato general es posible que difieran en el último decimal y esto hace que Excel nos diga que no son iguales, lo cual acarrea errores importantes en nuestros cálculos finales.
Para evitar estos errores hemos creado las columnas K y L (de color azul) que en realidad son las mismas que las columnas D e I, pero con un redondeo a 7 decimales. De esta forma podemos comparar tiempos sin estar preocupados por el error del último decimal.
La columna que realmente supone una explicación detallada es la última columna que determina el número de usuarios que hay en la cola en cada momento.
Tomemos como ejemplo la celda M20 cuya fórmula es:
{=SUMA(--(K20<=($L$6:L19)))}
Los corchetes indican que es una fórmula matricial. Los corchetes no debemos ponerlos nosotros, los pondrá Excel al validar la expresión. Después de escribir la fórmula no debemos pulsar ENTER para validarla, sino que, por tratarse de una fórmula matricial, se han de pulsar simultáneamente las tres teclas siguientes:
CONTROL+MAYUSCULAS+ENTER
Para ampliar información sobre fórmulas matriciales puede consultar el siguiente post:
La celda M20 calcula cuantos usuarios hay en la cola en ese momento. Esto se hace considerando cuantos usuarios previos a él aún no han salido de la consulta cuando el llega.
Simulación de Montecarlo
Los aleatorios que se presentan en este ejemplo no cambian, esto es, no se generan nuevos aleatorios. Si quisiéramos efectuar el método de simulación de Montecarlo de una forma más dinámica deberíamos generar nuevos aleatorios, y con ellos calcular las diferentes filas de esta tabla. Cuantos más aleatorios generemos mejor establecidas quedaran luego las medias de tiempos de espera y usuarios en cola que es lo que realmente deseamos estudiar con estos casos.
Escelente. Muchas gracias!!!
ResponderEliminarMuy interesante, mil gracias.
ResponderEliminar30 de julio 2011
Buen aporte muchas gracias, para estudiar y analizar.
ResponderEliminarmuchas gracias
Buenas me podrian explicar la logica de la formula matricial, quisiera saber su funcionamiento
ResponderEliminarY si tengo multiples servidores, digamos 3.
ResponderEliminarBuen aporte, como calculo cuantas posiciones de atencion deberia tener? si ya tengo la cantidad de clientes promedio por dia y hora, tiempos de atencion y espera promedios? puedo usar solver para realizar este dimensionamiento? Gracias.
ResponderEliminarPor que la formula lleva esos dos -- después de primer (
ResponderEliminary podría por favor explicarnos el significado de la formula, por ejemplo el valor de la celda c312 se compara, se suma, etc?
=SUMA(--(C312<=($E$2:E312)))
Gracias y saludos.
Hola Alf.
EliminarLos dos signos menos se ponen para multiplicar por (-1) dos veces, esto lo que hace es convertir la desigualdad en numérica. Otro método sería multiplicar por 1, así:
{=SUMA(1*(K20<=($L$6:L19)))}
Hola Alf.
ResponderEliminarLa fórmula lleva los signos -- que son dos signos menos seguidos. Uno de ellos multiplica por -1, para convertir en numéricos los Verdaderos y Falsos. El otro menos vuelve a multiplicar por -1 para evitar signos negativos. El resultado es que tenemos un array lleno de números unos y ceros en lugar de Verdaderos y Falsos.
La fórmula empleada es una fórmula matricial. Véanse las llaves {}. Es aconsejable ver la Etiqueta, en este mismo blog, denominada 'función matricial'.
Un saludo.
Muchisimas gracias, ahora si lo entiendo, fuerte abrazo!
ResponderEliminarHola Adolfo... la expresión de la fórmula matricial simplificada que tienes, se podría plantear así?
ResponderEliminar=SUMA((K20<=($L$6:L19))*(K20<=($L$6:L19)))
Felicitaciones por tu blog...
Gracias
Hola Manuel.
EliminarLa formula que planteas funciona perfectamente ya que hace lo que necesitamos que es convertir en numéricos los VERDADEROS y FALSOS que proporciona la desigualdad (K20<=($L$6:L19))
Para conseguir convertir esa desigualdad en numérica lo que se plantea en la hoja de cálculo es multiplicar por (-1) dos veces, esto se consigue metiendo un par de signos menos delante, así:
--(K20<=($L$6:L19))
Luego se suma y se convierte en una fórmula matricial validando con CONTROL+SHIFT+ENTER
Un saludo.
Estimado Adolfo
ResponderEliminarMuchas gracias de antemano por compartirnos tus conocimientos y experiencias en Excel. Estuve trabajando en opciones distintas a las funciones matriciales y llegué a esto:
=CONTAR.SI($L$6:L6;">="&K7)
Te agradecería si me puedes compartir tus opiniones al respecto.
Cordialmente,
Edgar
Estimado Edgar.
EliminarLa fórmula que has ideado funciona estupendamente.
Felicidades por el aporte.
Muchas gracias a ti Adolfo por este espacio para el aprendizaje.
EliminarSaludos.
profesor buenas noches le pregunto si fueran con 2 o mas servidores como lo podria hacer ?
ResponderEliminarA lo largo de toda la carrera esta pagina me ha servido mucho, tanto para resolver problemas academicos, como para resolver problemas laborales.
ResponderEliminarSaludos y muchas gracias.
Este comentario ha sido eliminado por el autor.
ResponderEliminarMuchas gracias don Adolfo.
ResponderEliminarCómo trabajar para un sistema multicanal o de varios servidores?