LENGUAJE DE SIMULACION Y SIMULADORES En un principio, los programas de simulación se elaboraban utilizando algún lenguaje de propósito general, como ASSEMBLER, FORTRAN, ALGOL o PL/I. A partir de la década de 1960 hacen su aparición los lenguajes específicos para simulación como GPSS, GASP, SIMSCRIPT, SLAM. En la última década del siglo pasado la aparición de las interfaces gráficas revolucionaron el campo de las aplicaciones en esta área, y ocasionaron el nacimiento de los simuladores. En lo práctico, es importante utilizar la aplicación que mejor se adecúe al tipo de sistema a simular, ya que de la selección del lenguaje o simulador dependerá el tiempo de desarrollo del modelo de simulación. Las opciones van desde las hojas de cálculo, lenguajes de tipo general (como Visual Basic, C++ o Fortan), lenguajes específicos de simulación (como GPSS, SLAM, SIMAN, SIMSCRIPT, GAS y SSED), hasta simuladores específicamente desarrollados para diferentes objetivos (como SIMPROCESS, ProModel, Witness, Taylor II y Cristal Ball). APRENDIZAJE Y USO LENGUAJE DE SIMULACIÓNO SIMULADOR Los lenguajes de simulación facilitan enormemente el desarrollo y ejecución de simulaciones de sistemas complejos del mundo real. Los lenguajes de simulación son similares a los lenguajes de programación de alto nivel pero están especialmente preparad os para determinadas aplicaciones de la simulación. Así suelen venir acompañados de una metodología de programación apoyada por un sistema de símbolos propios para la descripción del modelo por ejemplo mediante diagramas de flujo u otras herramientas que simplifican notablemente la modelización y facilitan la posterior depuración del modelo. Características de los lenguajes de simulación: Los lenguajes de simulación proporcionan automáticamente las características necesarias para la programación de un modelo de simulación, lo que redunda en una reducción significativa del esfuerzo requerido para programar el modelo. Proporcionan un marco de trabajo natural para el uso de modelos de simulación. Los bloques básicos de construcción del lenguaje son mucho más afines a los propósitos de la simulación que los de un lenguaje de tipo general. Los modelos de simulación son mucho más fácilmente modificables. Proporcionan muchos de ellos una asignación dinámica de memoria durante la ejecución Facilitan una mejor detección de los errores. Los paquetes de software especialmente diseñados para simulación contienen aplicaciones diversas que facilitan al simulador las tareas de comunicaciones, la depuración de errores sintácticos y de otro tipo de errores, la generación de escenarios, la manipulación “on-line” de los modelos, etc. Son muy conocidos y en uso actualmente Aprendizaje lleva cierto tiempo Simuladores de alto nivel Muy fáciles de usar por su interface gráfica Restringidos a las áreas de manufactura y comunicaciones Flexibilidad restringida puede afectar la validez del modelo CASOS PRACTICOS DE SIMULACIÓN Un caso práctico de una simulación podemos decir en esta parte, la simulación del Método de Monte Carlo. ALGORITMOS El algoritmo de Simulación Monte Carlo Crudo o Puro está fundamentado en la generación de números aleatorios por el método de Transformación Inversa, el cual se basa en las distribuciones acumuladas de frecuencias: Determinar la/s V.A. y sus distribuciones acumuladas(F) Generar un número aleatorio uniforme Î (0,1). Determinar el valor de la V.A. para el número aleatorio generado de acuerdo a las clases que tengamos. Calcular media, desviación estándar error y realizar el histograma. Analizar resultados para distintos tamaños de muestra. EJEMPLO PRACTICO I Tenemos la siguiente distribución de probabilidades para una demanda aleatoria y queremos ver qué sucede con el promedio de la demanda en varias iteraciones: Utilizando la distribución acumulada (F(x) es la probabilidad que la variable aleatoria tome valores menores o iguales a x) podemos determinar cuál es el valor obtenido de unidades cuando se genera un número aleatorio a partir de una distribución continua uniforme. Este método de generación de variable aleatoria se llama Transformación Inversa. Generando los valores aleatorios vamos a ver como se obtiene el valor de la demanda para cada día, interesándonos en este caso como es el orden de aparición de los valores. Se busca el número aleatorio generado en la tabla de probabilidades acumuladas, una vez encontrado (si no es el valor exacto, éste debe ser menor que el de la fila seleccionada pero mayor que el de la fila anterior), de esa fila tomada como solución se toma el valor de las unidades (Cuando trabajamos en Excel debemos tomar el límite inferior del intervalo para busca en las acumuladas, para poder emplear la función BUSCARV (), para 42 sería 0, para 43 0,100001 y así sucesivamente). Ejemplo: Supongamos que el número aleatorio generado sea 0,52, ¿a qué valor de unidades corresponde? Nos fijamos en la columna de frecuencias acumuladas, ese valor exacto no aparece, el siguiente mayor es 0,70 y corresponde a 48 unidades. Se puede apreciar mejor en el gráfico, trazando una recta desde el eje de la frecuencia hasta que intersecta con la línea de la función acumulada, luego se baja a la coordenada de unidades y se obtiene el valor correspondiente; en este caso 48. Cuando trabajamos con variables discretas la función acumulada tiene un intervalo o salto para cada variable (para casos prácticos hay que definir los intervalos y luego con una función de búsqueda hallar el valor). Para funciones continuas se puede hallar la inversa de la función acumulada. De esta forma logramos a partir de la distribución de densidad calcular los valores de La variable aleatoria dada. En la siguiente tabla, vemos como a medida que aumenta el número de simulaciones, el valor simulado se acerca al valor original de la media y desviación estándar, además de la disminución del error típico. PROBLEMAS CON LINEA DE ESPERA Simulación de una línea de espera con una fila y un servidor Un sistema de colas estara definido cuando tengamos la siguiente informacion acerca de este: Distribucion de probabilidad de los tiempos de servicio Distribucion de probabilidad de los tiempos entre llegadas Numero de servidores Numero de filas Conexiones entre servidores y filas Disciplinas y restricciones de los servidores y filas (en caso de que existan) Para este primer ejemplo se utilizara el modelo de lineas de espera que se muestra en la figura siguiente. Como se puede apreciar, es un modelo bastante simple donde la disciplina de atención es FIFO (primero en llegar, primero en salir). Tanto el tiempo de servicio como el tiempo entre llegadas siguen una distribucion exponencial aunque con parametros diferentes, para el caso del tiempo entre llegadas tenemos λ=15 y para el tiempo de servicio tenemos λ=10. Aplicando el metodo de la transformada inversa a la distribucion exponencial (consultar Dyner etc. al, 2008), tenemos que: Donde corresponde a una observación de una variable exponecial, _ es un numero aleatorio entre cero y uno y λ es la media de la distribucion. Para la implementacion del sistema descrito en Excel, abra una nueva hoja de calculo y configurela como se muestra en la figura. En la celda B8 escriba la formula =ALEATORIO() y arrastre hasta la celda B23. Repita este procedimiento para la columna G. En el paso anterior, se definio los numeros aleatorios a partir de los cuales se generaran las observaciones de variables aleatorias de la simulacion. Ahora, en la celda C8 escribe la formula =-LN(1-B8)/$B$4, y arrastre hasta la celda C23. Como se puede apreciar, esta es la formula descrita anteriormente para obtener observaciones de una variable exponencial. En este caso, se estan generando observaciones para la variable aleatoria de tiempos entre llegadas. En la celda D8 escribe la formula =C8, lo anterior significa que como es la primera llegada al sistema, su tiempo de llegada (en el instante de tiempo en el que llego al sistema), sera igual a su tiempo entre llegadas. Sin embargo, para la celda D9 la formula correspondiente es =C9+D8, ahora arrastre la fórmula de D9 hasta D23; esta fórmula significa que despues de que llega el primer cliente, el instante de tiempo en el que cualquier otro cliente llega al sistema sera el instante de tiempo en el que entro el penúltimocliente sumado el tiempo entre llegadas del último cliente, es decir, si el penultimo cliente entro al sistema en el instante t=4, y el tiempo entre llegadas del ultimo cliente es dt=2, entonces este último cliente entrara realmente al sistema en t=6. La fórmula correspondiente a la celda E8 es =D8, esto significa que, al ser primer cliente, el instante en el que llega al sistema sera el mismo instante en el que comienza el servicio; más adelante se presenta las formulas correspondientes al resto de clientes del sistema en esta columna. Ahora en la celda F8 escriba la formula =E8-D8 y arrastrela hasta la celda F23, esto corresponde al tiempo de espera del cliente antes de comenzar a ser atendido, note que D8 nunca sera mayor que E8 ya que el valor minimo que puede tomar el tiempo de comienzo del servicio es el tiempo de llegada, es decir, cuando un cliente llega al sistema y no tiene que hacer fila. En la celda H8 escribe la formula =-LN (1-G7)/$B$5, y arrastre la hasta la celda H23, esta fórmula indica cuanto tiempo tardara el servidor atendiendo al cliente actual. Ahora en la celda I8 escriba la formula =E8+H8, esta fórmula indica el instante de tiempo en el que servidor termina de atender al cliente actual y corresponde a la suma entre el instante que comienza el servicio y la cantidad de tiempo que este toma. Retomemos ahora la columna E, nótese que esta solo está definida en su posición E8, esto porque primero se requería definir otros valores antes de poder determinar el instante en el que empieza realmente el servicio. En un sistema como el aquí presentado se pueden tener dos casos para el tiempo de comienzo del servicio, en primer lugar puede que el servidor se encuentre desocupado, en este caso el tiempo de comienzo del servicio será igual al tiempo de llegada al sistema y no habrá tiempo de espera. Sin embargo, si el servidor se encuentra ocupado, el tiempo de comienzo del servicio será igual al máximo entre el instante en que el servidor termine de atender al cliente actual y el tiempo de llegada al sistema; por si el tiempo de fin del servicio del cliente actual es igual a tfs=12 pero el tiempo de llegada del próximo cliente es tll=14, el tiempo de comienzo del servicio del proximo cliente será t=14 y el servidor tendra un ocio dt=2; por otro lado, si tfs=13 para el cliente actual y el proximo cliente tiene un tll=10, el servidor no tendra ocio y el proximo cliente deberá esperar un intervalo de tiempo dt=3. De lo anterior se concluye que la fórmula para la celda E9 debe ser =MAX (D9;I8), ahora arrastre esta fórmula hasta la celda E23. Hasta este punto se tiene una simulacion de un sistema de líneas de espera con una fila y un servidor, si se desea generar nuevas observaciones presione la tecla F9; como tarea al lector se deja el cálculo de: • Tiempo promedio en el sistema • Tiempo promedio de espera (sin incluir ceros) • Tiempo promedio de espera (incluyendo ceros) • Tiempo promedio de servicio • Tiempo promedio de ocio Adicionalmente se plantea al lector elaborar, una simulacion en Excel que represente el sistema que se muestra en la figura siguiente, donde p es la probabilidad de que un cliente se dirija a S1 o a S2. Tanto el tiempo entre llegadas como los tiempos de servicio, se distribuyen exponencial con los parámetros que se muestran a continuación. Tiempo entre llegadas: λ=8 Tiempo de servicio S1: λ=13 Tiempo de servicio S2: λ=18 Probabilidad p: 0.63 EJEMPLO DE UN CASO DE SIMULACION Please download full document at www.DOCFOC.com Thanks