Sei sulla pagina 1di 8

Algoritmos para generar números

aleatorios
Algoritmo lineal

 Fue propuesto por D.H. Lehmer en 1951.


 Según Law y Kelton, este algoritmo ha sido el mas usado.

X i +1 = (aX i + c) mod(m) i = 1,2,3,4…,n

 Donde X0 es la semilla
 a es constante multiplicativa
 c es constante aditiva
 m es modulo
 X0 > 0, a > 0, c > 0, m > 0 y todos deben ser enteros
Algoritmos para generar números
aleatorios
Algoritmo lineal

 Para obtener números pseudo aleatorios se emplea la


siguiente ecuación

Xi
ri =
m −1
Para todo i = 1,2,3…,n
Algoritmos para generar números
aleatorios
Algoritmo lineal

 Diagrama de actividad

Generar 4 números ri con semilla 37, a = 19,


c = 33 y m = 100

Y1 = (19 * 37 + 33) mod 100= 36 r1 = 36/99 =0.3636


Y2 = (19 * 36 + 33) mod 100= 17 r2 = 17/99 =0.1717
Y3 = (19 * 17 + 33) mod 100= 56 r3 = 56/99 =0.5656
Y4 = (19 * 56 + 33) mod 100= 97 r4 = 97/99 =0.9797
Algoritmos para generar números
aleatorios
Algoritmo lineal
Algoritmos para generar números
aleatorios
Algoritmo lineal

 En el ejemplo anterior los parámetros se dieron de manera


arbitraria.
 Según Banks, Carson, Nelson y Nicol, para que el algoritmo
logre el máximo periodo de vida n, es necesario que:
 m = 2g
 a = 1 + 4k
 k es entero
 c es relativamente primo a m
 g es entero
 Bajo estas condiciones se obtiene un periodo de vida
máximo n = m = 2g
Algoritmos para generar números
aleatorios
Algoritmo lineal

 Generar suficientes números entre 0 y 1 con


parámetros: semilla X=6, k=3, g=3, c=7; hasta
encontrar el periodo máximo de vida n.
 a = 1 + 4(3) = 13
 m = 2g = 8
Y1 = (13 * 6 + 7) mod 8 = 5 r1 = 5/7 =0.714 Y5 = (13 * 2 + 7) mod 8= 1 r5 = 1/7 =0.142
Y2 = (13 * 5 + 7) mod 8 = 0 r2 = 0/7 =0.000 Y6 = (13 * 1 + 7) mod 8= 4 r6 = 4/7 =0.571
Y3 = (13 * 0 + 7) mod 8= 7 r3 = 7/7 =1.000 Y7 = (13 * 4 + 7) mod 8= 3 r7 = 3/7 =0.428
Y4 = (13 * 7 + 7) mod 8= 2 r4 = 2/7 =0.285 Y8 = (13 * 3 + 7) mod 8= 6 r8 = 6/7 =0.857
Algoritmos para generar números
aleatorios
Algoritmo lineal

•El numero generado para X[8] es 6, es


decir es igual a el valor inicial de la semilla.
•Si se siguen generando valores repetirían
la secuencia
Algoritmos para generar números
aleatorios
Algoritmo lineal

 Considerando el ejemplo anterior y tratando de pasar por alto las


observaciones mencionadas se pide generar valores con:
 a = 12
 Recuerda que k debe ser entero, si a = 1 + 4k no se cumpliría esto
Y1 = (12 * 6 + 7) mod 8 = 7 r1 = 7/7 =1.000
Y2 = (12 * 7 + 7) mod 8 = 3 r2 = 3/7 =0.428
Y3 = (12 * 3 + 7) mod 8 = 3 r3 = 3/7 =0.428

• En resultado del programa de computadora puede apreciarse que a partir del tercer valor se
repiten lo números generados, por tanto no se logra su máximo periodo de vida n.
• Se concluye que si los parámetros no cumplen con las observaciones mencionadas no se
logrará n

Potrebbero piacerti anche