340 likes | 567 Views
Simulación Dr. Ignacio Ponzoni. Clase V: Números Pseudo-Aleatorios y Variables Aleatorias Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Año 2006. Aleatoriedad en Modelos de Simulación.
E N D
SimulaciónDr. Ignacio Ponzoni Clase V: Números Pseudo-Aleatorios y Variables Aleatorias Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Año 2006
Aleatoriedad en Modelos de Simulación • El uso del concepto de aleatoriedad es empleado en Simulación para modelar dos tipos de situaciones: • Fenómenos que se aprecian “realmente” como aleatorios. • Por ejemplo: el resultado de tirar un dado o girar la rueda de una ruleta, etc. • Situaciones que se asumen como aleatoria por falta de mayor información, a fin de simplificar la lógica del modelo de simulación. • En estos casos, la variable podría ser calculada determinísticamente, pero modelarla como tal implica un costo que no se justifica en función de la calidad de los resultados de la simulación.
Secuencias de Números Aleatorios Uniformemente Distribuidos • Propiedades de los números aleatorios: • Una secuencia R1, R2, ..., de números aleatorios debe satisfacer dos propiedades fundamentales: • Uniformidad: los números de la secuencia siguen una distribución continua uniforme con valores comprendidos entre 0 y 1. • Independencia: cada valor Ri de la secuencia es independiente de los restantes valores Rj de la secuencia.
Números Pseudo-Aleatorios • Se denominan números pseudo-aleatorios a los números “aleatorios” generados utilizando una computadora. • La aleatoriedad o azar es simulada mediante técnicas computacionales que intentan generar secuencias de números entre 0 y 1 que respeten las propiedades de los verdaderos números aleatorios.
¿Problemas con la Generación de Números Pseudo-Aleatorios? • Los números generados pueden no estar uniformemente distribuidos. • Los números generados pueden estar discretamente valuados en vez de continuamente valuados. • La media de los números generados puede ser muy alta o muy baja. • La varianza de los números generados puede ser muy alta o muy baja. • Puede haber dependencias: • Autocorrelación entre números. • Números sucesivamente altos o bajos en posiciones adyacentes de la secuencia. • Varios números por debajo de la media seguidos de varios números por encima de la media.
Características deseables en una subrutina para generación de números aleatorios • Confiabilidad, la secuencia debe cumplir en forma muy cercana las propiedades de los números aleatorios. • Eficiencia, bajos run-times para generar secuencias aleatorias. • Portabilidad, es necesario poder contar con un generador de números aleatorios cuya confiabilidad no dependa de la arquitectura de la máquina o del sistema operativo utilizado. • Ciclos largos, la secuencia de números aleatorios debe ser lo más extensa posible antes de empezar a repetir valores. • Replicabilidad, para muchos experimentos es necesario poder efectuar corridas con la misma secuencia aleatoria. Uso de semillas.
Técnicas para Generación de Números Aleatorios • Método Congruencial Lineal • Este método genera una secuencia de m números siguiendo la siguiente relación recursiva: Ni+1= (a * Ni+ c) mod m con i = 0, 1, 2..., n • Si c 0 se denomina método congruencial mixto. • Si c = 0 se denomina método congruencial multiplicativo. • Los Ni pertenecen al intervalo (0,m-1). • La selección de a, c y m afectan drásticamente a la longitud del ciclo y las propiedades estadísticas. • Es posible combinar varios generadores congruenciales lineales.
Generadores Congruenciales • Supongamos que a = 3, c = 1, m = 5 y N0 = 4. • El generador sería: Ni+1= (3*Ni+1) mod 5 • Luego, la secuencia obtenida por el generador es: Hay un ciclo tal que Ni = Ni+4 . El número aleatorio entre 0 y 1 se obtiene dividiendo Ni por m.
Generadores Congruenciales Multiplicativos • Siempre que c = 0, el generador posee la siguiente forma: Ni+1 = (3*Ni ) mod m i=0, 1, …, n • Para asegurar la máxima longitud periódica de la secuencia, m y N0 deben ser primos entre sí. • La forma más sencilla de asegurar esto para cualquier semilla N0 es utilizar un número primo para m. • Para arquitecturas con aritmética de 32-bits el generador más empleado posee: a = 16.807 y m = 231-1 = 3.147.483.647
Mejoras de los Generadores • Generadores Multiplicativos Recursivos • Este método genera cada valor de la secuencia como una combinación lineal de los valores que le preceden: Ni-1 =(a1Ni+a2Ni-1+…+atNi-t-1)mod m • Un generador de este tipo que ha demostrado poseer muy buenas propiedades estadísticas es: Ni-1 = (107.374.182*Ni+104.104.480*Ni-4 ) mod (231-1)
Mejoras de los Generadores • Shuffling Este enfoque emplea un generador composicional y mezcla la salida. Este enfoque resulta apropiado en generadores para aritmética de 16-bits los cuales poseen un período de secuencia inherentemente corto. Considere dos generadores congruenciales multiplicativos, g1 y g2. Luego: 1º)Complete un vector V con los primeros k valores obtenidos con g1, es decir, V = (V1 , V2 , …, Vk ). 2º) Use g2 para generar un valor entero i entre 1 y k. 3º) Seleccione el i-ésimo valor de V como el valor aleatorio. 4º) Genere un valor aleatorio con g1 y sustituya Vi por ese valor. 5º) Si es necesario generar otro número aleatorio, vuelva a 2º).
Test para Números Aleatorios • Existen varios test tendientes a establecer si una secuencia de números pseudo-aleatorios respeta las propiedades de los números aleatorios: • Tests de Frecuencia • Tests de Corridas • Tests de Autocorrelación • Tests de Gap • Tests de Poker
Test para Números Aleatorios • Algunos de estos test se aplican a la secuencia de números aleatorios reales {Ui } y otros a la secuencia de números aleatorios enteros {Ni }. • Dado que muchas veces los {Ni } no están disponibles cuando los test se deben hacer para números enteros, se construye una secuencia auxiliar {Yi } formada por números enteros entre (0,d-1). • En estos casos, cada Yi se computa como la parte entera de d*Ui .
Tests de Frecuencia • Este test evalua la uniformidad de la distribución de los valores en la secuencia. • Generalmente se utiliza los test de Kolmogorov-Smirnov o el Test Chi-Cuadrado para comparar la frecuencia con que aparece cada valor en la secuencia respecto de la frecuencia esperada para dicho valor. • El test puede ser realizarse tanto sobre los {Ui} como para los {Yi}. • Si el test es superado, entonces podemos afirmar, con cierto grado de certeza, que los valores siguen una distribución uniforme.
Tests de Corridas • Corridas descendentes y ascendentes • Este test determina la existencia o no de subsecuencias crecientes o decrecientes dentro de la secuencia aleatoria. • Si dichas secuencias existen, entonces la propiedad de independencia de los valores no se verifica para el generador de números aleatorios.
Tests de Corridas • Corridas por debajo y arriba de la media • Este test determina la existencia o no de subsecuencias de números por debajo o por encima de la media. • Nuevamente, si dichas secuencias existen, entonces la propiedad de independencia de los valores no se verifica para el generador de números aleatorios.
Tests de Autocorrelación • Este test analiza la independencia entre los números de la secuencia tratando de detectar la existencia de alguna correlación entre los valores generados. • Estos tests requieren el cómputo de correlaciones entre los valores comprendidos cada m posiciones de la secuencia comenzando desde una posición i. • Estas técnicas a veces pueden llegar a determinar una correlación cuando en realidad no existe.
Test de Gap • Este test analiza el intervalo o “gap” entre la repetición de un dígito y su próxima aparición buscando detectar un patrón general que invalide la propiedad de independencia. • Para aplicar a números aleatorios entre 0 y 1, {Ui}, se efectúa una discretización por clases. 0 = [0,0.1), 1 = [1,0.2), ...
Test de Poker • Este tipo de test también busca verificar la propiedad de independencia analizando cómo se repiten los dígitos a lo largo de los números que forman la secuencia pseudo-aleatoria. • Por ejemplo, en la siguiente secuencia todos los números repiten dos dígitos: 0.255 0.577 0.331 0.414 0.828 0.909 0.001 … Con lo cual se concluye que no hay independencia entre los números de la secuencia .
Generación de Variables AleatoriasDistribuciones Uniformes • Los generaradores congruenciales obtienen secuencias de números aleatorios distribuidos uniformemente entre 0 y 1. • La cuestión es cómo generar valores aleatorios que sigan otras distribuciones. • Si se necesita generar valores de una distribución uniforme con un intervalo (a,b) diferente a (0,1), una técnica sencilla consiste en obtener un valor aleatorio r entre 0 y 1, y luego calcular el valor aleatorio como a+ (b-a)* r
Generación de Variables AleatoriasDistribuciones No Uniformes • Cuando el valor aleatorio a generar no sigue una distribución uniforme, es necesario emplear otras técnicas. • Dentro de las técnicas más empleadas están: • El método de la transformación inversa. • Métodos especiales: • El método de aceptación y rechazo • El enfoque de convolución • Transformación directa entre normal y lognormal • otros...
Técnica de la Transformada Inversa • Este método explota las propiedades de las funciones de acumulación de probabilidades de las distribuciones. • Dado que las funciones acumulativas son incrementales, en general estas poseen inversa. Es decir, dado un valor aleatorio r entre 0 y 1 existe un único valor x tal que F(x) = r. • Luego, dado una valor r entre 0 y 1, el valor aleatorio x se puede obtener como: x = F-1(r)
Método de la Transformación InversaInterpretación Gráfica en Curvas de Acumulación
Método de la Transformación InversaInterpretación Gráfica en Áreas
Método de la Transformación InversaFunciones de Búsqueda en Excel
Método de la Transformación InversaDistribución Exponencial
Método de Aceptación-Rechazo • Este método es aplicable a cualquier variable aleatoria con distribución continua que posea una función de densidad de probabilidad con rango bien definido, pero cuya función de distribución de probabilidad acumulativa no pueda ser expresada mediante integración directa.
M f(x) 0 a b x Método de Aceptación-Rechazo • Considere una variable aleatoria X, cuya función de densidad de probabilidad f(x) es tal que: 0 f(x) M para a x b y f(x) = 0 para cualquier otro caso y sean R y S son dos variables aleatorias con distribución uniforme continua tales que los ri (a,b) y los si (0,M). (rj ,sj ) rechazado pues sj > f(rj ) . (rk ,sk ) aceptado pues sk f(rk ) .
Método de Aceptación-Rechazo Desde un punto de vista práctico, la generación de un valor aleatorio siguiendo este método se implementa como sigue: 1º) Se calcula una constante c tal que c*f(x) 1 para a x b 2º) Se obtienen dos valores aleatorios u1 y u2 uniformemente distribuidos entre (0,1). 3º) Se calcula x = a +u1*(b-a) 4º) Si u2 c*f(x), se acepta el par (u1 ,u2 ) y se retorna x como valor aleatorio, en caso contrario el par es rechazado y se vuelve al paso 2º).
Recomendaciones • Lectura recomendada para los temas vistos en clase: • Capítulo 11 del libro Computer Simulation in Management Science de Michael Pidd. • Capítulos 7 y 8 del libro Discrete-Event System Simulation de Banks, Carson, Nelson y Nicol • Ejercitación propuesta: • Trabajo Práctico 3: Nociones Básicas de Probabilidad y Generación de Números Aleatorios.