Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Generaodor NumAleatorio
Generaodor NumAleatorio
=x
0
a
=a
k
c
a
a
c
k
1
1
'
m=m
Demostracin: tenemos que m c ax x
n n
mod ) (
1
+
+
, obteniendo nuevos
trminos: m c ac x a m c m c ax a m c ax x
n n n n
mod ) ( mod ) ) mod ) ( (( mod ) (
2
1 2
+ + + + +
+ +
m c ac x a x a
m c m c m c ax a a m c ax x
n n
n n n
mod ) (
mod ) ) mod ) ) mod ) ( ( (( mod ) (
2 3
2 3
+ + +
+ + + +
+ +
En general
m c ac c a c a x a x
k k
n
k
k n
mod ) (
2 1
+ + + + +
+
L , operando queda: m c
a
a
x a x
k
n
k
k n
mod )
1
1
(
+
+
,
Esto tambin se puede utilizar para paralelizar la obtencin de los trminos. Si tenemos un
ordenador con procesamiento paralelo, podemos, partiendo de la semilla asignar a cada procesador la
generacin de una subsecuencia de trminos. Por ejemplo con tres procesadores se iran generando los
trminos de la siguiente forma:
x
0
x
1
x
2
x
3
x
4
x
5
x
6
.........................
Generacin de nmeros aleatorios
56
As a partir de un nmero no tenemos que generar el siguiente trmino sino el que hay k-
posiciones despus de l.
3.3.3.- Eleccin del mdulo
Nuestro objetivo es generar series con el mayor nmero posible de elementos, es decir series
con mxima longitud de periodo. Para ello, el mdulo que se elija para el generador ha de ser grande
dado que x elemento de la serie se cumple que 0x<m, es decir, la longitud de periodo va a ser m
como mximo.
Por otro lado nos interesa que la obtencin de la serie se realice de forma rpida. Dado que en
el mtodo que estamos tratando se ha de realizar un mdulo, consistente en una divisin, que es
comparativamente la operacin ms lenta, podemos encontrar valores de mdulo que simplifiquen
dicha operacin. Si en un sistema decimal elegimos como mdulo m=10
k
, la operacin mdulo
aplicada a un nmero, consistira simplemente en quedarnos con las ltimas k ltimas cifras de dicho
nmero. Al trabajar el ordenador en un sistema binario, la operacin se logra realizar con rapidez si se
elige un mdulo de la forma m=2
e
, y el mdulo va a consistir en tomar las e ltimas cifras del nmero.
Uniendo los dos aspectos anteriores nos interesa un elegir como mdulo un nmeros de la
forma 2
e
y que sea lo ms grande posible, siempre y cuando sea posible su representacin en el
ordenador. Por tanto si consideramos que w es el mayor nmero representable, tomaremos un e tal que
2
e
sea lo ms prximo a w (2
e
w).
Esta eleccin de mdulo presenta, no obstante, un inconveniente: las cifras menos
significativas del nmero no se forman de manera tan aleatoria como las posiciones ms altas (las
cifras ms bajas ciclan ms rpidamente que las ms altas). Esto se demuestra observando que las
posiciones ms bajas forman una subsucesin cogruencial lineal de periodo menor que el de las cifras
ms altas (2
e
).
Demostracin: sea m=
2e
y r<e2
r
/2
e
r
n n
x y 2 mod , es la sucesin de los r-cifras ms a la derecha de x
n
m c ax x
n n
mod ) (
1
+
+
+ +
+ +
r
n
r
n
r
n n
c ax m c ax x y 2 mod ) ( 2 mod ) mod ) (( 2 mod
1 1
(por ser 2
r
divisor de m)
r
n
r r
n
c ay c ax 2 mod ) ( 2 mod ) ) 2 mod (( + +
queda demostrado que la sucesin {y
n
} es una sucesin congruencial lineal, su periodo
mximo es 2
r
, mientras que el periodo mximo de la sucesin {x
n
} es m=2
e
que es un periodo mayor.
Esto significa que las r-ltimas cifras de los elementos ciclan ms rpidamente.
Generacin de nmeros aleatorios
57
Para evitar este inconveniente, si nos interesa que las cifras ms bajas se comporten de forma
ms aleatoria, podemos tomar como mdulo:
'
t
<
1 2
,
e
m
w m que tal primo n m
para que as se tengan pocos divisores que son los que dan los problemas.
En la mayora de las aplicaciones, los bits menos significativos no son importantes y es buena
una eleccin de m=2
e
=w.
3.3.4.- Eleccin del multiplicador e incremento
En esta seccin vamos a estudiar las propiedades de a y c para que su eleccin nos garantice la
obtencin de un periodo mximo, lo cual no implica que la serie obtenida sea aleatoria.
Si tomamos m de la forma m=P
1
P
2
....P
n
(siendo P
i
factor primo de m), slo se obtendr
periodo mximo con a=1, valor con el que quedaba demostrado que la serie obtenida no era aleatoria.
Se buscar un mdulo de la forma
r
k
r
k k
P P P m L
2 1
2 1
, lo cual nos permitir jugar con los valores
de a y c.
Teorema 1.
Para que un generador congruencial lineal mixto genere series con longitud de periodo
mximo m, se deble cumplir:
1) c y m sean primos relativos (c<m).
2) a sea mltiplo de los factores primos de m; a-1=k(P
1
P
2
....P
r
), siendo P
i
factor primo
de m.
3) Si m es mltiplo de 4, a-1 tambin debe serlo (si m=k4 a-1=k4).
Vamos a ver que son amplias las posibilidades de eleccin de a y c para que se cumpla el
teorema anterior.
Por la primera parte, se ha de cumplir que el mcd(c,m)=t1, luego dado un m se pueden tomar
como posibles valores de c:
1
1
) 1 ( ) (
i
e
i
n
i
i
P P m
Segn la segunda parte a-1 debe ser mltiplo de los factores primos de m. Si m=P
1
P
2
....P
n
, entonces debe ocurrir que a-1=k(P
1
P
2
....P
n
)=km, por otro lado sabemos que a<m:
1 0
1
1
< <
a k
km a
m a m a
Generacin de nmeros aleatorios
58
Vemos que tomar mdulos de esta forma no interesa. Por el mismo razonamiento no interesa
un mdulo de la forma m=P.
Por lo anterior nos vamos a centrar en mdulos de la forma
n m
k
r
k k
P P P P P m
r
L L
2 1
2 1
. Si esto es as, entonces debe cumplirse por la segunda
condicin del teorema ) ( 1
2 1 n m r
P P P P P k a L , por otro lado sabemos que a-1<m por
tanto:
n m
k
r
k k
n m r
P P P P P m P P P P P k a
r
< L L L
2 1
2 1 2 1
) ( 1
1 1
2
1
1
2 1
<
r
k
r
k k
P P P k L ;
El resultado anterior nos ofrece el rango de posibles valores para k y de ah se puede obtener el
nmero de posibles valores de a.
Si m=2
e
y e2 m=k*4, al ser mltiplo de 4 por la tercera condicin del teorema se
restringen las posibilidades de a y ahora slo sirven aquellos valores que garanticen que a-1=k*4.
Como a-1<m, a-1=k*4<2
e
k<2
e-2
, que son las posibles elecciones de k y por tanto de a.
Como se ha mencionado anteriormente el teorema garantiza que el periodo de la serie sea
mximo pero no que la serie obtenida sea aleatoria.
En el caso de un generador lineal multiplicativo (c=0), no se puede verificar la primera
condicin del teorema 1, por lo que la longitud de las series obtenidas nunca podr ser el mximo m.
El teorema siguiente nos dir qu valores elegir para este tipo de generadores.
Teorema 2.
En un generador congruencial multiplicativo se alcanza periodo mximo (m) si y slo si se
cumple:
1) x
0
y m son primos relativos (mcd(x
0
,m)=1)
2) a es raz primitiva mdulo m.
Demostracin del primer apartado:
Supongamos que no son primos relativos entonces
d k m d k x m d y x d que tal d ' ; / /
0 0
sustituyendo en la serie
d k k a d k d k a d k d k a x ) ' ( ' ) ' ( mod ) (
1
extendiendo esto a cualquier trmino de la serie, N n d k x
n
, por tanto los trminos
que vamos obteniendo son los mltiplos de d, el divisor de ambos. Por lo cual interesa que sean
primos relativos.
Generacin de nmeros aleatorios
59
Las posibilidades de eleccin de x
0
para que se cumpla la primera condicin del teorema son
1
1
) 1 ( ) (
i
e
i
n
i
i
P P m
Teorema 3.
Sea m=p
e
, a es raz primitiva mdulo m sii
1) si p=2 si:
e=1 a debe ser impar.
e=2 a mod 4 debe ser 3.
e=3 a mod 8 debe ser 3, 5 7.
e4 a mod 8 debe ser 3 5.
2) si p es impar si:
'
1 mod 1
mod 0
# 1
/ 1
p de primo divisor q con p a
p a
e
q p
'
>
2 1
mod 1
#
p a
e
p
3.4.- Otros mtodos
3.4.1.- Generadores Cogruenciales Cuadrticos
Son del tipo m c ax dx x
n n n
mod ) (
2
1
+ +
+
. La longitud de periodo mxima que se alcanza
con ellos es m, igual que en el caso del G.G.L mixto y sin embargo ha de realizar ms operaciones que
ste.
Teorema 4.
Para obtener longitud mxima de periodo (m) en un generador congruencial cuadrtico, se ha
de cumplir:
1) c y m deben ser primos relativos.
2) d y a-1 han de ser mltiplos de todos los factores primos impares de m. (Si m=2
e
a-
1=d=1).
3) Si:
'
par ser debe d
a d
k m
4 mod ) 1 (
4
Generacin de nmeros aleatorios
60
'
par ser debe d
a d
k m
2 mod ) 1 (
2
4) Si m=k9
'
'
9 mod 6
9 mod 1
9 mod 0
cd
a
d bien o
Se puede definir tambin el G.C.L. generalizado como
m x a x a x a x
k n k n n n
mod ) (
2 2 1 1
+ + + L .
La filosofa de dicho mtodo consiste en utilizar ms de un elemento de la sucesin para
generar un nuevo trmino.
3.4.2.- Mtodos Aditivos
Hasta ahora hemos visto generadores que producan nmeros en los que cada trmino depende
del anterior. Ahora vamos a ver otro tipo de generadores en los que para generar un nuevo trmino se
utilizan dos elementos anteriores.
En este caso la longitud mxima de periodo que se puede alcanzar es mayor, dado que para
que se produzca un ciclo es necesario que se repitan parejas de nmeros.
2
1 1
mx m periodo de ima longitud
x x
x x
k n n
k n n
+
+
El primer generador de este tipo fue creado en los aos 1950 y es la sucesin de Fibonacci:
m x x x
n n n
mod ) (
1 1
+
+
Ofrece una longitud de periodo mayor que m, pero los test han demostrado que los nmeros
producidos no son satisfactoriamente aleatorios.
Green introdujo el siguiente generador:
m x x x
k n n n
mod ) (
1 +
+
Demostr que para k15 dicho generador no pasaba bien los test de aleatoriedad pero que para
k16 s se portaba bien.
Mitchell y Moore (1958) introdujeron el siguiente generador:
55 ; mod ) (
55 24 1
+
+
n m x x x
n n n
Se ha de cumplir:
Generacin de nmeros aleatorios
61
m debe ser par.
Se han de generar de forma aleatoria 55 semillas, desde x
0
hasta x
54
, de forma que todos
ellas no sean pares.
Este mtodo tiene una longitud de periodo grande y al ser simplemente aditivo y no utilizar
multiplicadores, es rpido.
Son muchas las posibilidades para implementar este mtodo. Una de ellas utiliza un array con
55 elementos:
Para n=1 hasta 54 hacer
Y[n]x55-n
Fin_para
j24; k55
Mientras no fin
Y[k](Y[k]+Y[j]) mod 2e
Salida Y[k]
jj-1
kk-1
Si j=0
Entonces j55
Si k=0
Entonces k55
Fin_mientras
Este algoritmo utiliza el array como si tuviese forma circular, de este modo siempre se tienen
guardados los 55 valores que son necesarios para ir calculando los siguientes. Este es un generador
bastante bueno.
3.4.3.- Mtodos Mixtos
Estos mtodos generan series de nmeros aleatorios a partir de otras dos series:
m Y X Z
n n n
mod ) ( + .
Sea L
1
la longitud de periodo de la serie X
n
(Lp(X
n
)) y L
2
la longitud de periodo de la serie Y
n
,
si se cumple que mcd(L
1
, L
2
)=1 (Lp(Z
n
))= L
1
*L
2
.
Utilizando este mtodo el hecho de que se repita un nmero no implica que la serie empiece a
ciclar, tal y como ocurra con los G.C.L., ya que ahora interviene otro nmero de otra serie.
No es conveniente utilizar el mismo mtodo para generar las dos series de partida.
3.4.4.- Mtodos de Mezcla
Este tipo de mtodos intentan desorganizar los elementos de una serie generada, de forma que
se pueda eliminar la posible dependencia entre trminos.
Generacin de nmeros aleatorios
62
Vamos a ver dos de estos mtodos:
3.4.4.1.- Mezcla I
Fue introducido por Mclaren y Marsaglia. Este mtodo utiliza dos series de nmeros
aleatorios. La idea es utilizar un generador para permutar la salida producida por otro generador. De
esta forma se consigue enmascarar la dependencia funcional que existe entre un nmero y el siguiente
dentro de una serie generada. Dados dos mtodos (o series ya generadas) {X
n
} e {Y
n
} el mtodo
produce una sucesin ms aleatoria mediante permutaciones en la primera ocasionadas utilizando la
segunda (se obtienen los valores de la primera pero en un orden diferente).
Proceso:
Partimos de dos series {X
n
} e {Y
n
} y vamos a desordenar a primera con la ayuda de la
segunda.
El mdulo tomado para la generacin de las series no tiene por qu ser el mismo. Vamos a
suponer que el mdulo utilizado para la generacin de la primera es m y para la generacin de la
segunda es m, por lo que 0x
i
<m y 0y
i
<m i.
Tomamos los k primeros elementos de la primera serie (desde x
0
hasta x
k-1
) y los almacenamos
en un array. Ahora con un elemento de la segunda serie tendremos que seleccionar uno de los
elementos del array, para ello tomamos el elemento y
0
y obtenemos la posicin
1
]
1
'
0
m
ky
E j (se hace
esta transformacin dado que los elementos de la segunda serie estn en el intervalo [0, m-1] y las
posiciones del array van desde la 0 hasta la k-1). El valor almacenado en el array en dicha posicin j
va a ser el elemento de la nueva serie que vamos generando y el hueco dejado por l se sustituye con
el siguiente elemento no almacenado de la primera serie, el x
k
. El proceso se va repitiendo tomando
cada vez el siguiente elemento de la segunda serie para seleccionar posicin y rellenando sta con el
siguiente de la primera serie.
De esta forma se obtienen los elementos de la primera serie, pero reordenados con la ayuda de
la segunda con lo que se est dotando de ms independencia a los mismos.
Algoritmo:
Para j=0 hasta k-1 hacer
V[j]xj
Fin_para
i0; jk
Mientras no fin
Xxj ; Yyi
hEnt(k*Y/m) (m es el mdulo de {Yn} )
Salida V[h]
V[h]X
jj+1; ii+1
Fin_mientras
Generacin de nmeros aleatorios
63
En la mayora de las situaciones de inters, la sucesin resultante es ms aleatoria que la
original {X
n
}, y adems la longitud de periodo de la nueva serie es el mnimo comn mltiplo de las
longitudes de periodo de {X
n
} e {Y
n
}.
3.4.4.2.- Mezcla II
Fue introducido por Carter Bays y Durham. Es un mtodo parecido al anterior a diferencia de
que slo utiliza una serie de nmeros {X
n
}. Mejora la aleatoriedad de la serie original con un costo
muy pequeo.
Proceso:
En este caso partimos de slo de una serie {X
n
} y vamos a desordenarla utilizando los
elementos de la misma serie.
Vamos a suponer que el mdulo utilizado para la generacin de la serie es m por lo que
0x
i
<m i.
Tomamos los k primeros elementos de la serie (desde x
0
hasta x
k-1
) y los almacenamos en un
array. Ahora con el siguiente elemento no utilizado tendremos que seleccionar uno de los elementos
del array, para ello tomamos el elemento x
k
y obtenemos la posicin
1
]
1
m
kx
E j
k
(se hace esta
transformacin dado que los elementos de la serie estn en el intervalo [0, m-1] y las posiciones del
array van desde la 0 hasta la k-1). El valor almacenado en el array en dicha posicin j va a ser el
elemento de la nueva serie que vamos generando. El hueco dejado por l no lo rellenaremos con el
elemento utilizado para seleccionar la posicin dado que si as lo hicisemos elementos pequeos
seleccionaran posiciones bajas del array que se iran completando con dichos elementos y los
elementos grandes se iran a posiciones altas en el array, quedando por tanto el array ordenado en
cierta manera. Para evitar esto que quitara aleatoriedad a la serie que se est generando, lo que
hacemos es utilizar el elemento x
k+1
(no utilizado hasta el momento para rellenar el elemento dado
como salida) y en pasos siguientes se va utilizando el elemento dado como salida para seleccionar la
siguiente posicin en el array y el hueco dejado tras la salida se va completando con el siguiente
elemento no utilizado de la serie.
De esta forma se obtienen los elementos de la serie pero en desordenados, con lo que se est
dotando de mayor independencia a los mismos.
Algoritmo:
Para j=0 hasta k-1 hacer
V[j]xj
Fin_para
Yxk
Mientras no fin
hEnt(k*Y/m) (m es el mdulo de {Xn} )
YV[h]
Salida Y
Generacin de nmeros aleatorios
64
jj+1
V[h]xj
Fin_mientras
3.5.- Apndice. Teora de nmeros
1) Se dice que a es divisible por b si c tal que a=bc
b a (a es mltiplo de b)
b/a (b es divisor de a)
2) p es primo si slo es divisible por t1 y por tp.
3) Dados a, b Z
+
se llama mcd(a,b)=c (mximo comn divisor) tal que c/a y c/b y si d
Z
+
tal que d/a y d/b d/c.
4) Dados a, b Z
+
se llama mcm(a,b)=c (mnimo comn mltiplo) tal que a/c y b/c y si d
Z
+
tal que a/d y b/d c/d.
5) Dados a, b Z
+
se dicen que son primos relativos si mcd(a,b)=1.
6) Se define (m) (Phi de Euler) de m, como la funcin que nos dice el nmero de primos
relativos con m. (m)=m-1 para m primo.
7) Cualquier mZ
+
, se puede escribir como producto de potencias de nmeros primos:
primo P con P m
n
i
e
i
i
,
1
8) Dado cualquier m
n
i
e
i i
i
P P m
1
1
) 1 ( ) ( ,
9) a es congruente con b mdulo m (ab) si
m b a
10) Propiedades de los mdulos:
a) ((a mod m)+b) mod m=(a+b) mod m
b) (a (b mod m)) mod m=(ab) mod m
c) (a mod m) mod m= a mod m
d) ((a mod m)+(b mod m)) mod m= (a+b) mod m
e) Si d/m (a mod m) mod d= a mod d
Generacin de nmeros aleatorios
65
11) Llamamos orden de a mdulo m al menor Z
+
que hace cierto a
1modm. Se llama
orden de m ((m)) al mximo de los rdenes de los posibles as. Se dice que a es raz
primitiva mdulo m cuando su orden coincide con el orden de m.
12) Clculo de (m):
a) Si m=P
e
, con P primo impar (m)=(P-1)P
e-1
b) (2)=1, (4)=2 y (2
e
)=2
e-2
e 3
c) Si )) ( , ), ( ( ) (
1 2 1
1 2 1
r r
k
r
k k
r
k k
P P mcm m P P P m L L