Vous êtes sur la page 1sur 14

Tcnicas para generar nmeros aleatorios

MTODOS CONGRUENCIALES
Los principales generadores de nmeros pseudo-aleatorios utilizados hoy en da son los llamados generadores congruenciales lineales, introducidos por Lehmer en 1951. Un mtodo congruencial comienza con un valor inicial (semilla) x0, y los sucesivos valores xn,n > 1 se obtienen recursivamente con la siguiente frmula:

xn = axn-1 + b modulo m,
donde a, m y b son enteros positivos que se denominan, respectivamente, el multiplicador, el modulo y el incremento. Si b = 0, el generador se denomina multiplicativo; en caso contrario se llama mixto. La sucesin de nmeros pseudo-aleatorios un,n > 1 se obtiene haciendo u, = Como el siguiente resultado demuestra, cada xi esta completamente caracterizado por a,b,m y x0.

Proposicin 1.3. Los valores generados por un mtodo congruencial verifican: xn = anx0 + b mod m
an

a1

Demostracin.
Para n =1, tenemos que xi = ax0 + b mod m, lo que implica que existe k E Z+ tal que km + x1 = ax0 + b. Ahora, para n = 2, se tiene que x2 = = = = Por recurrencia, se tiene que

ax1 + b mod m a(ax0 + b km) + b mod


a2x0 + b(a + 1) akm mod m a2x0 + b(a + 1) mod m. m

x = a x + b(a + a + 1) mod m
3 2 3 0

x = a x + b(a - 1 + . + a + 1) mod m
n n n 0

= ax + b
n 0

Tcnicas para generar nmeros aleatorios

Por lo tanto, la primera objecin que se le puede hacer a este mtodo, objecin comn a todos los generadores de numeros pseudo-aleatorios, es que la sucesin de los valores xn no es en absoluto aleatoria. Sin embargo, posteriormente veremos que si elegimos las parmetros iniciales

convenientemente, la sucesin {un} puede asemejarse a una sucesin de nmeros aleatorios.

La segunda objecin es que los valores u pueden tomar slo los valores 0, mm, . . . , m-1, luego no hay posibilidad de generar un valor, por ejemplo entre m y m. Tomando m suficientemente grande m > 10 9, el conjunto de posibles valores es suficientemente denso en [0,1] como para que la sucesin asemeje a la de una variable continua uniforme en dicho intervalo. Ejemplo 1.4. Consideremos el generador congruencial xn = 5xn-1 + 1 mod 9 con x0 = 1.

Ejemplo Consideremos el generador congruencial xn = 5xn-1 + 3 mod 16, con xo = 7.

Se observa que el generador del ejemplo 1.4 no es adecuado, pues produce un ciclo de longitud 6 <

Tcnicas para generar nmeros aleatorios

m = 9 (la longitud de ciclo de un operador se denomina periodo). Sin embargo, en el generador del ejemplo 1.5 la longitud de ciclo coincide exactamente con el mdulo, lo cual es inevitable, pues es evidente que el periodo nunca puede exceder al mdulo. En este caso, se dice que el generador es de ciclo completo. Obsrvese que un generador sea de ciclo completo es independiente de la semilla que se utilice; sea cual sea x0 E { 1 , . . . , m}, el ciclo siempre tendr periodo m y se producir en el mismo orden. Sin embargo, si un generador no es de ciclo completo, la longitud de ciclo puede depender de la semilla utilizada. Si en el ejemplo 1.4 utilizamos x0 = 5 o x0= 8, el periodo resultante es 2. De los ejemplos anteriores se desprende que una cuestin de inters es como elegir los parmetros del generador de forma que este tenga ciclo completo. El siguiente teorema, propuesto por Hull y Dobell (1962) proporciona un caracterizacin en este sentido.

Teorema 1.6.Un generador congruencial tiene periodo completo si y solo si se cumplen las siguientes condiciones: 1. m y b son primos entre si. 2. Si q es un numero primo que divide a m, entonces q divide a a - 1. 3. Si 4 divide a m, entonces 4 divide a a - 1. Controlario 1.7 Un generador congruencial multiplicativo no puede tener periodo completo
Es evidente que es necesario que m sea grande con el fin de un periodo largo y una alta densidad en el intervalo [0,1]. Sin embargo, la operacin de dividir por m y calcular el resto es relativamente lenta. Una eleccin de m adecuada computacional- mente es m = 2k, donde k-bits es el tamao de palabra (unidad bsica de trabajo) del microprocesador. El hecho de que esta eleccin sea ventajosa reside en que nos podemos aprovechar del desbordamiento de datos (integer overflow) para no tener que realizar la operacin del generador explcitamente. La cuestin es que si tenemos una mquina de k-bits, entonces el mayor entero que puede ser representado es 2k 1 y en cualquier intento de representar un entero mayor H, que ocupara h > k dgitos binarios, se perderan los h k dgitos binarios ms a la izquierda, y los k dgitos que quedan se corresponden precisamente con H mod 2k. Ejemplo 1.8 Para ilustrar como aprovechar el desbordamiento de datos en el generador del ejemplo 1.5,

