Вы находитесь на странице: 1из 9

Fundación Universitaria Los Libertadores

Generadores de números Aleatorios (Clasicos-Actuales)


Yuly Vanessa Rincon S. Braiyan Alexander Hurtado B.
Yvrincons@libertadores.edu.co Bahurtadob@libertadores.edu.co
Abril 9 2019

Resumen
Lo que se quiere conseguir con esta practica es implementar los diferentes metodos para
generar números aleatorios tanto los clasicos como el congruencial y actuales como el xorshift y
el retraso de Fibonacci utilizando el lenguaje de programación Python y comparando algunos
con sus librerias.

Pälabras clave : Aleatoriedad, Distribución, xn = (axn−1 + k)modM (1) pero estos meto-
Periodicidad, Uniformidad dos hoy en dia son facilmente predecı́bles usan-
do algebra de matrices y un poco de matemática
discreta como se ilustra mas adelante, por este
1. Objetivos motivo se han ideado nuevas maneras para ge-
nerar números aleatorios que no son tan faciles
1.1. General de predecir en este documento se mostrarán al-
1) Leer y analizar el material de Bb. sobre gunos.
números aleatorios e implementarlos experimen-
talmente en el lenguaje de programación Python. 3. Marco Teórico
1.2. Especificos Para lograr un buen diseño de alguna apli-
cación que tenga que ver con procesos aleatorios
1) Leer y entender el material teórico sobre es necesario simular datos al azar, necesitamos
números aleatorios. que un computador genere una secuencia aleato-
2) Implementar en python metodos clasicos y ac- ria, pero este no puede generar por si solo una
tuales para la generación de números aleatorios. secuencia de esta manera, por ello se empieza a
3) Realizar almenos pruebas minimas para ga- generar metodos para simular que son aleatorios
rantizar unos buenos diseños de los generadores. (en realidad pseudoaleatorios)
4) Implementar un codigo para Crakear los núme-
ros generados por un RNG Congruencial de re-
currencia común para predecir la secuencia. 3.1. RNG CONGRUENCIAL
Por sus siglas en ingles Random − number −
Generator es un generador que se basa en me-
2. Introducción todos congruentes, genera secuencias de la for-
2 3 2
Existen metodos clasicos para generar núme- ma f (x), f (x), f (x), ..... donde f (x) es f (f (x)
ros aleatorios usando diferentes recurrencias, el y asi..., su recurrencia mas básica es : xn =
congruential RNG más comun usa la recurrencia (axn−1 + k)modM eventualmente por introducir
la operación modulo se repetirá despues de cierto
ciclo para garantizar un periodo largo (Maximo

1
M) se debe escoger con cuidado los valores de unas tablas con buenos candidatos para escoger
a, k, M que son números enteros positivos, acon- y diseñar generadores Lagged-Fibonacci y XorS-
tinuación unos criterios para escogerlos: hif.
M = número primo mas grande que no se pase
de por ejemplo 232 , 264
a = número primo no mas grande que M 4. Analisis y Diseño
K = cualquier número impar
En esta sección se hara un breve analisis (im-
Habiendo escogido con cuidado estos parametros
portante) de los generadores y se diseñara los
solo se necesita una semilla (x0 ) aleatoria para
tres tipos de RNGs ya estudiados. Todo el codi-
empezar la secuencia, si la semilla es aleatoria y
go esta en el archivo randomLAB.py y aparte un
con distribución uniforme entonces la secuencia
archivo crakingCongruential.py que se explicará
tendrá distribución uniforme como indica el au-
mas adelante, en el primer archivo al ejecutarse
tor : ’If f is one-one function over Z then for any
el programa este empieza con la función menu.
random seed x0 chosen uniformly of Z the ran-
dom variable f (x) is also uniformly distributed
DEF MENU : Este desprende las opciones para
over Z’ [1][2].
escoger este esta dentro de un ciclo While pa-
ra que no termine hasta que la variable auxiliar
3.2. XORSHIFT tenga estado logico False (ocurre solo cuando se
Este tipo de generador se basa en una secuen- presiona la letra ’g’), acontinuación el objetivo de
cia de la siguiente manera βT, βT 2 , βT 2 , βT 3 , ... esta función es capturar un dato y almacenarlo
donde β es la semilla pero esta vez no es un en- en una variable posteriormente llamar una fun-
tero, es un vector binario de tamaño 1xn que ción semilla, una función captura e invoca una
debe cumplir las mismas condiciones que la se- clase y se repite hasta que la variable auxiliar se
milla de RNG Congruential, y T se puede ex- False.
presar como una matriz binaria nxn no singu-
lar que nos generará en la semilla varios cam- DEF SEMILLA : Usando la librerı́a datetime de
bios de posición en binario, normalmente es : python y su metodo .now().microsecond captu-
T = (I + La )(I + Rb )(I + Lc ), aquı́ I es la matriz ramos el tiempo en microsegundos y la almacene
identidad, L es la matriz que genera un cam- en ’dt’ despues pasa por unas operaciones básicas
bio a la izquierda de una posición, el exponen- para que retorne un valor aleatorio entre 0 y 999.
te indica que el cambio no es de 1 sino de a y
R es la transpuesta de L que genera un cam- DEF CAPTURA : Esta función se encarga de
bio a la derecha de uno, pero la secuencia tam- pedir un dato por teclado y asegurarse que sea
bien la podemos expresar de la siguiente manera un número entero con el comando ’int’ y en caso
: (I + La )∗ = y << a donde el operador ∗ indica de error este quede atrapado en la excepción.
la operación Xor en binario y << a indica un
desplazamiento de a cambios a la izquierda de Despues se tienen las clases para cada opción :
esta manera podemos aplicar la secuencia más
facilmente.[1][2][4] 4.1. RNG Congruencial (DISEÑO
PROPIO)
3.3. LAGGED-FIBONACCI Como se estudio en el marco teorico se usará
O retraso de Fibonacci, su recurrencia básica la recurrencia para el generador congruentcial
es : xn = xn−r ?xn−s con r > s y el operador ? usando la ecuación 1, esta clase recibe como pa-
indica cualquier operación artimetica o lógica co- rametros la variable ’N’ que es la cantidad de
mo +,-,*,Xor dependiendo de cual se escoga se números aleatorios y tambien recibe la semilla.
tendra un mejor o peor periodo. Su implemen- Teniendo en cuenta los parametros para escoger
tación es sencilla y tiene muy buenos resultados a, k, M se han seleccionado por conveniencia m
en los test de aleatoriedad desde que se escogan = 503 (Número primo), a = 499 (Número pri-
bien los parametros para r y s en [3] se muestran mo mas grande menos a M ), k = 13, con esta

2
secuencia aseguro un periodo de maximo M =
503, esto se demuestra facilmente generando los
números como se muestra en la figura 1.

Figura 3: 600 numeros de ejemplo con a=350,


k=70, M =800

Figura 1: 600 numeros de ejemplo con a=499, modullo randint.


k=13, M =503
Hasta aquı́ los clasicos ahora se explicarán los
actualizados.
La figura anterior muestra un ejemplo de los
primeros 600 números aleatorios generado con
los valores ya mencionados y se puede visuali-
zar facilmente (Señalado con rojo) que la secuen- 4.3. RNG-XORSHIFT (DISEÑO
cia se empieza a repetir despues de 501 muestras PROPIO)
producidas si se desea un periodo mas largo se
En el metodo ’init’ se crea un vector Y para
escogen numeros mas grandes pero que cumplan
almacenar los números y mostrarlos posterior-
con las condiciones ademas se aconseja escoger
mente, acontinuación se convierte la semilla que
M del orden de 26 4, un mal ejemplo de la elec-
esta en decimal a binario con el metrodo ’bina-
ción de estos números es por ejemplo la que se
rio’, posteriormente se escogieron los parametros
muestra en la figura 2.
a,b,c = 1,-8,-9 ya que despues de algunas pruebas
estos números generaron una mejor secuencia y
con periodos mucho más largos, estos parame-
tros representan el cambio a la izquierda de ’a’,
luego a la derecha ’b’ y finalmente a la izquierda
’c’ de la posición del vector binario para despues
llamar al metodo ’Xor’ que hace esta operación
lógica de la semilla original con la desplazada y
finalmente se llama al metodo ’decimal’ que cum-
ple la función de convertir un número binario a
Figura 2: 600 numeros de ejemplo con a=400, decimal, este codigo se hizo completo sin la ne-
k=12, M =500 cesidad de usar comando ni librerias de ayuda,
finalmente las constantes ’a’ aumenta de a 1 ca-
da vez que se llama y ’b’ y ’c’ disminuyyen en
Obsevamos que al no escoger bien estas cons- uno cada vez que se llaman.
tantes el resultado va a ser muy malo como este
otro ejemplo que se visualiza en la figura 3.
Esta secuencia tiene periodo 2 4.4. RNG-XORSHIFT (NUMPY
PYTHON)
4.2. RNG Congruencial (RANDOM Esta clase se basa en las mismas para el ante-
PYTHON) rior con la diferencia de que se usa la librerı́a de
python Numpy, se llama al metodo ’des’ el cual
Esta clase utiliza la librerı́a de python Ran- usando esta librerı́a se le pasa el número en deci-
dom y se generan números de 0 hasta 500 con el mal (semilla) y este por medio de las lineas sem

3
^= np.left shift(sem,abs(g)) para correr en bina- 5. CRAKING RNG CON-
rio a ’sem’, ’g’ veces a la izquierda y el operador
^ para hacer la operación Xor.
GRUENTIAL (ALGO EX-
TRA)
4.5. RNG-XORSHIFT
5.1. Analisis
(COMPARACIÖN ENTRE C
Y D) Los RGN congruenciales se han vuelto muy
faciles de crakear debido a que son clasicos, un
Esta clase lo que hace es una comparación Craking RNG consiste en un sistema que sea ca-
entre los RNG tanto el de diseño propio como el paz de encontrar las constantes de la recurrencia
de usando la librerı́a de numpy para mirar que común, el modulo M, el incremento K y el mul-
tan buen codigo es el primero con respecto al tiplicador a. En el documento ’Random Number
otro ya que llama las dos clases y les pasa la Generators’ el autor propone un metodo que ha
misma semilla un ejemplo de esto se visualiza en usado por mas de treinta años que solo nesecita
la figura 4. seguir los siguientes pasos : [1]
1) Tener una secuencia de numeros (A) produ-
cidos por un RGN Congruencial de recurrencia
común.
2) Hacer grupos de dos (A[0],A[1]),(A[1],A[2])
,(A[1],A[2]),......
3) Cada tres grupos encontrar la determinan-
te para obtener la secuencia de determinantes
Figura 4: Comparación entre los generadores (δ0, δ1, δ2, δ3, .....)
Xorshift de numpy y de diseño propio 4) Generar una secuencia con el maximo comun
divisor de los primeros dos determinante, luego
de los primeros tres, luego de los primerso cua-
tro, ....., despues de hacer esto unas seis veces
4.6. LAGGED-FIBONACCI notamos que el numero empieza a repetirse de
ahi en adelante, ese número es el modulo M.
Retrasp de Fobonacci, como estedio en la teo- 5)Con los tres primeros valores de la secuencia
ria su recurrencia mas comun es : xn = xn−r ∗ de entrada se arma el sistema de ecuacione con-
xn−s para r > s se escogio la operación multi- gruente que debe ser solucinado para encontrar
plicación ∗ ya que esta en comparación con la a y k.
operación Xor y +,- tiene un periodo muacho A[0] ∗ a + k = A[1]modM
mas largos (para más sobre periodicidad visite
: [1],[2][3],[4]), para generar secuencia menores a A[1] ∗ a + k = A[2]modM
20 números r y s son : 5 y 1 respectivamente y pa- Ejemplo1 : Se tiene la secuencia producida
ra mayores a 20 son : 17 y 5 respectivamente por por un RNG Congruencial [768 54 747 221 321
cosas de conveniencia y por que estos números 48 225 669 414 163 260 723 127 119 420 685 809
son aconsejables en tablas ya que generan bue- 630]. Determinar el modulo, el incremento y el
nos resultados. Una particularidad de esta clase multiplicador, comprobarlo.
es que esta es la unica que no recibe mas que la Solución : Siguiendo los pasos del item anterior
cantidad de números que se desean generar y este : 2) Generando parejas
genera sus propias semillas usando la librerı́a da-
tetime y time para esperar unos microsegundos, [768, 54][54, 747][747, 221][221, 321][321, 48]...
inmediatamente despues de generar cada semilla
se llama el metodo ’Secuencia’ que genera los re-
trasos y al final hace modulo 103 para no genere
números mas grandes a este y como es núme-
ro primo grande genera una buena distribución
uniforme.

