Técnicas para generar números aleatorios

MÉTODOS CONGRUENCIALES
Los principales generadores de números pseudo-aleatorios utilizados hoy en día son los llamados generadores congruenciales lineales, introducidos por Lehmer en 1951. Un método congruencial comienza con un valor inicial (semilla) x0, y los sucesivos valores xn,n > 1 se obtienen recursivamente con la siguiente fórmula:

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 sucesión de números 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.

Proposición 1.3. Los valores generados por un método congruencial verifican: xn = anx0 + b mod m
an —

1

a–1

Demostración.
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

Se observa que el generador del ejemplo 1. el conjunto de posibles valores es suficientemente denso en [0.1] como para que la sucesión asemeje a la de una variable continua uniforme en dicho intervalo. Sin embargo.Técnicas para generar números aleatorios Por lo tanto. La segunda objeciín es que los valores u pueden tomar sílo los valores 0. mm. m-1. . posteriormente veremos que si elegimos las parámetros iniciales convenientemente. objeción común a todos los generadores de numeros pseudo-aleatorios. con xo = 7. Consideremos el generador congruencial xn = 5xn-1 + 1 mod 9 con x0 = 1. . por ejemplo entre m y m.4. luego no hay posibilidad de generar un valor. la sucesión {un} puede asemejarse a una sucesión de números aleatorios. pues produce un ciclo de longitud 6 < . Tomando m suficientemente grande m > 10 9. es que la sucesión de los valores xn no es en absoluto aleatoria. .4 no es adecuado. Ejemplo Consideremos el generador congruencial xn = 5xn-1 + 3 mod 16. Ejemplo 1. la primera objeción que se le puede hacer a este método. .

el ciclo siempre tendrá periodo m y se producirá en el mismo orden. Ejemplo 1. Controlario 1. entonces el mayor entero que puede ser representado es 2k — 1 y en cualquier intento de representar un entero mayor H. lo cual es inevitable. si un generador no es de ciclo completo. y los k dígitos que quedan se corresponden precisamente con H mod 2k. 3. El hecho de que esta elección sea ventajosa reside en que nos podemos aprovechar del desbordamiento de datos (integer overflow) para no tener que realizar la operación del generador explícitamente. Si q es un numero primo que divide a m. Sin embargo. m y b son primos entre si. Una elección de m adecuada computacional. 2. el periodo resultante es 2. En este caso.1]. donde k-bits es el tamaño de palabra (unidad básica de trabajo) del microprocesador.4 utilizamos x0 = 5 o x0= 8. la operación de dividir por m y calcular el resto es relativamente lenta. . pues es evidente que el periodo nunca puede exceder al módulo.6. Sin embargo. De los ejemplos anteriores se desprende que una cuestión de interés es como elegir los parámetros del generador de forma que este tenga ciclo completo.mente es m = 2k.5 la longitud de ciclo coincide exactamente con el módulo. Si en el ejemplo 1. sea cual sea x0 E { 1 . .Un generador congruencial tiene periodo completo si y solo si se cumplen las siguientes condiciones: 1. Teorema 1. entonces 4 divide a a . . se perderían los h — k dígitos binarios más a la izquierda. propuesto por Hull y Dobell (1962) proporciona un caracterización en este sentido.1. se dice que el generador es de ciclo completo. en el generador del ejemplo 1.5. Obsérvese que un generador sea de ciclo completo es independiente de la semilla que se utilice. que ocuparía h > k dígitos binarios. La cuestión es que si tenemos una máquina de k-bits. Sin embargo. Si 4 divide a m.1.Técnicas para generar números aleatorios m = 9 (la longitud de ciclo de un operador se denomina periodo). entonces q divide a a . El siguiente teorema.8 Para ilustrar como aprovechar el desbordamiento de datos en el generador del ejemplo 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. m}. la longitud de ciclo puede depender de la semilla utilizada.

