You are on page 1of 16

Nmeros aleatorios

Introduccin Definiciones Caractersticas de un generador Mtodos de generacin Pruebas de aleatoriedad Referencias

Lenguajes de simulacin

2004-2005

Nmeros aleatorios. Introduccin


La gran disponibilidad de generadores de nmeros aleatorios en muchos entornos y en prcticamente casi todos los compiladores puede llevarnos a pensar que para un usuario de la simulacin no sera necesario estudiar estas cuestiones. Una leccin del pasado reciente nos obliga a sacar conclusiones y actuar con mucho cuidado con dichos generadores (RANDU - IBM). El uso progresivo de modelos de simulacin cada vez ms detallados exige una mayor calidad de los generadores de nmeros aleatorios. Ripley indica que la generacin de nmeros aleatorios parece uno de los temas peor comprendidos de la ciencia de computadoras. Knuth, por su parte indica que Los nmeros aleatorios no deben ser obtenidos con un mtodo elegido aleatoriamente

Lenguajes de simulacin

2004-2005

Nmeros aleatorios. Algunas caractersticas


Cuando se generan nmeros seudo aleatorios se pueden producir ciertos errores o problemas, como por ejemplo: 1.- Los nmeros generados pueden no estar distribuidos uniformemente. 2.- Los nmeros generados pueden corresponder a una distribucin discreta en lugar de a una continua. 3.- La media de los nmeros generados puede ser demasiado alta o demasiado baja. 4.-La varianza de los nmeros generados puede ser demasiado alta o demasiado baja. 5.- Puede existir una clara dependencia entre ellos. Por ejemplo - Autocorrelacin entre nmeros. - Nmeros correlativamente ms bajos o ms altos que los adyacentes. - Varios nmeros por encima de la media seguidos de otros por debajo de la misma.
Lenguajes de simulacin 2004-2005

Nmeros aleatorios. Definiciones (I)


DEF 1: Kolmogorov (1987) [Complejidad Algortmica] Una sucesin de nmeros es aleatoria si no puede producirse eficientemente de una manera ms corta que la propia serie. DEF 2: LEcuyer (1990) [Impredicibilidad] Una sucesin de nmeros es aleatoria si nadie que utilice recursos computacionales razonables puede distinguir entre la serie y una sucesin de nmeros verdaderamente aleatoria de una forma mejor que tirando una moneda legal para decidir cul es cul.
Obs: Esta definicin conduce a los denominados generadores PT-perfectos usados en Criptografa.

DEF 3: Un Nmero aleatorio es una realizacin de una variable aleatoria que tiene asociada una ley de probabilidades F.
Obs: Una particular ley de Probabilidad base para la generacin de nmeros pseudoaleatorios u1, u2,..., un : es la uniforme (0 ; 1) ui ~ U(0,1).

Lenguajes de simulacin

DEF 4: Una sucesin de nmeros aleatorios generados {u1, u2,..., un} es una sucesin de nmeros U(0;1), si tiene las mismas propiedades estadsticas relevantes que dicha sucesin de nmeros aleatorios reales.
2004-2005

Nmeros aleatorios. Definiciones (II)


DEF 5: Una sucesin de nmeros aleatorios {ui} es aleatorio si h-tuplas de nmeros sucesivos no superpuestos se distribuyen aproximadamente como una [0,1]h, con h=1,2,..,n, para n suficientemente grande.
Obs: h=2 tenemos (ui,ui+1) , i=1,2,..n , se distribuye como una ley uniforme en [0,1]2.

Existe una gran nmero de mtodos para generar {ui} U(0,1) : -Uniformente distribuidos - Independientes - E[U]= ; V[U]= 1/12 - Perodo largo

Lenguajes de simulacin

2004-2005

Consideraciones para la eleccin de generadores


Aunque existe un gran nmero de mtodos posibles para la generacin de nmeros aleatorios en una computadora, hay tambin unas ciertas consideraciones importantes para la eleccin de un mtodo u otro. La rutina debe ser rpida. La rutina debe ser transportable entre diferentes ordenadores e, idealmente, a diferentes lenguajes de programacin. La rutina debe tener un ciclo suficientemente largo. Un ciclo representa la longitud de una secuencia antes que comiencen a repetirse los nmeros en el orden anterior. La ocurrencia de repeticiones en los nmeros obtenidos puede propiciar la no aceptacin del generador. Las secuencias de nmeros aleatorios deben ser replicables. Partiendo del mismo nmero se debe poder obtener la misma secuencia Los nmeros obtenidos deben aproximarse a las propiedades estadsticas ideales de uniformidad e independencia.