Tcnicas para generar nmeros aleatorios

veamos cmo generar x10 = 9 a partir de x9 = 14. Observemos que 5x14 + 3 = 73, que en binario es 1001001. Como nuestra capacidad es de 4 bits, el desbordamiento de datos produce que se pierdan los tres primeros dgitos, quedando 1001 que es la representacin binaria de x10 = 9.

Corolario 1.9. Un generador congruencial con m = 2k > 4 tiene periodo completo si y solo si b es impar y 1 = a mod 4.

Los generadores multiplicativos tienen la ventaja computacional de que no es necesario la suma de la constante b, pero, como hemos visto, no pueden tener periodo completo. Afortunadamente, es posible obtener periodo m 1 si m y a se eligen adecuadamente. Los generadores multiplicativos se introdujeron antes que los mixtos, han sido objeto de ms estudio y actualmente se utilizan mas que los mixtos. Al igual que los generadores mixtos, la mejor forma de elegir el modulo desde el punto de vista computacional es tomar m = 2k. Sin embargo, en este caso, el periodo mximo posible ser una cuarta parte del mdulo.

Observemos que 5x14 + 3 = 73, que en binario es 1001001. Como nuestra capacidad es de 4 bits, el desbordamiento de datos produce que se pierdan los tres primeros dgitos, quedando 1001 que es la representacin binaria de x10 = 9.

Corolario 1.9. Un generador congruencial con m = 2k > 4 tiene periodo completo si y solo si b es impar y 1 = a mod 4.

Los generadores multiplicativos tienen la ventaja computacional de que no es necesario la suma de la constante b, pero, como hemos visto, no pueden tener periodo completo. Afortunadamente, es posible obtener periodo m 1 si m y a se eligen adecuadamente. Los generadores multiplicativos se introdujeron antes que los mixtos, han sido objeto de ms estudio y actualmente se utilizan ms que los mixtos.

Tcnicas para generar nmeros aleatorios

Al igual que los generadores mixtos, la mejor forma de elegir el modulo desde el punto de vista computacional es tomar m = 2k. Sin embargo, en este caso, el periodo mximo posible ser una cuarta parte del mdulo. Proposicin 1.10. El periodo mximo de un generador congruencial multiplicativo con m = 2k > 16 es 2k_2. Dicho periodo maximal se alcance si y solo si x0 es impar y 3 = a mod 8 o 5 = a mod 8

Un generador multiplicativo muy utilizado, conocido como RANDU, tomaba m = 231 y a = 216 + 3. Sin embargo, se ha demostrado que tiene propiedades estadsticas bastante malas. Debido a los problemas que surgen de elegir m = 2k en los generadores multiplicativos, se han investigado otras alternativas para el valor de m. La ms satisfactoria es la propuesta de Hutchinson en 1966, que consiste en tomar como m el mayor primo menor que 2 k. Por ejemplo, si k = 31, el mayor primo menor que 231 es 231 1. A este respecto se tiene el siguiente resultado.

Teorema 1.11. Sea t la longitud de un ciclo maximal de un generador congruencial multiplicativo. Se verifica que:

1. 2. 3.

