Académique Documents
Professionnel Documents
Culture Documents
Patricia Kisbye
FaMAF
23 de marzo, 2010
Para qu se utilizan?
Simulacin. Muestreo. Anlisis numrico. Testeo de programas. Juegos de azar. Toma de decisiones.
En simulacin las secuencias con distribucin uniforme en [0, 1] se utilizan: en forma directa, para generar distribuciones discretas y continuas, para generar valores de variables aleatorias dependientes.
Un poco de historia
Antes de las computadoras, existieron diferentes mtodos para generar secuencias de nmeros aleatorios: Procedimientos fsicos (monedas, dados, bolilleros, . . . ). (1927) Tipett: tabla de 40000 dgitos aleatorios (no resultaron con distribucin uniforme). (1939) Kendall y Babbington: dispositivo mecnico. Tabla de 100.000 nmeros aleatorios. (1955) Rand Corporation: ruido electrnico. Tabla de 1 milln de nmeros aleatorios.
1. No puede repetirse una misma secuencia. 2. No hay velocidad computacional. 3. Incorporar una tabla a la computadora implica gran costo de almacenamiento en relacin a la cantidad de nmeros. Con la aparicin de las computadoras, surgen mtodos de generacin de secuencias de nmeros aleatorios.
La secuencia generada debe ser intuitivamente aleatoria. Esa aleatoriedad debe ser establecida tericamente o, al menos, debe pasar ciertos tests de aleatoriedad. Debe conocerse algo sobre las propiedades tericas del generador.
Un ejemplo
Secuencia de von Neumann (1946): 1. X0 : nmero de 5 dgitos. (03001) 2. Xi2 : escrito con diez dgitos. (0009006001) 3. Xi+1 : 5 dgitos centrales. (09006) 4. Volver a 2
3001, 9006, 81108, 78507, 63349, 13095, 71479, 92474, 51440 21000, 41000, 81000, 61000, 21000 . . . con 4 dgitos: 3792, 3792, 3792, 3792, . . .
Ejemplo
Cul es el siguiente nmero en la secuencia, entre 0 y 15? 0, 1, 6, 15, 12, 13, 2, 11, 8, 9, 14, ..
yi = 5yi1 + 1
mod 16,
y0 = 0.
Propiedades
El menor nmero K tal que yn+K = yn es el perodo de la secuencia. Todo generador congruencial genera secuencias de perodo nito. El perodo de una secuencia est acotado por M. Repetibilidad. Portabilidad?
Eleccin de a, c y M
Las buenas propiedades dependen de una eleccin apropiada de a, c y M, y en algunos casos y0 . La eleccin de M se relaciona con: longitud de la secuencia y velocidad computacional. La eleccin de a y c, en funcin de M, se relacionan con la aleatoriedad.
Generadores mixtos
mod M,
c=0
1. m.c.d.(c, M) = 1 2. a 1 mod p, para cualquier factor primo p de M. 3. Si 4 | M, entonces a 1 mod 4. Corolario: Si M es primo, el perodo mximo ocurre slo si a = 1.
Generadores multiplicativos
a es raz primitiva de M si a(M1)/p 1 mod (M) para cualquier factor primo p de M 1. Ejemplo: M = 7. 21 22 23 24 25 26 27 a=2 2 mod 4 mod 1 mod 2 mod 4 mod 1 mod 2 mod 31 32 33 34 35 36 37 a=3 3 mod 2 mod 6 mod 4 mod 5 mod 1 mod 3 mod
7 7 7 7 7 7 7
7 7 7 7 7 7 7
Generadores multiplicativos
Para un generador multiplicativo yi+1 = a yi mod M, la longitud K de la secuencia verica 1. Si K = M 1 entonces M es primo. 2. K divide a M 1. 3. K = M 1 si y slo si a es raz primitiva de M. Problema: Encontrar races primitivas. Propiedad til: Si a es raz primitiva y (k , M 1) = 1, entonces ak es raz primitiva.
M = 231 1
a = 16807
M 1 = 231 2 = 2 32 7 11 31 151 331, M: es un primo de Mersenne. 7: raz primitiva, (5, M 1) = 1, implica que 75 = 16807 es raz primitiva. secuencia de longitud mxima M 1 = 2 147 483 646.
Mdulo potencia de 2
Si M = 2k , c = 0, tomar mdulo es computacionalmente sencillo. yj = aj y0 mod (2k )
secuencia de longitud mxima = 2k 2 , para a raz primitiva. facilita clculos (desplazamiento de bits). fenmeno de no aleatoriedad en bits menos signicativos. RANDU: M = 231 , a = 216 + 3 = 65539.
estn ubicados en no ms de (k !M)1/k hiperplanos paralelos. Cota mxima: (k !M)1/k : Estructura de red Generador RANDU: Ternas ubicadas en 15 planos paralelos.
Generadores congruenciales
RANDU
Generadores portables
Algoritmo de Schrage
M = aq + r q = [M/a], r =M mod a
Si r < q y 0 < z < M 1 se puede probar que para todo z, 0 < z < M: 0 a(z mod q) M 1 0 r [z/q] M 1
az
mod M =
a(z a(z
si es 0 c.c.
El generador ran0
yj+1 = ayj
mod M
a = 75 = 16807, M = 231 1 = 2147483647 Schrage: se utiliza q = 127773 y r = 2836 Desventajas: Sucesiones de nmeros muy pequeos. Inconvenientes en el plano: (yi , yi+1 ): el test 2 falla para N O(107 ) M 2
Shufing
Se almacenan los ltimos valores generados en una tabla, y la salida se obtiene eligiendo aleatoriamente un elemento de dicha tabla y reponindolo por un nuevo valor generado. El generador ran1. a = 75 = 16807, M = 231 1 = 2147483647 Tabla de 32 posiciones.
El generador ran1
y 1 v0 2 3 RAN SALIDA
v31
Combinacin de generadores
Teorema
Sean W1 , W2 , . . . , Wn variables aleatorias discretas, tales que W1 U([0, d 1]). Entonces
n
W =(
j=1
Wj )
mod d
es una v.a. uniforme discreta en [0, d 1]. Ejemplo: tirar 2 dados, y sumar mdulo 6.
Combinacin de congruenciales
Combinar secuencias de generadores congruenciales. Sugerencia: restar. Se obtiene un generador de v.a. uniformes. La longitud de la secuencia es mayor = mnimo comn mltiplo de los generadores. xn = 40014xn1 yn = 40692yn1 El 2 es el nico factor comn. Perodo 2.3 1018 mod 231 85 mod 231 249
Combinacin de congruenciales
El generador ran2
Utiliza 2 generadores congruenciales de enteros de 32 bits. Tabla de 32 posiciones: shufing. Salida = combinacin de x e y . G1 xn = 40014xn1 G2 yn = 40692yn1 mod 231 85 mod 231 249
ran2
1 G2 y
2 v0 3 SALIDA=vjy 4 G1 vj
v31
El generador ran3
Ver en Knuth, Seminumerical Algorithms, seccin 3.2.1. Se construye inicialmente una tabla de 55 posiciones, con nmeros aleatorios. i y j recorren cclicamente la tabla, separados por 24 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 232 .
ran3
i vi 1 2 j vj
3 SALIDA=vivj
Marsaglia - Zaman
Some portable very-long-period random number generators, George Marsaglia and Arif Zaman. Sugerencias sobre otros generadores. Fibonacci Resta con prstamo Suma con acarreo El generador mzran2
Algunos ejemplos
Secuencia xn = 69069 xn1 + impar xn = xn1 xn2 xn = xn1 + xn2 + C xn = xn3 xn1 xn = xn2 xn3 C
El generador mzran( )
Combina los generadores: xn = 69069xn1 + 1013904243 Perodo: 232 xn = xn3 xn1 mod 231 69 mod 232
El generador mzran13( )
Combina los generadores: xn = 69069xn1 + 1013904243 Perodo: 232 xn = xn2 xn3 c mod 232 18 mod 232
Rutina propuesta
typedef unsigned long int unlong; unlong x=521288629, y=362436069, z=16163801, c=1, n=1131199209; unlong mzran13() { long int s; if (y>x+c) (s=y-(x+c); c=0;} else { s=y-(x+c)-18; c=1; } x=y; y=z; return (z=s) + (n=69069*n+1013904243); }; void ran13set(unlong xx, unlong yy, unlong zz, { x=xx; y=yy; z=zz; n=nn; c=y>z; }