Lenguajes de simulacin

2004-2005

Mtodos de generacin
Existen varios mtodos para la generacin de nmeros aleatorios como: 1.- Mtodo de los cuadrados medios 2.- Mtodos de Congruencias Todo proceso de generacin consta de tres fases: [Semilla - Algoritmo - Validacin] P1 : Obtener semilla (valores iniciales) P2 : Aplicacin de algn algoritmo de generacin recursivo P3 : Validacin del conjunto de nmeros generados (Pruebas de Aleatoriedad)

Lenguajes de simulacin

2004-2005

Mtodos de los cuadrados medios


Consiste en que cada nmero de una sucesin es producido tomando los dgitos medios de un nmero obtenido mediante la elevacin al cuadrado. P1 : Obtener semilla (por ejemplo 445) P2 : Aplicacin del algoritmo (elevar al cuadrado y truncar) P3 : Validacin del conjunto de los nmeros generados Ejemplo: Consideremos la semilla 445 X 445 9802 792 2726
Lenguajes de simulacin

X2 1| 9802 | 5 96| 0792 | 04 6 | 2726 | 4 ...............

N Aleatorio 0,9802 0,0792 0,2726 ...............


2004-2005

Generadores de congruencias lineales.


La mayora de los generadores que se utilizan actualmente son generadores de congruencias lineales. Este tipo de generadores producen una secuencia de enteros entre 0 y m-1 de acuerdo con: Zn=(a Zn-1+c) mod m donde a es el multiplicador, c es el incremento o desplazamiento y m el mdulo. Se debe cumplir que m>0, a<m, c<m y Z0<m, siendo todos ellos enteros. Para obtener el nmero aleatorio se utiliza: Un=Zn/m La eleccin de los valores de a,c y m son determinantes para la longitud de la secuencia y la calidad del generador. Cuando c>0 los generadores se llaman mixtos y cuando c=0 se llaman multiplicativos. Zi=aZi-1-mKi donde Ki= aZi-1/m donde Z0 es la semilla.
Lenguajes de simulacin

2004-2005

Generadores de congruencias lineales mixtos


Su forma general es: Zi=(aZi-1+c) mod m Por induccin matemtica se puede ver que para i = 1,2,..
c(a i 1) Z i = a i Z 0 + mod m a 1

Teorema1: Un generador de congruencias lineales mixto tiene periodo total si y solo si se cumplen las condiciones siguientes: El nico entero positivo que divide exactamente a m y a c es 1 (m y c son primos entre si). Si q es un nmero primo que divide a m, entonces q divide a (a-1). Si 4 divide a m, entonces 4 divide a (a-1).
(1) Planteado por HULL, T. E.; DOBELL, A. R. Random number generators. SIAM Rev. 4 (1962).
Lenguajes de simulacin 2004-2005

Generadores de congruencias lineales. Ejemplo (I)


La frmula general es: Xi+1 = (a Xi + c) mod m, i=0,1, 2, 3 Ejemplo: sea m = 102 = 100, a = 19, c = 0 y X0 = 63 la secuencia obtenida de acuerdo con dicha frmula es: X0 = 63 X1 = (19)(63) mod 100 = 1197 mod 100 = 97 X2 = (19)(97) mod 100 = 1843 mod 100 = 43 X3 = (19)(43) mod 100 = 817 mod 100 = 17 X4 = (19)(17) mod 100 = 323 mod 100 = 23 ... Cuando m es una potencia de 10, como 10b, la operacin mdulo se realiza guardando los b dgitos decimales de la derecha, por lo que este tipo de operacin ser muy eficiente en las computadoras.

Lenguajes de simulacin

2004-2005

Generadores de congruencias lineales. Ejemplo (II)