Si t = m 1, entonces m es primo Si m es primo, entonces t divide a m 1. Si m es primo, entonces t = m 1 si y slo si a es una raz primitiva de m (a es una raz

Primitiva tal que 1 =

Los generadores multiplicativos mas famosos utilizados por IBM tomaban m = 2 31 1 y a1 = 75 o a2 = 630360016.

Tcnicas para generar nmeros aleatorios

MTODO FIBONACCI EXTENDIDOS Historia La sucesin fue descrita por Fibonacci como la solucin a un problema de la cra de conejos: " Cierto

hombre tena una pareja de conejos juntos en un lugar cerrado y uno desea saber cuntos son creados a partir de este par en un ao cuando es su naturaleza parir otro par en un simple mes, y en el segundo mes los nacidos parir tambin".[1]

Nmero de Mes

Explicacin de la genealoga

Comienzo del mes 1

Nace una pareja de conejos (pareja A).

Fin del mes 1

La pareja A tiene un mes de edad. Se cruza la pareja A.

Fin del mes 2

La pareja A da a luz a la pareja B. Se vuelve a cruzar la pareja A.

Fin del mes 3

La pareja A da a luz a la pareja C. La pareja B cumple 1 mes. Se cruzan las parejas A y B

Fin del mes 4

Las parejas A y B dan a luz a D y E. La pareja C cumple 1 mes. Se cruzan las parejas A,

Fin del mes 5

A, B y C dan a luz a F, G y H. D y E cumplen un mes. Se cruzan A, B, C, D y E.

Fin del mes 6

A, B, C, D y E dan a luz a I, J, K, L y M. F, G y H cumplen un mes. Se cruzan A, B, C, D,

Nota: al contar la cantidad de letras distintas en cada mes, se puede saber la cantidad de parejas totales que hay hasta ese mes. De esta manera Fibonacci present la sucesin en su libro Liber Abaci, publicado en 1202. Muchas propiedades de la sucesin de Fibonacci fueron descubiertas por douard Lucas, responsable de

Tcnicas para generar nmeros aleatorios

haberla denominado como se la conoce en la actualidad.[2] Tambin Kepler describi los nmeros de Fibonacci, y el matemtico escocs Robert Simson descubri en 1753 que la relacin entre dos nmeros de Fibonacci sucesivos se acerca a la

relacinurea fi ( ) cuanto ms se acerque a infinito; es ms: el cociente de dos trminos sucesivos de toda sucesin recurrente de orden dos tiende al mismo lmite. Esta sucesin ha tenido popularidad en el siglo XX especialmente en el mbito musical, en el que compositores con tanto renombre como Bla Bartk, Olivier Messiaen, la banda Tool y Delia Derbyshire la han utilizado para la creacin de acordes y de nuevas estructuras de frases musicale

Las grandes ventajas de estos generadores son su rapidez y que tienen un periodo muy largo. La fomentacin terica en la que se basan es diferente a la de los generadores congruenciales lineales. Los generadores de Fibonacci se basan en una recurrencia del tipo

Donde r s son enteros dados y TRANSFORMACIN INVERSA

denota alguna de las operaciones

La tcnica de la transformacin inversa es probablemente la ms fcil de entender y la ms comnmente utilizada, este mtodo consiste en utilizar la funcin de distribucin acumulada F , y se basa en el siguiente Teorema Teorema

Sea

una variable aleatoria uniforme en (0,1) y

una variable aleatoria continua con

funcin de distribucin una distribucin F .

F , si F

es invertible entonces la variable aleatoria X =

F _1(U) tiene

Demostracin Sea F X denota la funcin de distribucin de X = F _1(U). Entonces

Tcnicas para generar nmeros aleatorios

Ahora como F es una funcin de distribucin invertible, se tiene que creciente de x, as la desigualdad a <

F (x) es una funcin montona no-

es equivalente a la desigualdad F (a) < F (b). Por lo tanto

Sea X una variable aleatoria con soporte (a,b) y funcin de densidad muestra aleatoria de tamao

(x), se desea generar una

de esta distribucin. Dentese a la funcin de distribucin acumulada

F (x),

entonces utilizando el resultado del teorema anterior, y considerando el hecho de que F (x) es

montona creciente en el soporte de la variable aleatoria en donde no es constante, entonces en este intervalo

la funcin de distribucin tiene inversa, sea sta F- 1, entonces se propone el

siguiente algoritmo para esta tcnica:

a) b)

Generar n valores u i ~ U (0,1) Regresar x = F- l (u i )

Es decir, Tomando una muestra distribuida uniformemente a lo largo del eje y entre 0 y 1, y posteriormente evaluando la distribucin inversa en este valor, se est generando una muestra de la variable aleatoria X. Puede notarse que en donde la funcin de distribucin acumulativa F(x) tiene una pendiente relativamente mayor, dar como resultado una alta densidad de puntos en el eje x (dando un mayor valor de f (x)), y por otro lado, donde F(x), tiene una pendiente relativamente menor (crece ms despacio), dar como resultado una densidad menor de puntos a lo largo del eje x (con un m enor valor de funcin de densidad f (x)).

Tcnicas para generar nmeros aleatorios

EJEMPLO 1

Esta tcnica puede ser ilustrada con la distribucin Weibull. En este caso, se tiene que F(x) = 1 , luego si U ~U(0,1) y U F(x) entonces se encuentra que x = b[-ln(1-u)]1/c . Realizando el programa en el Proyecto R, resulta despus de Generar 50,000 nmeros aleatorios.

Tcnicas para generar nmeros aleatorios