quedando 1001 que es la representación binaria de x10 = 9. es posible obtener periodo m — 1 si m y a se eligen adecuadamente. han sido objeto de más estudio y actualmente se utilizan más que los mixtos.9. el desbordamiento de datos produce que se pierdan los tres primeros dígitos. Observemos que 5x14 + 3 = 73. no pueden tener periodo completo. como hemos visto. el periodo máximo posible será una cuarta parte del módulo. Corolario 1. que en binario es 1001001.9. Los generadores multiplicativos tienen la ventaja computacional de que no es necesario la suma de la constante b. . Los generadores multiplicativos se introdujeron antes que los mixtos. han sido objeto de más estudio y actualmente se utilizan mas que los mixtos. Los generadores multiplicativos tienen la ventaja computacional de que no es necesario la suma de la constante b.Técnicas para generar números aleatorios veamos cómo generar x10 = 9 a partir de x9 = 14. Los generadores multiplicativos se introdujeron antes que los mixtos. el desbordamiento de datos produce que se pierdan los tres primeros dígitos. que en binario es 1001001. Como nuestra capacidad es de 4 bits. Sin embargo. es posible obtener periodo m — 1 si m y a se eligen adecuadamente. Corolario 1. en este caso. pero. Observemos que 5x14 + 3 = 73. Un generador congruencial con m = 2k > 4 tiene periodo completo si y solo si b es impar y 1 = a mod 4. la mejor forma de elegir el modulo desde el punto de vista computacional es tomar m = 2k. Al igual que los generadores mixtos. pero. Afortunadamente. Un generador congruencial con m = 2k > 4 tiene periodo completo si y solo si b es impar y 1 = a mod 4. como hemos visto. Afortunadamente. quedando 1001 que es la representación binaria de x10 = 9. Como nuestra capacidad es de 4 bits. no pueden tener periodo completo.