Sea la secuencia: Xi+1 = a Xi mod 11, para i= >1; Z0 = 1 i/a 0 1 2 3 4 5 6 7 8 9 1 1 1 2 1 2 4 8 5 10 9 7 3 6 3 1 3 9 5 4 1 4 1 4 5 9 3 1 5 1 5 3 4 9 1 6 1 6 3 7 9 10 5 8 4 2 7 1 7 5 2 3 10 4 6 9 8 8 1 8 9 6 4 10 3 2 5 7 9 1 9 4 3 5 1 10 1 10 1

Las races primitivas son 2, 6, 7 y 8. Los nmeros generado por 2 y 6 son iguales pero en sentido contrario. Lo mismo ocurre con los generados por 7 y 8. Este tipo de relaciones se producen generalmente en generadores multiplicativos.
Lenguajes de simulacin

2004-2005

Generadores de congruencias lineales. Ejemplo (III)


La frmula general es: Xi+1 = (a Xi + c) mod m Ejemplo: sea m = 26 = 64, a = 13, c = 0 y X0 = 1, 2, 3 y 4
i 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Xi 1 13 41 21 17 29 57 37 33 45 9 53 49 61 25 5 1 Xi' 2 26 18 42 34 58 50 10 2 Xi'' 3 39 59 63 51 23 43 47 35 7 27 31 19 55 11 15 3 Xi''' 4 52 36 20 4

Para una potencia de 2, m = 2l y c = 0 el periodo posible ms grande es P = m/4 = 2l-2 que se consigue en el caso en que la semilla es impar y el multiplicador a est dado por 3 + 8k donde k es un entero.
Lenguajes de simulacin 2004-2005

Generadores de congruencias lineales. Ejemplo (IV)


Parmetros b m 0 13 0 13 0 13 0 11 0 11

Caso 1 2 3 4 5

a 6 7 5 7 6

xo 1 10 5 5 3

Caso 1 2 3 4 5

6 5 12 2 7

10 9 8 3 9

8 11 1 10 10

9 12 5 4 5

2 6 12 6 8

Salidas 12 7 3 8 8 1 9 8 4 2

3 4 5 1 1

5 2 12 7 6

4 1 8 5 3

11 7 1 2 7

1 10 5 3 9

6 5 12 10 10

10 9 8 4 5

Lenguajes de simulacin

2004-2005

Generadores de congruencias lineales. Ejemplos (V)


Un algoritmo de muy fcil implementacin de generadores de congruencias es m = 231-1 a = 75 (raz primitiva de m) Xn = 75 Xn-1 mod (231-1) un = Dicho generador se encuentra en las bibliotecas IMSL y NAG La rutina RANDU, que IBM proporcionaba para sus equipos consideraba un modelo congruencial multiplicativo con m = 231 ; a = 65539 ; b = 0 Xn = 65539 Xn-1 mod (231) un = Xn/m Este generador proporciona tripletas consecutivas de nmeros que caen en 15 planos! Lo que sugiere cierta que los resultados a obtener son previsibles (Mal Generador)
Lenguajes de simulacin 2004-2005

Generadores de congruencias lineales. Propiedades


Algunas observaciones de las salidas de los generadores de congruencias: i) Los generadores de congruencias tienen ciclos iI) La longitud del ciclo depende de la seleccin de los parmetros iii) Dentro de selecciones de parmetros que conducen a la misma longitud, algunas salidas parecen ms aleatorias que otras. iv) La representacin de pares (Xi, Xi+1) sugiere que stos se disponen en un nmero finito de hiperplanos.

Lenguajes de simulacin

2004-2005

Consideraciones respecto a la eleccin


Un generador que tiene el periodo mximo posible se dice que es de periodo total. Xn= [(234 +1)Xn-1+1] mod 235 Xn= [(218 +1)Xn-1+1] mod 235 No obstante, el periodo no debe ser el nico criterio de decisin a la hora de elegir un generador. Una de las cuestiones de ms importancia en este aspecto es el de la autocorrelacin ms baja entre nmero sucesivos. Ambos generadores tienen el mismo periodo total pero el primero tiene una correlacin de 0,25 entre Xn y Xn-1, mientras el segundo tiene una correlacin despreciable menor que 2-18.

Lenguajes de simulacin

2004-2005

