Generadores random
Generadores random
Generadores random
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