4
3) Generando los determinantes La solución es de la forma :
n
|768 54| x = x0 + ∗k
d
|54 747|
|747 221|
∀ k = 0, 1, 2, ..., d − 1
δ1 = [768 ∗ 747 + 54 ∗ 221 + 747 ∗ 54]
x0 es la primera solución o solución unica de la
forma :

−[542 + 7472 + 768 ∗ 221] i b n


x0 = mod
d d d
δ1 = 104685
haciendo el proceso con varios obtenemos la
secuencia de determinantes que es :
−714 ∗ a = 693 mod 997
[104685, 207376, 133598, 56829, Se busca el inverso de di y queda despejada x0
Para nuestro caso d = 1 y por lo tanto se puede
dividir cualquier número entre 1. Ahora busca-
152541, 242271, 176469, 152346] mos el inverso de −714 en Z997 debe ser un núme-
4) Encontrando el maximo comun divisor de ro p que al multiplicarlo por (−714∗p)mod997 =
los primeros dos 1, otra manera seria ir probando con diferen-
tes números a que al multiplicarse por −714 y
104685 207376|997 haciendo mod997 de como resultado 693, este
número es 87 ya que −714 ∗ 87 = −62118 y esto
105 208|
mod997 = 693, para la primera variable a = 87
No existen más números en los cuales se pueda reemplazamos y despejamos k de (1) o (2).
dividir estos dos, haciendo estos con todos los
números obtenemos la siguiente secuencia 768 ∗ (87) + k = 54 mod 997