Generadores de Tausworthe
En este caso se deben proporcionar los primeros q bits, lo que es anlogo a la semilla de los generadores de congruencias lineales. Este tipo de generador depende del largo de la palabra Ejemplo: r=3 q = 5 con b1 = b2 = b3 = b4 = b5 = 1 para i 6 bi = (bi-3 + bi-5) mdulo 2 b6 = (b3 + b1) mod 2 = 2 mod 2 = 0 b7 = (b4 + b2) mod 2 = 2 mod 2 = 0 b8 = (b5 + b3) mod 2 = 2 mod 2 = 0 b9 = (b6 + b4) mod 2 = 1 mod 2 = 1 b10 = (b7 + b5) mod 2 = 1 mod 2 = 1 ... b42 = (b39 + b37) mod 2 = 2 mod 2 = 0 Se puede repetir la secuencia pero dependiendo de la eleccin de la longitud no coincidir en dicha repeticin.
Lenguajes de simulacin

2004-2005

Generadores de Tausworthe
Cmo se transforma la sucesin {bi} en nmeros aleatorios U(0,1)?. Consideremos {bi} b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13......... b41 b42 1 1 1 1 1 0 0 0 1 1 0 1 1 ......... 1 0 1111 1000 1101 1101 0100 0010 01 01 1001 1111 0001 . Se elige l = 4 y1 = b123 + b222 + b321 + b420 = 8 + 4 + 2 + 1 = 15 y2 = b523 + b622 + b721 + b820 = 8 + 0 + 0 + 0 = 8 y3 = b923 + b1022 + b1121 + b1220 = 8 + 4 + 0 + 1 = 13 y4 = b1323 + b1422 + b1521 + b1620 = 8 + 4 + 0 + 1 = 13 .... y as sucesivamente
15 {u i }10 , i =1 = 8 13 13 4 2 5 9 1 , , , , , , , ,... 16 16 16 16 16 16 16 16 16
Comienza la repeticin

u1 =
u2 =

y1 2 y2
2l y3
l

u3 =

2l

15 16 8 = 16 13 = 16

El periodo de los bits es 31 (2q 1), pero no es el periodo de la secuencia de nmeros.


Lenguajes de simulacin 2004-2005

Generadores de Tausworthe
Ventajas:
Son independientes del ordenador y del tamao de la palabra que utilice. Se pueden obtener secuencias de longitud considerable, como 2251-1 > 10156 e incluso mayores en micros de 16 bits.

Inconvenientes:
La secuencia obtenida puede tener buenos resultados en las pruebas sobre el ciclo completo, pero pueden tener un comportamiento local poco satisfactorio. En general proporcionan malos resultados en las pruebas de rachas hacia arriba y hacia abajo. Aunque la correlacin de primer orden (un nmero con el siguiente) es casi cero se sospecha que algunos generadores pueden proporcionar valores elevados de correlaciones de orden elevado. No todos los polinomios primitivos tiene las mismas cualidades. Las primeras versiones de GPSS/H utilizaban un generador de Tausworthe.
Lenguajes de simulacin 2004-2005

Seleccin de la semilla
En casi todos los generadores es necesario disponer de una semilla. Se supone que la seleccin de la misma no debe afectar a los resultados de la simulacin. Dependiendo de las caractersticas del generador (si es de periodo total o no) se han establecido una serie de normas a la hora de seleccionar la semilla. No utilizar el cero. Prohibir los valores pares. No subdividir una serie. Utilizar series no solapadas (cada serie precisa una semilla separada). Reutilizar las semillas para sucesivas rplicas de la misma simulacin. No utilizar semillas aleatorias. Producen problemas como: la simulacin no se puede reproducir no es posible garantizar que seres vivos no se solapen

Lenguajes de simulacin

2004-2005

Pruebas de aleatoriedad
Para comprobar si los nmero aleatorios obtenidos cumplen las propiedades deseadas de uniformidad e independencia se deben realizar una serie de pruebas. En general, los generadores suministrados comercialmente ya han pasado por algunas de estas pruebas. Prueba de frecuencia. Pruebas de series. Prueba de autocorrelacin. Prueba de saltos. Prueba de poker. H0: Ri U[0,1] H1: Ri U[0,1] La hiptesis nula supone que la secuencia de nmeros obtenidos est distribuida uniformemente en el intervalo [0,1].
Lenguajes de simulacin 2004-2005

