Variables Uniformes Generadores de variables aleatorias uniformes Patricia Kisbye FaMAF 7 de marzo, 008 En simulación se utilizan: en forma directa, para generar distribuciones discretas y continuas, para generar conjuntos de variables aleatorias dependientes (procesos estocásticos y/o distribuciones multivariadas). Para qué se utilizan? Propiedades buscadas Simulación. Muestreo. Análisis numérico. Testeo de programas. Juegos de azar. Toma de decisiones. Una secuencia de números U, U,..., U N es una muestra de tamaño N de U(0, ) si: son independientes. son uniformes. Un generador de v.a. uniformes debe cumplir: repetibilidad y portabilidad, y velocidad computacional.
Un poco de historia Un ejemplo Secuencia de von Neumann (946): X 0 : número de 5 dígitos. (000) Procedimientos físicos (monedas, dados, bolilleros,... ). (97) Tipett: tabla de 40000 dígitos aleatorios (no uniformes). (99) Kendall y Babbington: dispositivo mecánico. Tabla de 00.000 números aleatorios. (955) Rand Corporation: ruido electrónico. Tabla de millón de números aleatorios. X i : escrito con diez dígitos. (000900600) X i+ : 5 dígitos centrales. (09006) 4 Volver a 00, 9006, 808, 78507, 649, 095, 7479, 9474, 5440 000, 4000, 8000, 6000, 000... con 4 dígitos: 79, 79, 79, 79,... Principios generales Generador congruencial lineal La secuencia generada debe ser intuitivamente aleatoria. Esa aleatoriedad debe ser establecida teóricamente o, al menos, debe pasar ciertos tests de aleatoriedad. La aleatoriedad de una secuencia jamás debe ser asumida sin esas verificaciones. Debe conocerse algo sobre las propiedades teóricas del generador. y 0 : semilla y i =(ay i + c) mod M, i, a: multiplicador c: incremento M: módulo x i = y i, secuencia en el [0, ). M generador mixto: c 0 generador multiplicativo: c = 0.
Propiedades Un ejemplo con M primo Secuencia con período de longitud máxima acotada por M o M. Repetibilidad. Portabilidad? Elección apropiada de a, c y M. El generador multiplicativo: c = 0 M = a = 6807 M = = 7 5, M: es un primo de Mersenne. 7: raíz primitiva, (5, M ) =, implica que 7 5 = 6807 es raíz primitiva. secuencia de longitud máxima M = 4748646. M = k, c = 0 Elección de a, c y M Cota para M: representación de enteros en la computadora. Longitud de la secuencia: números primos, raíces primitivas. c = 0: longitud máxima M. c 0: longitud máxima M. M = k : longitud máxima k. (semilla impar) M = k : fenómeno de no aleatoriedad en dígitos menos significativos. y j = a j y 0 mod (M) secuencia de longitud máxima = k, para a raíz primitiva. facilita cálculos (desplazamiento de bits). no aleatoriedad en bits menos significativos. RANDU: M =, a = 6 + = 6559.
Hiperplanos de dimensión k Generadores congruenciales (y j, y j+,..., y j+k ) Cota máxima: (k!m) /k : Estructura de red Generador RANDU: Ternas ubicadas en 5 planos paralelos. Generadores congruenciales, m=56 RANDU
Algoritmos de Registro de Desplazamiento Generadores portables Ejemplo: Semilla: (,,,, ): Desplazar a la izquierda: (,,, 0, 0). Sumar: (0, 0, 0,, ). 4 Desplazar a la derecha: (0, 0, 0, 0, 0). 5 Nuevo vector: (0, 0, 0,, ). Numerical Recipes in C: The Art of Scientific Computing y j+ = ay j mod M a = 7 5 = 6807, M = = 4748647 "Buen generador". Las multiplicaciones superan el rango de bits. Algoritmo de Schrage. Generador de Fibonacci Algoritmo de Schrage ξ i = ξ i r ξ i s para todo i max(r, s)+. M = aq + r q =[M/a], r = M mod a ξ = {0,,..., M }, M entero y es la suma, la multiplicación o la resta módulo M. χ = {0, } n, con n entero y es la suma, la multiplicación, la resta, o el or (inclusivo o exclusivo) entre vectores de bits n- dimensionales. χ =[0, ] y es la suma o la resta módulo. az mod M = r < q, 0 < z < M 0 a(z mod q), r[z/q] M { a(z mod q) r[z/q] si es 0 a(z mod q) r[z/q]+m c.c.
El generador ran0 El generador ran y y j+ = ay j mod M a = 7 5 = 6807, M = = 4748647 v0 Schrage: se utiliza q = 777 y r = 86 Desventajas: Sucesiones de números muy pequeños. RAN SALIDA Inconvenientes en el plano: (y i, y i+ ): el test χ falla para N O(0 7 ) M v Shuffling Combinación de generadores Se almacenan los últimos valores generados en una tabla, y la salida se obtiene eligiendo aleatoriamente un elemento de dicha tabla y reponiéndolo por un nuevo valor generado. El generador ran. a = 7 5 = 6807, M = = 4748647 Tabla de posiciones. Theorem Sean W, W,..., W n variables aleatorias discretas, tales que w U([0, d ]). Entonces W =( n W j ) j= mod d es una v.a. uniforme discreta en [0, d ]. Ejemplo: tirar dados, y sumar módulo 6.
Combinación de congruenciales El generador ran Combinar secuencias de generadores congruenciales. Sugerencia: restar. Se obtiene un generador de v.a. uniformes. La longitud de la secuencia es mayor = mínimo común múltiplo de los generadores. x n = 4004x n mod 85 y n = 4069y n mod 49 El es el único factor común. Período. 0 8 Utiliza generadores congruenciales de enteros de bits. G (x i ),(M ), G (y i ),(M ). Tabla de posiciones: shuffling. Salida = combinación de x e y. x n = 4004x n mod 85 y n = 4069y n mod 49 Combinación de congruenciales ran G y 4 v0 SALIDA=vj!y G vj v
El generador ran Marsaglia - Zaman Ver en Knuth, Seminumerical Algorithms, sección... Se construye inicialmente una tabla de 55 posiciones, con números aleatorios. i y j recorren cíclicamente la tabla, separados por 4 posiciones. Salida: diferencia entre los elementos i y j, que reemplaza a su vez el lugar i. El ciclo que se obtiene es de longitud. Some portable very-long-period random number generators, George Marsaglia and Arif Zaman. Algunas consideraciones: Comentarios sobre ran Sugerencias sobre otros generadores. El generador mzran ran Consideraciones sobre ran i vi SALIDA=vi!vj La combinación de generadores produce mejoras. Sin embargo, conviene combinar estructuras diferentes. Obtener j mediante un and. Shuffling y otros generadores con secuencias más largas usando tablas. j j!>j! i!>i! vj j!i= 4 (55) Utilizar módulo bits en lugar de bits. Utilizar primos seguros (safeprimes), con a = k + α. 69 55 409, 09
Consideraciones sobre ran El generador mzran( ) Sólo puede ser ejecutado desde el programa principal. Por qué no un rango de enteros? Una subrutina iran( ) que genere enteros: UNI( )=.5+.80e-9*iran() VNI( )=.46566e-9*iran() Combina los generadores: Período: x n = 69069x n + 09044 mod y n = y n y n c mod 8 Período: 95 El período es del orden de 5, o 0 6. El generador mzran( ) Bibliografía Combina los generadores: Período: x n = 69069x n + 09044 mod y n = y n y n mod 69 Período: 94 El período es mayor a 94, o 0 8. Numerical Recipes. http://www.nr.com George Marsaglia and Arif Zaman, Some portable very-long-period random number generators, Computers in Physics,(8), 7 (994). P. L Ecuyer: Efficient and Random Number Generators. Commun. ACM (6), 74-774, (988) Bustos, O.H. y Frery, A. C., Simulação Estocástica: Teoria e Algoritmos (Versão Completa). Monografias de Matemática No. 49, IMPA, Rio de Janeiro, Brasil, ISBN 85-44-005-6. 99.
Cátedra I Modelos y Simulación Autor I Patricia Kisbye