04.01.2015 Views

Generadores random

Generadores random

Generadores random

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

GENERADORES<br />

DE NÚMEROS ALEATORIOS<br />

• Condiciones<br />

•Congruencia lineal<br />

•Función inversa<br />

•Distribución gaussiana<br />

•Aceptación y rechazo<br />

•Otros generadores<br />

•Test


Aleatorio vs pseudoaleatorio<br />

•Azar Verdadero<br />

•Pseudoaleatorio<br />

oApariencia de aleatoriedad, pero con un patrón<br />

específico repetible<br />

•Quasi-aleatorio<br />

o Un conjunto de números no aleatorios en un orden<br />

aleatorio


<strong>Generadores</strong> de números aleatorios<br />

Basados en algoritmos específicos repetibles y<br />

secuenciales: pseudo<strong>random</strong><br />

Uniformidad<br />

Eficiencia Computacional<br />

Período largo<br />

Impredectibilidad<br />

Repetibilidad<br />

Portabilidad<br />

Homogeneidad


Ciclo números <strong>random</strong><br />

Base<br />

Secuencia de enteros pseudo<strong>random</strong><br />

Enteros<br />

Manipulados aritméticamente para obtener floating<br />

point (“reales”)


Propiedades de<br />

secuencias pseudo<strong>random</strong><br />

•La secuencia tiene un número finito de enteros<br />

•Es recorrida en un orden específico<br />

•Se repite una vez agotado el período


Congruencia Lineal<br />

• Es fundamental el input elegido<br />

• LCG (a,c,m,X0)<br />

LCG (5, 0, 16, 1)<br />

1,6,15,12,13,2,11,8,9,14,7,4,5,10,3,0,1,6<br />

,15,12,13,2,11,8,9,14,…<br />

• Cuando el resultado<br />

depende solo del entero<br />

anterior el perído más largo<br />

posible es P=m<br />

• Patrón par/impar


Congruencia Lineal<br />

• Es fundamental el input elegido<br />

• LCG (a,c,m,X0)<br />

LCG (5, 1, 16, 1)<br />

1,5,9,13,1,5,9,13, …<br />

• Cuando el resultado<br />

depende solo del entero<br />

anterior el perído más largo<br />

posible es P=m<br />

• Patrón par/impar


Congruencia Lineal<br />

• Un LCG tiene ciclos<br />

• La longitud del ciclo depende de la selección de parámetros<br />

• A igual longitud de ciclo, algunos ciclos parecen más aleatorios<br />

• Los puntos (x i , x i+1 ) se acomodan en hiperplanos<br />

• Un LCG tiene período máximo sii<br />

1) mcd(b,m)=1<br />

2) a=1 mod p para cada factor primo p de m<br />

3) a=1 mod 4 si 4 divide a m<br />

• Un LCG con c=0 tiene período m-1 solo si m es primo.<br />

El período es m-1 sii a es raíz primitiva de m-1<br />

(a≠0, a (m-1)/p ≠1mod m, para todos los factores primos p de m-1)


Método de transformación : función<br />

Densidad de probabilidad p(y), probabilidad acumulada F(y)<br />

inversa<br />

si F(y) es invertible, entonces el número aleatorio y=F −1 (x) tiene la dens. de prob.<br />

deseada, donde x tiene dist. Uniforme.<br />

|<br />

p(<br />

y)<br />

dy | = |<br />

p(<br />

x)<br />

dx |, con<br />

y<br />

=<br />

y(<br />

x)<br />

p(<br />

y)<br />

=<br />

p(<br />

x)<br />

dx<br />

dy<br />

P( y)<br />

dy = P(<br />

x)<br />

dx ⇒ x = ∫ P(<br />

y′<br />

) dy′<br />

≡ F(<br />

y)<br />

a<br />

y<br />

Por lo tanto, se generan números aleatorios x bajo una distribución uniforme, y se<br />

transforman en números aleatorios y bajo la distribución p(y).<br />

Ejemplo: distribución exponencial P(y)=e −y<br />

e −y dy=dx x=1−e −y y=−ln(1−x)<br />

0 ≤ x ≤ 1 0 ≤ y ≤ ∞<br />

x<br />

1<br />

0 y


Distribución Gaussiana<br />

Sean x,y dos números aleatorios generados por distribuciones normales. Si son<br />

independientes, su distribución sobre un plano será<br />

2 2<br />

1 ⎧ ( x + y ) ⎫<br />

P(<br />

x,<br />

y)<br />

= exp⎨−<br />

⎬ o en coordenadas polares (R,θ) y haciendo d=R 2<br />

2π<br />

⎩ 2 ⎭<br />

∂(<br />

x,<br />

y)<br />

1 1<br />

P( d,<br />

θ ) = P(<br />

x,<br />

y)<br />

= exp( −d<br />

/ 2)<br />

∂(<br />

d,<br />

θ ) 2π<br />

2<br />

lo que es equivalente al producto de una distribución exponencial varianza 2, y una<br />

distribución uniforme definida en el intervalo [0,2π].<br />

Ésta es la base de la transformación de Box-Müller:<br />

Sean dos números aleatorios u 1 , u 2 derivados de una distribución uniforme.<br />

Se realizan las transformaciones<br />

R<br />

2<br />

= −2ln<br />

u<br />

θ = 2πu<br />

2<br />

1<br />

x = R cosθ<br />

=<br />

y = Rsinθ<br />

=<br />

− 2lnu<br />

− 2ln u<br />

1<br />

1<br />

cos(2πu<br />

sin(2πu<br />

2<br />

2<br />

)<br />

)<br />