Sea t la longitud de un ciclo maximal de un generador congruencial multiplicativo. Si t = m — 1. 3. Sin embargo. entonces t divide a m — 1. el mayor primo menor que 231 es 231 — 1. Si m es primo. Sin embargo.11. .10. el periodo máximo posible será una cuarta parte del módulo. entonces t = m — 1 si y sólo si a es una raóz primitiva de m (a es una raíz Primitiva tal que 1 = Los generadores multiplicativos mas famosos utilizados por IBM tomaban m = 2 31 — 1 y a1 = 75 o a2 = 630360016.Técnicas para generar números aleatorios Al igual que los generadores mixtos. la mejor forma de elegir el modulo desde el punto de vista computacional es tomar m = 2k. si k = 31. A este respecto se tiene el siguiente resultado. El periodo máximo de un generador congruencial multiplicativo con m = 2k > 16 es 2k_2. conocido como RANDU. Debido a los problemas que surgen de elegir m = 2k en los generadores multiplicativos. que consiste en tomar como m el mayor primo menor que 2 k. La más satisfactoria es la propuesta de Hutchinson en 1966. 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. se han investigado otras alternativas para el valor de m. Por ejemplo. entonces m es primo Si m es primo. 2. en este caso. Se verifica que: 1. tomaba m = 231 y a = 216 + 3. se ha demostrado que tiene propiedades estadísticas bastante malas. Teorema 1. Proposición 1.

[1] Número de Mes Explicación de la genealogía Comienzo del mes 1 Nace una pareja de conejos (pareja A). C. B. Se cruzan las parejas A y B Fin del mes 4 Las parejas A y B dan a luz a D y E. Se vuelve a cruzar la pareja A. L y M. Fin del mes 2 La pareja A da a luz a la pareja B. D. D y E cumplen un mes. publicado en 1202. B. B y C dan a luz a F. se puede saber la cantidad de parejas totales que hay hasta ese mes. B. Se cruzan A. Nota: al contar la cantidad de letras distintas en cada mes. Se cruzan las parejas A. Muchas propiedades de la sucesión de Fibonacci fueron descubiertas por Édouard Lucas. De esta manera Fibonacci presentó la sucesión en su libro Liber Abaci. y en el segundo mes los nacidos parir también". F. D y E dan a luz a I. Se cruza la pareja A. responsable de . Fin del mes 6 A. Fin del mes 1 La pareja A tiene un mes de edad. Se cruzan A. G y H. C. La pareja B cumple 1 mes. Fin del mes 5 A. K. La pareja C cumple 1 mes. D y E. G y H cumplen un mes. Fin del mes 3 La pareja A da a luz a la pareja C.Técnicas para generar números aleatorios MÉTODO FIBONACCI EXTENDIDOS Historia La sucesión fue descrita por Fibonacci como la solución a un problema de la cría de conejos: " Cierto hombre tenía una pareja de conejos juntos en un lugar cerrado y uno desea saber cuántos son creados a partir de este par en un año cuando es su naturaleza parir otro par en un simple mes. C. J.

[2] También Kepler describió los números de Fibonacci. y se basa en el siguiente Teorema Teorema Sea U una variable aleatoria uniforme en (0. en el que compositores con tanto renombre como Béla Bartók. Los generadores de Fibonacci se basan en una recurrencia del tipo Donde r s son enteros dados y TRANSFORMACIÓN INVERSA denota alguna de las operaciones La técnica de la transformación inversa es probablemente la más fácil de entender y la más comúnmente utilizada. F . la banda Tool y Delia Derbyshire la han utilizado para la creación 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. Esta sucesión ha tenido popularidad en el siglo XX especialmente en el ámbito musical. y el matemático escocés Robert Simson descubrió en 1753 que la relación entre dos números de Fibonacci sucesivos se acerca a la relaciónáurea fi ( ) cuanto más se acerque a infinito. este método consiste en utilizar la función de distribución acumulada F . es más: el cociente de dos términos sucesivos de toda sucesión recurrente de orden dos tiende al mismo límite.1) y X una variable aleatoria continua con función de distribución una distribución F . La fomentación teórica en la que se basan es diferente a la de los generadores congruenciales lineales.Técnicas para generar números aleatorios haberla denominado como se la conoce en la actualidad. Olivier Messiaen. si F es invertible entonces la variable aleatoria X = F _1(U) tiene Demostración Sea F X denota la función de distribución de X = F _1(U). Entonces .

1. se está generando una muestra de la variable aleatoria X. Tomando una muestra distribuida uniformemente a lo largo del eje y entre 0 y 1. dará como resultado una alta densidad de puntos en el eje x (dando un mayor valor de f (x)).b) y función de densidad muestra aleatoria de tamaño f (x). donde F(x). entonces se propone el siguiente algoritmo para esta técnica: a) b) Generar n valores u i ~ U (0. se tiene que creciente de x. Por lo tanto Sea X una variable aleatoria con soporte (a.Técnicas para generar números aleatorios Ahora como F es una función de distribución invertible. sea ésta F. Denótese a la función de distribución acumulada F (x). se desea generar una n de esta distribución. entonces utilizando el resultado del teorema anterior. entonces en este intervalo la función de distribución tiene inversa. Puede notarse que en donde la función de distribución acumulativa F(x) tiene una pendiente relativamente mayor. así la desigualdad a < F (x) es una función monótona no- b es equivalente a la desigualdad F (a) < F (b). y por otro lado. . y posteriormente evaluando la distribución inversa en este valor. y considerando el hecho de que F (x) es monótona creciente en el soporte de la variable aleatoria en donde no es constante.l (u i ) Es decir.1) Regresar x ¡ = F. tiene una pendiente relativamente menor (crece más despacio). dará como resultado una densidad menor de puntos a lo largo del eje x (con un m enor valor de función de densidad f (x)).

luego si U ~U(0. En este caso. Realizando el programa en el Proyecto R. se tiene que F(x) = 1 .Técnicas para generar números aleatorios EJEMPLO 1 Esta técnica puede ser ilustrada con la distribución Weibull.000 números aleatorios. .1) y U F(x) entonces se encuentra que x = b[-ln(1-u)]1/c . resulta después de Generar 50.

Técnicas para generar números aleatorios En las gráficas de la figura 1. se puede generar una exponencial con parámetro 1. EJEMPLO 2 Si X es una variable aleatoria exponencial con parámetro 1. . x = log(1u) Por lo tanto. requiere que el decisor sea capaz de encontrar la inversa de la función de distribución F(x). es necesario considerar otras técnicas. La transformación inversa es una técnica simple. en el segundo se presenta el histograma de dichos puntos en esta se observa que siguen un patrón parecida a la densidad Weibull. F(x) 1ex Denotando x = F.1 (u ). de los puntos generados con la técnica y la densidad teórica (línea punteada) en donde se observa que son muy similares de esta forma se puede asegurar que la técnica funciona. como esto no siempre es posible. estableciendo. eficiente para obtener la función de densidad de probabilidades. pero tiene un inconveniente muy fuerte. entonces la función de distribución está dada por.1b) se muestran las dos densidades. generando Una variable aleatoria U.1ª) muestran en el primer cuadro los números aleatorios sin agrupación. se tiene F(x) 1e -x ó F(x)=1e-x Tomando logaritmos. en la segunda imagen figura1. además entre mayor sea el número de valores aleatorios mejor es la aproximación.