[997, 997, 997, 997, 997, 997] k = 54 − 66816 mod 997


k = −66762 mod 997
Deducimos que M = 997
5) Finalmente armamos y solucionamos el sis- Finalmenet −66762 mod 977 = 37
tema de ecuaciones :
k = 37

768 ∗ a + k = 54 mod 997 (1) Esto se demuestra facilmente ingresando los núme-
ros de la secuencia y al solucionar la ecuación con
54 ∗ a + k = 747 mod 997 (2) estos valores debe dar el siguiente número. Este
ejercicio es propuesto para que lo solucionen los
Ahora a (2) le restamos (1)
lectores en el documento ’Random Number Ge-
−714 ∗ a = 693 mod 997 (3) nerators, George Marsagli’, como inspiración al
documento se soluciona el ejercicio como ejem-
Es importante aclarar que esta es una ecuación plo en este articulo y se deja una secuencia como
en congruencias, lo que quiere decir que tendra ejecicio para los lectores :
solución si db es un número entero : Ejecicio : Se tiene la secuencia : [98, 258, 658,
661, 170, 438, 111, 789, 490, 241, 117, 804, 29,
i ∗ x = b mod n 584, 476, 206, 528, 336, 853, 650, 641, 120, 313,
297, 257, 157, 904, 279, 212, 543, 872, 199, 12,
Donde b = 693 y d = mcd(714, 997), de ser asi 43, 619, 65, 674, 701, 270, 688] Determinar el
la ecuación tiene d soluciones. multiplicador, el incremento y el modulo.

