El documento habla sobre el desarrollo de los lenguajes de simulación y simuladores. Explica que inicialmente se usaban lenguajes generales como FORTRAN pero que a partir de 1960 surgieron lenguajes específicos como GPSS, GASP y SIMSCRIPT. También describe cómo las interfaces gráficas revolucionaron el campo con el nacimiento de los simuladores. Resalta la importancia de seleccionar la herramienta adecuada para cada tipo de sistema a simular.
1. 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
2. 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?
3. 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.
4. 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
5. 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
6. EJEMPLO DE UN CASO DE SIMULACION
https://www.youtube.com/watch?v=FGgKyKAdIBE