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

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

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

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

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

L y M. B. D y E dan a luz a I. Se vuelve a cruzar la pareja A. B. responsable de . Fin del mes 1 La pareja A tiene un mes de edad. De esta manera Fibonacci presentó la sucesión en su libro Liber Abaci. D y E cumplen un mes. K. Nota: al contar la cantidad de letras distintas en cada mes. G y H. C. F. Fin del mes 5 A. Se cruza la pareja A. La pareja B cumple 1 mes. J. Fin del mes 3 La pareja A da a luz a la pareja C. publicado en 1202. G y H cumplen un mes. C. Muchas propiedades de la sucesión de Fibonacci fueron descubiertas por Édouard Lucas. Se cruzan las parejas A y B Fin del mes 4 Las parejas A y B dan a luz a D y E. Se cruzan las parejas A. C. Fin del mes 6 A. La pareja C cumple 1 mes. y en el segundo mes los nacidos parir también". se puede saber la cantidad de parejas totales que hay hasta ese mes. Se cruzan A.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. Se cruzan A. B y C dan a luz a F. D y E. Fin del mes 2 La pareja A da a luz a la pareja B.[1] Número de Mes Explicación de la genealogía Comienzo del mes 1 Nace una pareja de conejos (pareja A). D. B.

en el que compositores con tanto renombre como Béla Bartók.[2] También Kepler describió los números de Fibonacci. 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. y se basa en el siguiente Teorema Teorema Sea U una variable aleatoria uniforme en (0.1) y X una variable aleatoria continua con función de distribución una distribución F . es más: el cociente de dos términos sucesivos de toda sucesión recurrente de orden dos tiende al mismo límite. Esta sucesión ha tenido popularidad en el siglo XX especialmente en el ámbito musical. Entonces . Olivier Messiaen. La fomentación teórica en la que se basan es diferente a la de los generadores congruenciales lineales. 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). 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 .Técnicas para generar números aleatorios haberla denominado como se la conoce en la actualidad. este método consiste en utilizar la función de distribución acumulada 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.

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

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

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

note que si X es exponencial con media 1. el logaritmo negativo de un número aleatorio distribuido exponencialmente con parámetro 1.1) y por lo tanto log(1u) tiene la misma distribución como . Además. 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. cX es una exponencial con media c . entonces para alguna constante positiva c . .000 números aleatorios con una distribución exponencial con parámetro 1. 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.

X0 = 7 y m = 8. c = 7. X0 y c tienen que ser mayores que cero y la variable m debe ser mayor que las tres anteriores. por lo que es más preciso llamarles números pseudoaleatorios. De hecho. Entonces los resultados son: .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. 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. Supongamos que a = 5. El objetivo de un LCG es generar un valor aleatorio a partir de otro anterior. 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. 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. Para tal propósito tenemos que generar números a través de reglas determinísticas.

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

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

Sign up to vote on this title
UsefulNot useful