Cuando se prueba la uniformidad las hiptesis son:

Pruebas de frecuencia
La prueba bsica a la que se debiera someter cualquier nuevo generador de nmeros aleatorios es la de uniformidad. Existen dos mtodos para realizar esta prueba: Prueba de Kolmogorv-Smirnov. Prueba de chi-cuadrado.

Kolmogorov-Smirnov compara la funcin de distribucin acumulada F(x) de la distribucin uniforme con la emprica, SN(x), de la muestra de N observaciones. Por definicin: F(x) = x para 0 x 1 Para una muestra de R1, R2, ...,RN la funcin de distribucin acumulada, SN(x), est definida por: SN(x) = (nmero de R1, R2, ...,RN que son 1)/N D = max |F(x) - SN(x)| Forma de obtenerlo: Se ordenan los datos de menor a mayor R(1) R(2) ... R(N) Se calcula: Se obtiene D+ = max1 i N {i/N - R(N) } D- = max1 i N {R(N) - (i-1)/N } D = max(D+,D-) Se compara con el valor de la tabla para un dado.
Lenguajes de simulacin 2004-2005

Prueba de Kolmogorov-Smirnov
Ejemplo de prueba de Kolmogorov-Smirnov: Sean 5 nmeros 0,44, 0,81, 0,14, 0,05, 0,93 generados por algn mtodo.
R(i) I/N I/N - R(i) R(i) - (i-1)/N 0,05 0,20 0,15 0,05 0,14 0,40 0,26 0,44 0,60 0,16 0,04 0,81 0,80 0,21 0,93 1,00 0,07 0,13

D+ = max1 i N {i/N - R(N) } = 0,26 D- = max1 i N {R(N) - (i-1)/N }= 0,21 Por tanto D = 0,26. Para = 0,05 y N = 5 el valor de la tabla es 0,565 por tanto no se puede rechazar la hiptesis nula.

Lenguajes de simulacin

2004-2005

Prueba de Chi-cuadrado (I)


Sean X1, X2,Xn n observaciones. Se define la hiptesis nula como H0: La Xis son variables aleatorias idnticamnete distribuidas con una funcin de distribucin F. Se divide el rango de F en k intervalos adyacentes [a0,a1),[a1,a2),.,[ak-1,ak) Sea Nj = nmero de Xis en [aj-1,aj) y sea pj la probabilidad de que un resultado est en [aj-1,aj) (es decir, pj = F(aj)-F(aj-1)) 2 Se construye el test estadstico como
2 =

j =1

( N j np j ) np j

Si H0 es verdadera, npj es el nmero esperado de n Xis que caen en el intervalo jsimo. 2 k Una forma ms simple de la expresin es:
2 =

j =1

(O j E j ) Ej

donde Oj es el nmero observado en el intervalo j y Ej es el nmero esperado.

Lenguajes de simulacin

2004-2005

Prueba de Chi-cuadrado (II)


Si H0 es verdadera, entonces la distribucin converge a una distribucin de chicuadrado con k-1 grados de libertad cuando n . Por tanto, se rechaza H0 si 2 > k21,1 donde k21,1 distribucin de chi-cuadrado con k-1 grados de libertad. Prueba de chi-cuadrado para variables aleatorias U(0,1): Se divide (0,1) en k subintervalos de igual longitud y se generan U1, U2,..,Un. Sea Nj el nmero de variables aleatorias Ui en le intervalo j-simo. Entonces: es el cuantil 1- de la

k k n = N j n j =1 k
2

Se recomienda elegir k100 y n/k 5. Ejemplo: Sea el generador de congruencias multiplicativo Zn=AZn-1 mod M con A=630360016, M=231-1 y semilla Z0=1973272912. Si se generan n=215=32768 nmeros aleatorios (Ui), y se divide (0,1) en k=212=4096 2 subintervalos, entonces 2 = 4141 como 4095 , 0.9 = 4211.4 No se rechaza la hiptesis H0 al nivel =0.1.
Lenguajes de simulacin 2004-2005