5
5.2. Diseño 6.1.1. Prueba de Medias
El codigo al ejecutarse empieza guardando en Una de las propiedades que debe cumplir las
la variable ’dato’ la lista que le regresa la funcion secuencias es que el valor esperado sea 0.5, Esta
capura la cual es lal encargada de pedir 10 mu- prueba consiste en tres sencillos pasos :
setras de los números .aleatorios”. se invoca la 1) Encontrar la media E(x) o valor esperado de
clase Craking y se pasa como parametro la lis- la secuencia con la ecuacion 1.
ta de muestras. CLASS CRAKING: Se inicializa PN
i=1 xi
el metodo init el cual llama el metodo determi- E(x) =
nantes que crea una lista vacia ’y’ se recorre la N
lista con un ciclo for y en la variable ’s’ se guar- (1) 2) Encontrar los limites superior e inferior
da la primera parte de la determinante, en ’f’ Limite inferior para la media (lim) :
se guarda la segunda parte de la determinante,
en ’t’ se restan las dos partes y se almacena el F/2
lim = E(x) − √ (2)
valor absoluto (ya que solo las necesitamos para 12 ∗ N
encontrar el mcd) en ’y’. Despues se guarda en Limite superior para la media (lsm) :
la variable ’self.m’ el valor que retorna la fun-
ción ’modulo’ al cual se le pasa la lista como F/2
lsm = E(x) + √ (3)
parametro y esta se encarga de llamar al metodo 12 ∗ N
’mcd’ el cual encuentra el mcd de dos números y 3) Mirar si la media esta en este rango, de ser asi
el metodo ’modulo’ con un for agrega a la lista esto nos garantiza que la media = 0.5
’y’ el mcd, de los primeros dos, de los primeros
tres, los primeros cuatro, .... haciendo mcd(a,b,c)
= mcd(mcd(a,b),c) finalmente retorna el ultimo 6.2. Prueba de Varianza
valor de la lista para asegurar que si sea el modu- Otra propiedad que debe cumplir la secuencia
lo. Ya teniendo el valor de M (modulo) se llama es que tenga varianza = 1/12 esto consiste en tres
el metodo ’sistema’ el cual se encarga de solu- sencillos pasos :
cionar el sistema de ecuaciones como se explica 1) Encontrar la varianza V(x) de la secuencia con
en el ejemplo 1. restamos de la ecuacion (1) a la ecuacion 4.
(2) mod m y se guardan en las variables ’p’ y PN
’h’ se encuentra el mcd de ’p’ y ’m’ y se com- i=1 x2i − 2 ∗ xi ∗ E(x) + E(x)2
E(x) = (4)
prueba que el sistema tenga solución con un if N −1
h %D==0, de no ser asi apararece un mensaje
2) Encontrar los limites superior e inferior
que dice ’El sistema no tiene solución’, aconti-
Limite inferior para la varianza (liv) :
nuación se incluye un ciclo while para buscar un
numero ’b’ que cumpla la condición de que al ser 2
X/2,n−1
multiplicado por ’p’ y modulo ’m’ de como re- liv =
12 ∗ (N − 1)
sultado ’h’ en ese caso el ciclo termina y procede
a hacer lo mismo con elvalor de ’k’ finalmente Limite superior para la varianza (lsv) :
retorna los valores de ’u’,’k’ que son ’a’ y ’k’ res- 2
X1−/2,n−1
pectivamente. Al final el programa muestra estos lsv =
tres valores. 12 ∗ (N − 1)
3) Mirar si la varianza esta en este rango, de
ser asi esto nos garantiza que la varianza de la
6. Pruebas de Aleatoriedad secuencia es : 1/12.
(ALGO EXTRA)
6.3. Prueba de chi-cuadrado
6.1. Analisis
La prueba chi-cuadrada busca determinar si
Existen varias pruebas para comprobar que la secuencia se distribuye uniformemente en el in-
tanbuenos son los generadores de numeros alea- tervalo [0,1] para llevar esta prueba acabo es ne-
torios nos centraremos en explicar 3. cesario dividir el intervalo (0,1) en subintervalos