En las grficas de la figura 1.1) muestran en el primer cuadro los nmeros aleatorios sin agrupacin, en el segundo se presenta el histograma de dichos puntos en esta se observa que siguen un patrn parecida a la densidad Weibull, en la segunda imagen figura1.1b) se muestran las dos densidades, de los puntos generados con la tcnica y la densidad terica (lnea punteada) en donde se observa que son muy similares de esta forma se puede asegurar que la tcnica funciona, adems entre mayor sea el nmero de valores aleatorios mejor es la aproximacin. La transformacin inversa es una tcnica simple, eficiente para obtener la funcin de densidad de probabilidades, pero tiene un inconveniente muy fuerte, requiere que el decisor sea capaz de encontrar la inversa de la funcin de distribucin F(x), como esto no siempre es posible, es necesario considerar otras tcnicas. EJEMPLO 2 Si X es una variable aleatoria exponencial con parmetro 1, entonces la funcin de distribucin est dada por.

F(x) 1ex
Denotando x = F- 1 (u ), se tiene F(x) 1e
-x

F(x)=1e-x

Tomando logaritmos, x = log(1u) Por lo tanto, se puede generar una exponencial con parmetro 1, generando Una variable aleatoria U, estableciendo.

x F 1(U) log(1u)

Tcnicas para generar nmeros aleatorios

Se puede obtener por notacin que 1U es tambin uniforme sobre (0,1) y por lo tanto log(1u) tiene la misma distribucin como - log(U).
Esto es, el logaritmo negativo de un nmero aleatorio distribuido exponencialmente con parmetro 1. Adems, note que si X es exponencial con media 1, entonces para alguna constante positiva c , cX es una exponencial con media c . Por lo tanto una variable aleatoria exponencial X con parmetro (media 1/) puede ser generada por nmero aleatorio U y estableciendo X=-

A continuacin se muestran las grficas hechas en el Proyecto estadstico R para generar 50,000 nmeros aleatorios con una distribucin exponencial con parmetro 1.

Tcnicas para generar nmeros aleatorios

Generar Nmeros Aleatorios con Mtodos Congruenciales En los experimentos de simulacin es necesario el uso de nmeros aleatorios que representen una distribucin de probabilidad uniforme. Para tal propsito tenemos que generar nmeros a travs de reglas determinsticas, por lo que es ms preciso llamarles nmeros pseudoaleatorios. De hecho, podemos decir que una sucesin cumple la facultad de aleatoria si satisface las pruebas estadsticas de aleatoriedad Mtodos Congruenciales Los generadores de nmeros aleatorios que ms se usan son los generadores congruenciales lineales (LCG) ideados por Lehmer. El objetivo de un LCG es generar un valor aleatorio a partir de otro anterior. En este documento estudiaremos los tres mtodos congruenciales lineales ms populares: Congruencial Mixto La frmula (o relacin de recurrencia) es sencilla: X a X c m n n ( )mod 1 = + + Donde: X0 es la semilla a el multiplicador c la constante aditiva y m el mdulo A tener en cuenta: Los valores a, X0 y c tienen que ser mayores que cero y la variable m debe ser mayor que las tres anteriores. Para entrar en accin vamos a darle valores arbitrarios a cada uno de estos parmetros y estudiar que reaccin tienen en la relacin de recurrencia. Supongamos que a = 5, c = 7, X0 = 7 y m = 8. Entonces los resultados son:

Tcnicas para generar nmeros aleatorios

Ntese que despus de 8 pasadas el valor inicial de X se repite. Decimos entonces que el periodo del generador es 8 igualito al valor del mdulo Eso no siempre es as. Veamos un caso donde el periodo es menor a m. El valor de los parmetros es a = c = X0 = 4 y m = 6. Ahora lo resultados son:

Para que lo anterior quede mas claro, a continuacin se muestra un programa en Matlab que genera nmeros aleatorios implementando el generador congruencial lineal mixto. Cabe hacer la aclaracin que los nmeros deben estar entre 0 y 1, por lo que los residuos obtenidos con la funcin mod se deben dividir entre m-1. % Genera un conjunto de numeros pseudo aleatorios por el metodo congruencial lineal a partir de: % Sintaxis: genelin(a, c, n, s), donde: % a es el factor de multiplicacion igual 1 + 4k, % c es el factor aditivo y es primo relativo a m, % n es el numero de datos a generar y % s es la semilla o valor de inicio, que se sugiere sea impar. % g y k son numeros enteros. function [x, r] = genelin(a, c, n, s) i=1; while n > 2^i, i = i + 1; end % m es el modulo que se obtiene m = 2^g > n, m=2^i; for I=1:n u=a*s+c;

x(I)=mod(u,m); r(I)=x(I)/(m-1); format long, r; s=x(I); end

Tcnicas para generar nmeros aleatorios

Vous aimerez peut-être aussi