Pruebas de secuencias (I)


Una secuencia (o serie) es un conjunto de eventos semejantes, precedidos o seguidos por otro de distinto tipo. En el caso de nmeros aleatorios puede ser que el nmero sea superior o inferior al anterior. Ejemplo: Sean los 15 nmeros siguientes:
-0,87 +0,15 +0,23 +0,45 -0,69 -0,32 -0,30 +0,19 -0,24 +0,18 +0,65 +0,82 -0,93 +0,22

0,81

La secuencia de 14 + o - es:

- + + + - - - + - + + + - +
Hay 8 secuencias de + o - seguidos, cada una puede ser de una longitud cualquiera. Si N es el nmero de nmeros aleatorios (en este caso 15) y a es el nmero total de secuencias, la media y la varianza de a vienen dadas por: a = (2N - 1) / 3 a 2= (16N - 29) / 90 Para N > 20 la distribucin de a se aproxima razonablemente a una distribucin normal, N(a , a 2). El valor estadstico a comprobar es: Z0 = (a - a )/ a = (a [(2N - 1) / 3])/ SQR((16N - 29) / 90)
Lenguajes de simulacin 2004-2005

Pruebas de secuencias (II)


Sea la siguiente secuencia de 20 nmeros aleatorios 0.43 0.31 0.98 0.74 0.28 0.42 0.79 0.16 0.33 0.01 0.99 0.20 0.27 0.32 0.55 0.12 0.12 0.45 0.67 0.58

- + - - + + - + + + - + -+ + - + - +
a=14

a = 13

a =3,23

Z = (14 -13) / 3,23

Z = 0.55

comparado con el valor crtico N ( 13 ;3.23)

El supuesto de independencia no puede ser rechazado

Lenguajes de simulacin

2004-2005

Pruebas de secuencias (III)


Sea la siguiente secuencia de 40 nmeros aleatorios 0.41 0.68 0.89 0.94 0.74 0.91 0.55 0,62 0.36 0,27 0.19 0.72 0.75 0.08 0.54 0.02 0,01 0.36 0,16 0.28 0.18 0.01 0.95 0.69 0.18 0.47 0.23 0,32 0.82 0,53 0.31 0.42 0.73 0.04 0.83 0.45 0.13 0,57 0.63 0,29 Aplicando la prueba de rachas por encima y por debajo de la media se obtiene: - + + + + + + + - - - + + - + - - - - - - + + - - - - + + - - + - + - - + + -2n n b 1 2 N 12 2n1 n 2 (2n1 n 2 N ) 2n1 n 2 1 2 Z0 = 1 b = b = + Los valores que se obtienen son: 2 2n1 n 2 (2n1 n 2 N ) 2 N (N 1) N 2 N 2 (N 1) N = n1 + n2 = 40 b = 17 n1 = 18 n2 = 22
b =
2(18)(22)(2(18)(22) 40) 2(18)(22) 1 2 = 20,3 + = 20,3 b = (40) 2 (40 1) 40 2
Z0 = 17 20,3 9,54 = 1,07

Z 0,025 = 1,96

Lenguajes de simulacin

2004-2005

Ejemplo. Matlab
x=unifrnd(0,1,10000,1) y=unifrnd(0,1,10000,1) plot(x,y,'.')

Representacin grfica de una matriz de 10.000x10.000 de nmeros aleatorios generados por Matlab
Lenguajes de simulacin 2004-2005

Referencias
Libros: Banks, Carson, Nelson, Nicol. Discrete event system simulation (third edition). El captulo 7 trata sobre generacin de nmeros aleatorios. http://www.bcnn.net Law and Kelton. Simulation Modeling and Analysis (third edition). El captulo 7 est dedicado al tema. http://www.mhhe.com/lawkelton http://random.mat.sbg.ac.at/generators/ http://csrc.nist.gov/rng/rng6_4.html Documentacin y distintos tipos de pruebas para nmeros aleatorios. http://www.iro.umontreal.ca/~lecuyer/ Pgina personal de Pierre LEcuyer http://www.math.keio.ac.jp/~matumoto/MT2002/emt19937ar.html Pgina del algoritmo Mersene Twister de Matsumoto

Lenguajes de simulacin

2004-2005