6

en donde es recomendable M = N . posterior- la media, la varianza y los dos limites para cada
mente se clasifica cada numero pseudo-aleatorio uno.
del conjunto en m intervalos. A la cantidad de
números que se clasifican en cada intervalo se le
denimina frecuencia observada (Oi ) y a la canti- 7. Conclusiones
dad de números que se espera encontrar en ca-
1)Se logró leer y entender los documentos pro-
da intervalo se le llama frecuencia esperada (Ei )
puestos por el ingeniero subidos en la plataforma
teóricamente, la secuencia es igual a n/m. A par-
de Bb. para el analisis y entendimiento del mis-
tir de los valores de las frecuencia se determina
mo sobre la generación de números aleatorios y
el estadistico mediante la ecuación :
sus recurrencias.
m
Ei − Oi
X02 =
X

i=1 Ei . 2)Se realizaron los diseños de los generadores


de números aleatorios de acuerdo a la teoria ex-
Si el valor del estadistico x20 es menor al de las plicada en el marco teorico y hecha paso a paso
tablas de x2,m−1 , entonces no se puede rechazar de tal manera que se tenga un buen entendimien-
que el conjunto de números sigue una distribu- to de la mecánica para realizar los generadores.
ción uniforme. En caso contrario, se rechaza que
la secuencia sigue una distribución uniforme. 3)Apoyandose del programa MediasVarianza.py
se realizan las pruebas para cada uno de los me-
6.4. Diseño todos para la generación de números aleatorios
del programa ramdomLAB1.py, y el resultado es
Al poner como restricción que el número de el siguiemte:
datos a ingresar para hacer la prueba sea 40 po- Para cada uno se generan 40 números aleatorios
demos reemplazar F/2 de la ecuación 2 y 3 por y se pasan como entrada al programa para prue-
la constante 1.96, esto es equivalente ya que al bas de medias y varainza.
hacer el paso a paso es mirar en la tabla de dis-
tribución normal de probabilidad tomando una RNG-CONGRUENTE (DISEÑO PROPIO):
aceptación del 0.95, asi alfa = 1 - 0.95 = 0.05 Secuencia producida por el generador :
lo dividimos en 2 y como los datos son 40 - 1 = 674 701 270 688 736 856 159 909 790 991 995 8
39 buscamos en la table 0.025, 39 y nos arroja 33 594 501 767 435 602 521 817 560 416 56 153
el resultado 1.96, pasa lo mismo con los númera- 894 254 648 636 606 531 842 124 323 322 818 64
dores de la ecuación 4 y 5 que los reemplazamos 173 944 379 462
por 58.12 y 23.6543 respectivamente. Teniendo Resultado al pasarlo por el programa de pruebas
en cuenta la teoria de como funciona y los pa- :
rametros que acabamos de considerar se procede Media : 531.30
a explicar el diseño en codigo, primero garanti- Limite inferior : 531.2105
zamos que se introduzcan exactamente 40 datos Limite superior : 531.3894
si eso se cumple continua el codigo de lo con- Prueba de medias : La media se encuentra entre
trario aparece un mensaje y finaliza, de seguir, los limites asi que pasa la prueba de medias
comvierte estos elementos en una lista con el co- Varianza : 0.0641
mando list y se lo pasa a la clase, en clase se Limite inferior : 0.05054
procede a calcular la media o valor esperado con Limite superior : 0.12418
el metodo Media que suma todos los valores de Prueba de varianza : La varianza se encuentra
la lista y los retorna divididos en el tamaño de dentro los limites asi que pasa la prueba de va-
la lista, despues se llama al metodo limites pa- rianza
ra la media el cual usa la ecuacion 2 y 3 para
encontrar estos limites y retorna sus dos valores, RNG-CONGRUENTE (RANDOM PYTHON):
el programa continua con el metodo Vaianza que Secuencia producida por el generador :
calcula la varianza usando la ecuacion 4, por ulti- 524 166 809 847 598 860 716 234 449 434 800 974
mo calcula con el metodo limitas para la varianza 336 554 511 649 337 692 688 310 748 771 116 311
usando las ecuaciones 5 y 6, finalmente muestra

