Generadores de variables aleatorias
uniformes
Patricia Kisbye
FaMAF
27 de marzo, 2008
¿Para qué se utilizan?
Simulación. Muestreo. Análisis numérico. Testeo de programas. Juegos de azar. Toma de decisiones.
Variables Uniformes
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).
Propiedades buscadas
Una secuencia de númerosU1,U2, . . . ,UN es una
muestra de tamañoN deU(0,1)si:
1 son independientes. 2 son uniformes.
Un generador de v.a. uniformes debe cumplir: 1 ”repetibilidad” y ”portabilidad”, y
Un poco de historia
Procedimientos físicos (monedas, dados, bolilleros, . . . ).
(1927) Tipett: tabla de 40000 dígitos aleatorios (no uniformes).
(1939) Kendall y Babbington: dispositivo mecánico. Tabla de 100.000 números aleatorios.
(1955) Rand Corporation: ruido electrónico. Tabla de 1 millón de números aleatorios.
Principios generales
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.
Un ejemplo
Secuencia de von Neumann (1946): 1 X0: número de 5 dígitos. (03001) 2 X2
i : escrito con diez dígitos. (0009006001) 3 Xi +1: 5 dígitos centrales. (09006) 4 Volver a 2 3001,9006,81108,78507,63349,13095,71479,92474,51440 21000,41000,81000,61000,21000. . . con 4 dígitos: 3792,3792,3792,3792, . . .
Generador congruencial lineal
yi = (ayi−1+c) mod M, 1≤i, xi = yi M, secuencia en el[0,1). y0: semilla a: multiplicador c: incremento M: módulo generadormixto: c"=0 generadormultiplicativo:c=0.
Propiedades
Secuencia con período de longitud máxima acotada porM oM −1. Repetibilidad. ¿Portabilidad? Elección apropiada dea,cyM. El generador multiplicativo: c =0 Elección dea,cyM
Cota paraM: representación de enteros en la computadora.
Longitud de la secuencia: números primos, raíces primitivas.
c=0: longitud máximaM −1. c"=0: longitud máximaM.
M =2k: longitud máxima 2k−2. (semilla impar) M =2k: fenómeno de no aleatoriedad en dígitos
menos significativos.
Un ejemplo con
M
primo
M =231−1 a=16807
M −1=231−2=2·32·7·11·31·151·331,
M: es un primo de Mersenne.
7: raíz primitiva,(5,M−1) =1, implica que
75 =16807 es raíz primitiva.
secuencia de longitud máximaM −1=2147483646.
M
=
2
k,
c
=
0
yj =ajy0 mod (M)
secuencia de longitud máxima = 2k−2, paraaraíz primitiva.
facilita cálculos (desplazamiento de bits). no aleatoriedad en bits menos significativos. RANDU:M =231,a=216+3=65539.
Hiperplanos de dimensión
k
(yj,yj+1, . . . ,yj+k−1)
Cota máxima: (k!M)1/k: Estructura de red
Generador RANDU: Ternas ubicadas en 15 planos paralelos.
Generadores congruenciales, m=256
Generadores congruenciales
Algoritmos de Registro de Desplazamiento
Ejemplo: 1 Semilla: (1,1,1,1,1): 2 Desplazar 2 a la izquierda: (1,1,1,0,0). 3 Sumar: (0,0,0,1,1). 4 Desplazar 3 a la derecha: (0,0,0,0,0). 5 Nuevo vector: (0,0,0,1,1).Generador de Fibonacci
ξi =ξi−r $ξi−s para todoi ≥max(r,s) +1. 1 ξ ={0,1, . . . ,M−1},M ≥2 entero y$es la suma,
la multiplicación o la resta móduloM.
2 χ={0,1}n, conn≥2 entero y$es la suma, la multiplicación, la resta, o el ”or” (inclusivo o
exclusivo) entre vectores de bitsn- dimensionales. 3 χ= [0,1]y$es la suma o la resta módulo 1.
Generadores portables
Numerical Recipes in C: The Art of Scientific Computing yj+1 =ayj mod M
a=75 =16807, M =231−1=2147483647
"Buen generador".
Las multiplicaciones superan el rango de 32 bits. Algoritmo de Schrage.
Algoritmo de Schrage
M =aq+r q= [M/a], r =M mod a r <q, 0<z<M −1 0≤ a(z mod q), r[z/q]≤M −1 az mod M = ! a(z mod q)−r[z/q] si es ≥0 a(z mod q)−r[z/q] +M c.c.El generador ran0
yj+1 =ayj mod M
a=75 =16807, M =231−1=2147483647
Schrage: se utilizaq =127773 yr =2836
Desventajas:
Sucesiones de números muy pequeños.
Inconvenientes en el plano: (yi,yi+1): el test χ2 falla paraN ≈ O(107)≤M−2
Shuffling
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 ran1. a=75 =16807,M =231−1=2147483647 Tabla de 32 posiciones.
El generador ran1
RAN SALIDA 1 y v0 v31 2 3Combinación de generadores
TheoremSean W1,W2, . . . ,Wn variables aleatorias discretas, tales
que w1 ∼U([0,d−1]). Entonces W = ( n " j=1 Wj) mod d
es una v.a. uniforme discreta en[0,d−1].
Combinación de congruenciales
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.
xn =40014xn−1 mod 231−85 yn =40692yn−1 mod 231−249 El 2 es el único factor común.
Período≈ 2.3×1018
Combinación de congruenciales
El generador ran2
Utiliza 2 generadores congruenciales de enteros de 32 bits.
G1 )→(xi), (M1),G2 )→(yi), (M2).
Tabla de 32 posiciones:shuffling. Salida = combinación dex ey. xn =40014xn−1 mod 231−85 yn =40692yn−1 mod 231−249
ran2
y G1 G2 2 4 v31 v0 SALIDA=vj!y 1 3 vjEl generador ran3
Ver en Knuth,Seminumerical Algorithms, sección 3.2.1. Se construye inicialmente una tabla de 55
posiciones, con números aleatorios.
i yj recorren cíclicamente la tabla, separados por 24 posiciones.
Salida: diferencia entre los elementosi yj, que reemplaza a su vez el lugari.
El ciclo que se obtiene es de longitud 232.
ran3
SALIDA=vi!vj j vj vi i 1 2 3 j!i= 24 (55) j!>j!1 i!>i!1Marsaglia - Zaman
Some portable very-long-period random number generators, George Marsaglia and Arif Zaman. Algunas consideraciones:
Comentarios sobre ran2
Sugerencias sobre otros generadores. El generador mzran
Consideraciones sobre ran2
La combinación de generadores produce mejoras. Sin embargo, conviene combinar estructuras diferentes.
Obtenerj mediante un ”and 31”.
Shuffling y otros generadores con secuencias más largas usando tablas.
Utilizar módulo 32 bits en lugar de 31 bits. Utilizar ”primos seguros” (safeprimes), con a=2k +α.
231−69 231−535 232
Consideraciones sobre ran2
Sólo puede ser ejecutado desde el programa principal.
¿Por qué no un rango de enteros?
Una subrutina iran2( ) que genere enteros: UNI( )=.5+.232830e-9*iran2()
VNI( )=.4656613e-9*iran2()
El generador mzran( )
Combina los generadores:xn =69069xn−1+1013904243 mod 232 Período: ≈232 yn =yn−3−yn−1 mod 231−69 Período: ≈294 El período es mayor a 294, o 1028.
El generador mzran13( )
Combina los generadores:xn =69069xn−1+1013904243 mod 232 Período: ≈232
yn =yn−2−yn−3−c" mod 232−18 Período: ≈295
El período es del orden de 2125, o 1036.
Bibliografía
Numerical Recipes. http://www.nr.com
George Marsaglia and Arif Zaman,Some portable very-long-period random number generators, Computers in Physics,(8)1, 117 (1994). P. L’Ecuyer: Efficient and Random Number
Generators. Commun. ACM 31(6), 742-774, (1988) 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-244-0053-6. 1992.
Cátedra I Modelos y Simulación