que nos llevan a dos números aleatorios x,y cuya probabilidad sigue una distribución<br />

gaussiana.<br />

Puesto que las transformaciones dependen de funciones trigonométricas, no son muy<br />

eficientes para el cálculo computacional.


Distribución Gaussiana<br />

(−1,1)<br />

(−1,−1)<br />

x = v<br />

1<br />

y = v<br />

2<br />

R<br />

θ<br />

v 1<br />

⎛ − 2ln d<br />

⎜<br />

⎝ d<br />

⎛ − 2ln d<br />

⎜<br />

⎝ d<br />

⎞<br />

⎟<br />

⎠<br />

1/ 2<br />

⎞<br />

⎟<br />

⎠<br />

v 2<br />

1/ 2<br />

(1,1)<br />

(1,−1)<br />

Para hacer el algoritmo de Box-Müller más rápido se<br />

definen las variables<br />

v 1 =2u 1 −1<br />

v 2 =2u 2 −1<br />

Se generan números (v 1 ,v 2 ) tal que el punto se encuentre<br />

dentro del círculo de radio R=1.<br />

v1<br />

cosθ<br />

=<br />

R<br />

v2<br />

sinθ<br />

=<br />

R<br />

=<br />

( v<br />

=<br />

( v<br />

2<br />

1<br />

2<br />

1<br />

v<br />

+ v<br />

v<br />

+ v<br />

para d ≤ 1 estas transformaciones modificadas .<br />

son más eficientes en el cálculo.<br />

1<br />

2<br />

2<br />

2<br />

2<br />

2<br />

)<br />

)<br />

1/ 2<br />

1/ 2


Método de aceptación y rechazo<br />

Tenemos p(y) y F(y) no invertible.<br />

Se busca una función envolvente f(y) cuya distribución se pueda generar .<br />

Se genera x 1 , número aleatorio de distribución f(y) . Se genera un segundo número<br />

aleatorio x 2 con distribución uniforme el intervalo entre (0, f(x 1 )).<br />

Se acepta si x 2 ≤ p(y).


Generador de Marsaglia (ranmar)<br />

• Combinación de dos generadores<br />

• Serie de Fibonacci desfasada (Lagged Fibonacci)<br />

I n = I n-r – I n-s mod 2 24 , r = 97, s = 33<br />

• Serie Aritmética<br />

I – k, I – 2k, I – 3k…, mod (2 24 - 3), k = 7654321<br />

• Paso final<br />

Se toma x n de la serie Fibonacci<br />

Se toma y n de la serie aritmética<br />

Si x n >= y n , el número es x n – y n<br />

Si no es x n – y n + 1<br />

15


Mersenne Twister<br />

• Período: 2 19937 – 1 (Marsaglia alcanza 2 110 )<br />

• Es de aplicación amplia porque está basado en una buena definición<br />

de aleatoriedad. ( Otros generadores son muy específicos)<br />

• Eficiente<br />

• Pasó todos los tests<br />

• Ideal para simulaciones de Monte Carlo<br />

16


Otros <strong>Generadores</strong><br />

1. Combined Multiple Recursive Generator<br />

z(n) = x(n) + y(n)*2 32 (Mod 2 64 )<br />

x(n) es la secuencia generada por un 64 bit Linear Congruential Generator<br />

y(n) es la secuencia generada por un Prime modulus Multiple Recursive Generator:<br />

y(n) = 107374182*y(n-1) + 104480*y(n-5) (mod 2147483647)<br />

• Período ≈ 2 219<br />

• Rápido porque es lcg<br />

2. 48 Bit Linear Congruential Generator with Prime Addend<br />

x(n) = a x(n-1) + p (Mod M)<br />

p primo. M= 2 48 .<br />

• Período = 2 48<br />

• Número de series diferentes del orden de 2 19<br />

• Rápido porque es lcg<br />

3. 64 Bit Linear Congruential Generator with Prime Addend<br />

• Período = 2 64<br />

• Número de series diferentes del orden de 10 8<br />

• Rápido porque es lcg<br />

17


Otros <strong>Generadores</strong><br />

4. Modified Lagged Fibonacci Generator<br />

z(n) = x(n) XOR y(n)<br />

con x and y secuencias X e Y obtenidas de un Lagged Fibonacci:<br />

X(n) = X(n-k) + X(n-l) (mod M)<br />

Y(n) = Y(n-k) + Y(n-l) (mod M)<br />

l y k son los lags y se elige l > k. M = 2 32 . X(n) and Y(n) son 32 bit int.<br />

x se obtiene de X seteando el Bit menos signif. en 0.<br />

y se obtiene de Y desplazando un bit a la derecha.<br />

• Período = 2 31 (2 l – 1), donde l es el “lag”.<br />

• Número de series diferentes del orden de 231(l – 1)-1<br />

5. Multiplicative Lagged Fibonacci Generator<br />

x(n) = x(n-k) * x(n-l) (mod M) l y k lags del generador, l > k. M= 2 64 .<br />

• Período = 2 61 (2 l – 1)<br />

• Número de series diferentes del orden de 263(l – 1)-1<br />

6. Prime Modulus Linear Congruential Generator<br />

x(n) = a*x(n-1) (mod 2 61 -1)<br />

• Período = 2 64 - 2<br />

• Número de series diferentes del orden de 2 58<br />

18


Generación de N-uplas<br />

• Se generan conjuntos de x 1 a x n<br />

Se grafican estos puntos (x 1 , x 2 ,….,x n )<br />

Deberíamos tener un volmen ocupado<br />

uniformemente<br />

Muchos generadores generan puntos que<br />

ocupan hiperplanos paralelos

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!