7
155 503 388 266 271 409 20 109 500 234 869 800 36 5 69 6 77 4
589 988 64 870 Resultado al pasarlo por el programa de pruebas
Resultado al pasarlo por el programa de pruebas :
: Media : 46.775 Limite inferior : 46.6855 Limite
Media : 511.725 Limite inferior : 511.6355 Limite superior : 46.8644 Prueba de medias : La me-
superior : 511.8144 Prueba de medias : La me- dia se encuentra entre los limites asi que pasa la
dia se encuentra entre los limites asi que pasa la prueba de medias
prueba de medias Varianza : 0.0760 Limite inferior : 0.05054 Li-
Varianza : 0.0660 Limite inferior : 0.05054 Li- mite superior : 0.12418 Prueba de varianza : La
mite superior : 0.12418 Prueba de varianza : La varianza se encuentra dentro los limites asi que
varianza se encuentra dentro los limites asi que pasa la prueba de varianza
pasa la prueba de varianza Finalmente se logro demostrar que los diseños
quedaron bien ya que pasaron estas dos pruebas
RNG-XORSHITT (DISEÑO PROPIO): Se- minimas para aleatoriedad.
cuencia producida por el generador : 4)La sección donde se describio el Craking RNG
923 99 75 959 396 959 75 99 923 0 577 587 742 se realizó un ejemplo analiticamente donde se en-
874 132 641 635 874 331 266 136 897 377 358 320 contraron las constantes de modulo, incremento
244 92 809 201 6 637 878 339 282 168 961 505 y multiplicador (m,k,a respectivamente) y el re-
614 832 247 sultado al pasar la secuencia 768 54 747 221 321
Resultado al pasarlo por el programa de pruebas 48 225 669 414 163 260 723 127 119 420 685
: 809 630 fue a = 87, k = 37, m = 997 usando
Media : 476.75 Limite inferior : 476.6605 Limite el programa CrakingCongruential.py se obtuvo
superior : 476.8394 Prueba de medias : La me- los siguientes resultados de la figura 5: En el
dia se encuentra entre los limites asi que pasa la
prueba de medias
Varianza : 0.10214 Limite inferior : 0.05054 Li-
mite superior : 0.12418 Prueba de varianza : La
varianza se encuentra dentro los limites asi que
pasa la prueba de varianza