Esto es.log(U).x F 1(U) log(1u)  Técnicas para generar números aleatorios Se puede obtener por notación que 1U es también uniforme sobre (0. entonces para alguna constante positiva c .1) y por lo tanto log(1u) tiene la misma distribución como .000 números aleatorios con una distribución exponencial con parámetro 1. Además. cX es una exponencial con media c . Por lo tanto una variable aleatoria exponencial X con parámetro λ (media 1/λ) puede ser generada por número aleatorio U y estableciendo X=- A continuación se muestran las gráficas hechas en el Proyecto estadístico R para generar 50. . el logaritmo negativo de un número aleatorio distribuido exponencialmente con parámetro 1. note que si X es exponencial con media 1.

Para tal propósito tenemos que generar números a través de reglas determinísticas. Supongamos que a = 5.Técnicas para generar números aleatorios Generar Números Aleatorios con Métodos Congruenciales En los experimentos de simulación es necesario el uso de números aleatorios que representen una distribución de probabilidad uniforme. c = 7. De hecho. En este documento estudiaremos los tres métodos congruenciales lineales más populares: Congruencial Mixto La fórmula (o relación 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 módulo 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. El objetivo de un LCG es generar un valor aleatorio a partir de otro anterior. Entonces los resultados son: . por lo que es más preciso llamarles números pseudoaleatorios. Para entrar en acción vamos a darle valores arbitrarios a cada uno de estos parámetros y estudiar que reacción tienen en la relación de recurrencia. podemos decir que “una sucesión cumple la facultad de aleatoria si satisface las pruebas estadísticas de aleatoriedad” Métodos Congruenciales Los generadores de números aleatorios que más se usan son los generadores congruenciales lineales (LCG) ideados por Lehmer. X0 = 7 y m = 8.

m=2^i. s). % n es el numero de datos a generar y % s es la semilla o valor de inicio. % Genera un conjunto de numeros pseudo aleatorios por el metodo congruencial lineal a partir de: % Sintaxis: genelin(a. c. por lo que los residuos obtenidos con la función mod se deben dividir entre m-1. . % g y k son numeros enteros. i = i + 1. c. r] = genelin(a. que se sugiere sea impar. Cabe hacer la aclaración que los números deben estar entre 0 y 1. Decimos entonces que el periodo del generador es 8… igualito al valor del módulo… Eso no siempre es así. a continuación se muestra un programa en Matlab que genera números aleatorios implementando el generador congruencial lineal mixto. El valor de los parámetros es a = c = X0 = 4 y m = 6. Ahora lo resultados son: Para que lo anterior quede mas claro. function [x. % c es el factor aditivo y es primo relativo a m. for I=1:n u=a*s+c.Técnicas para generar números aleatorios Nótese que después de 8 pasadas el valor inicial de X se repite. while n > 2^i. s) i=1. end % m es el modulo que se obtiene m = 2^g > n. donde: % a es el factor de multiplicacion igual 1 + 4k. n. n. Veamos un caso donde el periodo es menor a m.

r(I)=x(I)/(m-1).m). end Técnicas para generar números aleatorios . format long. r.x(I)=mod(u. s=x(I).

Sign up to vote on this title
UsefulNot useful