RNG-XORSHITT (NUMPY PYTHON): Se-


cuencia producida por el generador :
150 119 758 147 80 147 758 119 150 0 210 221
562 20 979 857 613 125 170 260 440 800 499 918
735 369 658 215 350 620 139 198 316 552 3 947
793 485 890 679
Resultado al pasarlo por el programa de pruebas
:
Media : 426.275 Limite inferior : 426.1855 Limite
superior : 426.3644 Prueba de medias : La me-
Figura 5: Resultado experimental del Craking
dia se encuentra entre los limites asi que pasa la
prueba de medias
Varianza : 0.08721 Limite inferior : 0.05054 Li- documento [1] el autor realiza un ejemplo pa-
mite superior : 0.12418 Prueba de varianza : La ra la secuencia 308 785 930 695 864 237 1006
varianza se encuentra dentro los limites asi que 819 204 777 378 495 376 357 70 747 356 en-
pasa la prueba de varianza contró a = 69, k = 13, m = 1024 usando el pro-
grama CrakingCongruential.py se obtuvo los si-
RNG-LAGGED-FIBONACCI (DISEÑO PRO- guientes resultados de la figura 6: Con estas y
PIO): Secuencia producida por el generador : más pruebas que quiera hacer el lector demos-
16 65 68 16 98 41 91 69 6 77 4 65 85 33 43 84 39 tramos la eficiencia del programa CrakingCon-
48 88 87 14 3 23 2 12 64 84 51 19 18 79 68 16 98 gruential.py para generadores de números alea-

8
Figura 6: Resultado experimental del Craking

torios congruenciales de recurrencia común.

8. Bibliografı́a
[1] Marsaglia, George (2003) Random Num-
ber Generators,”Journal of Modern Applied Sta-
tistical Methods: Vol. 2 : Iss. 1 , Article 2. Avai-
lable at: http://digitalcommons.wayne.edu/
[2] Matrices and the Structure of Random Num-
ber Sequences George Marsaglia and Liang-Huei
Tsay Computer Science Department Washing-
ton State University
[3] TABLES OF LINEAR CONGRUENTIAL GE-
NERATORS OF DIFFERENT SIZES AND GOOD
LATTICE STRUCTURE - PIERRE L’ECUYER
MATHEMATICS OF COMPUTATION Volu-
me 68, Number 225, January 1999, Pages 249–260
[4] Xorshift RNGs George Marsaglia The Florida
State University
[5] LOS NÚMEROS ALEATORIOS Y LA IN-
GENIERIA LUIS GERARDO ASTAIZA A. In-
genlero Mecanlco, M.I.S. Profesor Asoclado Unl-
versldad NaCIONAL [6] UNIFORMIDAD DE
LOS NÚMEROS ALEARTORIOS

Вам также может понравиться