3.- Generación de números aleatorios
3.- Generación de números aleatorios
3.- Generación de números aleatorios
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>3.</strong>- <strong>Generación</strong> <strong>de</strong> <strong>números</strong> <strong>aleatorios</strong><br />
Una vez construido un mo<strong>de</strong>lo, <strong>de</strong>bemos experimentar sobre él y para po<strong>de</strong>r ejecutarlo<br />
necesitamos dar valores a las variables <strong>de</strong> tipo exógeno. De esta forma podremos obtener valores <strong>de</strong><br />
salida y pasaremos a realizar un análisis <strong>de</strong> los mismos. Algunas <strong>de</strong> las variables <strong>de</strong> entrada son <strong>de</strong><br />
tipo aleatorio por lo que se tendrán que generar valores que simulen dichas entradas. Para generar<br />
variables aleatorias que sigan <strong>de</strong>terminadas funciones <strong>de</strong> probabilidad necesitamos partir <strong>de</strong> series <strong>de</strong><br />
<strong>números</strong> que cumplan ciertas características <strong>de</strong> aleatoriedad. La generación <strong>de</strong> dichos <strong>números</strong> es lo<br />
que se va a abordar en este tema.<br />
<strong>3.</strong>1.- Introducción<br />
Es gran<strong>de</strong> la necesidad <strong>de</strong> usar <strong>números</strong> <strong>aleatorios</strong> y son muchas las aplicaciones que<br />
requieren <strong>de</strong> ellos, tales como:<br />
• Simulación: para simular las entradas <strong>de</strong> aquellas variables aleatorias (no<br />
<strong>de</strong>terminísticas).<br />
• Juegos o teoría <strong>de</strong> <strong>de</strong>cisiones.<br />
• Cálculo numérico: por ejemplo en la resolución <strong>de</strong> integrales.<br />
• Teoría <strong>de</strong>l muestreo: aquellos casos en los que sea <strong>de</strong>masiado costoso realizar la<br />
muestra.<br />
• Programación: generación <strong>de</strong> entradas para realizar las pruebas <strong>de</strong> los algoritmos y<br />
programas.<br />
Antes se ha hecho referencia a “número aleatorio”, en realidad no se pue<strong>de</strong> hablar <strong>de</strong> la<br />
aleatoriedad o no aleatoriedad <strong>de</strong> un número aislado, sino <strong>de</strong> éste en relación con otros, es <strong>de</strong>cir, la<br />
aleatoriedad es una característica que posee o no una serie <strong>de</strong> <strong>números</strong>. A partir <strong>de</strong> esta aclaración
<strong>Generación</strong> <strong>de</strong> <strong>números</strong> <strong>aleatorios</strong><br />
siempre que nos refiramos a un número aleatorio estaremos hablando <strong>de</strong> un número perteneciente a<br />
una serie aleatoria.<br />
<strong>3.</strong>2.- Generadores <strong>de</strong> <strong>números</strong>. Tipos<br />
Las características <strong>de</strong>seables para los generadores <strong>de</strong> <strong>números</strong> <strong>aleatorios</strong> son las siguientes:<br />
• Los <strong>números</strong> generados no se <strong>de</strong>ben repetir frecuentemente (en ciclos).<br />
• Las series generadas <strong>de</strong>ben ser reproducibles.<br />
• Rapi<strong>de</strong>z en la obtención <strong>de</strong> los <strong>números</strong>.<br />
• Almacenamiento mínimo. Tanto el propio generador como los <strong>números</strong> por el<br />
generados.<br />
• Los <strong>números</strong> generados han <strong>de</strong> estar uniformemente distribuidos (todos <strong>de</strong>ben tener la<br />
misma probabilidad <strong>de</strong> salir).<br />
• Los valores generados <strong>de</strong>ben ser in<strong>de</strong>pendientes unos <strong>de</strong> otros, es <strong>de</strong>cir, que la<br />
obtención <strong>de</strong> cierto valor no esté condicionado por los valores obtenidos anteriormente.<br />
Vamos a ver distintos métodos y para cada uno evaluaremos cuáles <strong>de</strong> las características<br />
<strong>de</strong>scritas arriba cumple y cuáles no.<br />
1) Manual. Por ejemplo, lanzar un dado o realizar extracciones con reemplazamiento <strong>de</strong><br />
bolas numeradas <strong>de</strong>ntro <strong>de</strong> una urna.<br />
Ventajas:<br />
- Las series obtenidas son realmente aleatorias.<br />
Inconvenientes:<br />
- Lentitud.<br />
- Las series obtenidas son irreproducibles.<br />
- Requieren gran cantidad <strong>de</strong> almacenamiento ya que habría que almacenar la serie<br />
obtenida.<br />
2) Tablas. (De hasta 100000 <strong>números</strong>).<br />
Ventajas:<br />
- Las series obtenidas son reproducibles.<br />
Inconvenientes:<br />
- Lentitud.<br />
- Requieren gran cantidad <strong>de</strong> almacenamiento.<br />
52
<strong>Generación</strong> <strong>de</strong> <strong>números</strong> <strong>aleatorios</strong><br />
3) Computación analógica. Las series se obtienen mediante fenómenos físicos.<br />
Ventajas:<br />
- Las series obtenidas son realmente aleatorias.<br />
- Rapi<strong>de</strong>z.<br />
Inconvenientes:<br />
- Las series obtenidas son irreproducibles.<br />
4) Computación digital. Dada una función y una semilla, se van generando los <strong>números</strong><br />
<strong>aleatorios</strong>.<br />
Ventajas:<br />
- Rapi<strong>de</strong>z.<br />
- Pocos requerimientos <strong>de</strong> almacenamiento.<br />
- Las series obtenidas son reproducibles.<br />
Inconvenientes:<br />
- Los <strong>números</strong> obtenidos no son in<strong>de</strong>pendientes.<br />
Nosotros, nos vamos a centrar en la utilización <strong>de</strong> éstos últimos. Por tanto, vamos a enten<strong>de</strong>r<br />
por Generador <strong>de</strong> <strong>números</strong> <strong>aleatorios</strong>, un código al que vamos a llamar cada vez que necesitemos una<br />
aproximación a un número aleatorio.<br />
En 1946, Von Neumann propuso un método para obtener <strong>números</strong> <strong>aleatorios</strong> <strong>de</strong> k-cifras, a<br />
partir <strong>de</strong> una semilla. Dicho método es conocido como Método <strong>de</strong> los cuadrados centrales.<br />
El método consiste en partir <strong>de</strong> una semilla y elevarla al cuadrado, el siguiente número <strong>de</strong> la<br />
serie se obtendría como resultado <strong>de</strong> extraer las k-cifras centrales <strong>de</strong>l cuadrado obtenido y así<br />
sucesivamente.<br />
El problema que presenta este método es que los ciclos se producen rápidamente.<br />
<strong>3.</strong><strong>3.</strong>- Generadores congruenciales lineales<br />
Nos vamos, pues, a centrar en los métodos <strong>de</strong> computación digital. A los <strong>números</strong> obtenidos<br />
mediante dichos métodos se les conoce como <strong>números</strong> pseudo<strong>aleatorios</strong>, dado que, como se ha<br />
mencionado más arriba, los <strong>números</strong> obtenidos están uniformemente distribuidos pero no son<br />
in<strong>de</strong>pendientes. Vamos a generar <strong>números</strong> uniformemente distribuidos en el intervalo (0,1) (U(0,1)),<br />
dado que es fácil pasar <strong>de</strong>s<strong>de</strong> ellos a otros que estén en otro intervalo.<br />
53
<strong>3.</strong><strong>3.</strong>1.- Introducción<br />
<strong>Generación</strong> <strong>de</strong> <strong>números</strong> <strong>aleatorios</strong><br />
Hacia 1949, Lehmer introduce un método <strong>de</strong> generación <strong>de</strong> <strong>números</strong> <strong>aleatorios</strong> mediante el<br />
cual un término <strong>de</strong> la serie se obtiene como función <strong>de</strong>l término inmediatamente anterior (xn=f(xn-1)).<br />
La función aplicada es la siguiente:<br />
xn + 1 = ( ax n + c)<br />
mod m,<br />
siendo 0 ≤ xn<br />
< m ∀n<br />
En el generador distinguimos cuatro elementos:<br />
• x0, es el valor inicial o semilla.<br />
• a, multiplicador, siendo 0 ≤ a < m .<br />
• c, incremento, siendo 0 ≤ a < m .<br />
• m, módulo.<br />
Se llama periodo a la subca<strong>de</strong>na, <strong>de</strong>ntro <strong>de</strong> la serie generada, en la que no hay repeticiones <strong>de</strong><br />
<strong>números</strong> y longitud <strong>de</strong> periodo al número <strong>de</strong> elementos <strong>de</strong> dicha subca<strong>de</strong>na.<br />
La repetición <strong>de</strong> <strong>números</strong> en la serie pue<strong>de</strong> ser aleatoria, pero dado el método utilizado para la<br />
generación <strong>de</strong> las mismas, en el momento en el que se repite un valor ya empieza a repetirse todo el<br />
periodo, por lo que interesan métodos que garanticen longitu<strong>de</strong>s <strong>de</strong> periodo gran<strong>de</strong>s.<br />
<strong>3.</strong><strong>3.</strong>2.- Tipos <strong>de</strong> Generadores congruenciales lineales<br />
Po<strong>de</strong>mos distinguir dos tipos <strong>de</strong> estos generadores que se diferencian en el valor <strong>de</strong>l<br />
incremento.<br />
• G.C. Multiplicativos. En ellos el incremento, c, es 0. Este tipo <strong>de</strong> generadores fueron los<br />
introducidos por Lehmer, aunque mencionó como posibilidad la i<strong>de</strong>a <strong>de</strong> tomar c≠0.<br />
xn 1 axn<br />
mod m<br />
= +<br />
• G.C. Mixtos. En ellos el incremento es distinto <strong>de</strong> 0. Fueron introducidos por Thomson<br />
hacia 1958.<br />
xn+ 1 = ( axn<br />
+ c)<br />
mod m<br />
Los primeros presentan la ventaja <strong>de</strong> ser más rápidos, al tener que realizar menos operaciones<br />
en el cálculo <strong>de</strong> los elementos. Sin embargo, la longitud <strong>de</strong> periodo que se alcanza en las series<br />
generadas por ellos son menores que la alcanzadas en las series generadas por los segundos.<br />
Los valores <strong>de</strong> a=0 y a=1, producen series no aleatorias.<br />
Supongamos a=0, nos quedaría el generador <strong>de</strong> la forma c mod m<br />
siempre saldría la constante c.<br />
xn 1 = +<br />
, es <strong>de</strong>cir, que<br />
Si a=1, el generador es = ( x + c)<br />
mod m .Desarrollando algunos <strong>de</strong> los elementos que se<br />
van obteniendo, tenemos:<br />
xn + 1 n<br />
54
x = x + c)<br />
mod m<br />
1<br />
( 0<br />
x = x + c)<br />
mod m = (( x + c)<br />
mod m)<br />
mod m = ( x + 2c)<br />
mod m<br />
2<br />
( 1<br />
0<br />
0<br />
x = x + 3c)<br />
mod<br />
3<br />
( 0<br />
m<br />
<strong>Generación</strong> <strong>de</strong> <strong>números</strong> <strong>aleatorios</strong><br />
y así para todos los términos. Vamos obteniendo que un término es siempre la semilla más un múltiplo<br />
<strong>de</strong> c y todo módulo m, y esta serie no es aleatoria.<br />
Pue<strong>de</strong> interesarnos dotar <strong>de</strong> más in<strong>de</strong>pen<strong>de</strong>ncia a los valores obtenidos. Esto lo po<strong>de</strong>mos<br />
conseguir no obteniendo todos los valores consecutivos <strong>de</strong> una serie sino obteniendo valores <strong>de</strong> k en k<br />
posiciones, es <strong>de</strong>cir a partir <strong>de</strong> un elemento xn no obtenemos el elemento xn+1 sino el elemento xn+k.<br />
Para ello tendremos que elegir:<br />
x0 ’ =x0<br />
a ’ =a k<br />
k<br />
a −1<br />
c'=<br />
c<br />
a −1<br />
m’=m<br />
Demostración: tenemos que xn + 1 = ( ax n + c)<br />
mod m , obteniendo nuevos<br />
2<br />
términos: ( ax + c)<br />
mod m = (( a(<br />
ax + c)<br />
mod m)<br />
+ c)<br />
mod m = ( a x + ac + c)<br />
mod m<br />
x<br />
n+<br />
3<br />
= ( a<br />
= ( axn+<br />
3<br />
x<br />
n<br />
xn+ 2 = n+<br />
1<br />
n<br />
n<br />
+ a<br />
En general<br />
2<br />
2<br />
+ c)<br />
mod m = (( a(<br />
a(<br />
ax + c)<br />
mod m)<br />
+ c)<br />
mod m)<br />
+ c)<br />
mod m =<br />
x<br />
n<br />
+ ac + c)<br />
mod m<br />
n<br />
k<br />
k k−1<br />
k−<br />
2<br />
k a − 1<br />
xn+<br />
k = ( a xn<br />
+ a c + a c + L + ac + c)<br />
mod m , operando queda: xn<br />
+ k = ( a xn<br />
+ c)<br />
mod m ,<br />
a − 1<br />
Esto también se pue<strong>de</strong> utilizar para paralelizar la obtención <strong>de</strong> los términos. Si tenemos un<br />
or<strong>de</strong>nador con procesamiento paralelo, po<strong>de</strong>mos, partiendo <strong>de</strong> la semilla asignar a cada procesador la<br />
generación <strong>de</strong> una subsecuencia <strong>de</strong> términos. Por ejemplo con tres procesadores se irían generando los<br />
términos <strong>de</strong> la siguiente forma:<br />
x 0<br />
x 1 x 2 x 3<br />
x 4 x 5 x 6<br />
.........................<br />
55
<strong>Generación</strong> <strong>de</strong> <strong>números</strong> <strong>aleatorios</strong><br />
Así a partir <strong>de</strong> un número no tenemos que generar el siguiente término sino el que hay kposiciones<br />
<strong>de</strong>spués <strong>de</strong> él.<br />
<strong>3.</strong><strong>3.</strong><strong>3.</strong>- Elección <strong>de</strong>l módulo<br />
Nuestro objetivo es generar series con el mayor número posible <strong>de</strong> elementos, es <strong>de</strong>cir series<br />
con máxima longitud <strong>de</strong> periodo. Para ello, el módulo que se elija para el generador ha <strong>de</strong> ser gran<strong>de</strong><br />
dado que ∀ x elemento <strong>de</strong> la serie se cumple que 0≤x
<strong>Generación</strong> <strong>de</strong> <strong>números</strong> <strong>aleatorios</strong><br />
Para evitar este inconveniente, si nos interesa que las cifras más bajas se comporten <strong>de</strong> forma<br />
más aleatoria, po<strong>de</strong>mos tomar como módulo:<br />
⎧m<br />
, nº<br />
primo talquem<br />
< w ó<br />
⎨ e<br />
⎩ m = 2 ± 1<br />
para que así se tengan pocos divisores que son los que dan los problemas.<br />
En la mayoría <strong>de</strong> las aplicaciones, los bits menos significativos no son importantes y es buena<br />
una elección <strong>de</strong> m=2 e =w.<br />
<strong>3.</strong><strong>3.</strong>4.- Elección <strong>de</strong>l multiplicador e incremento<br />
En esta sección vamos a estudiar las propieda<strong>de</strong>s <strong>de</strong> a y c para que su elección nos garantice la<br />
obtención <strong>de</strong> un periodo máximo, lo cual no implica que la serie obtenida sea aleatoria.<br />
Si tomamos m <strong>de</strong> la forma m=P1∗P2 ∗....∗Pn (siendo Pi factor primo <strong>de</strong> m), sólo se obtendrá<br />
periodo máximo con a=1, valor con el que quedaba <strong>de</strong>mostrado que la serie obtenida no era aleatoria.<br />
k1<br />
k 2<br />
Se buscará un módulo <strong>de</strong> la forma m = P ∗P<br />
∗L∗<br />
P<br />
<strong>de</strong> a y c.<br />
Teorema 1.<br />
1<br />
2<br />
k r<br />
r<br />
, lo cual nos permitirá jugar con los valores<br />
Para que un generador congruencial lineal mixto genere series con longitud <strong>de</strong> periodo<br />
máximo m, se <strong>de</strong>ble cumplir:<br />
1) c y m sean primos relativos (c
<strong>Generación</strong> <strong>de</strong> <strong>números</strong> <strong>aleatorios</strong><br />
Vemos que tomar módulos <strong>de</strong> esta forma no interesa. Por el mismo razonamiento no interesa<br />
un módulo <strong>de</strong> la forma m=P.<br />
Por lo anterior nos vamos a centrar en módulos <strong>de</strong> la forma<br />
k1<br />
k 2<br />
k r m = P1<br />
∗ P2<br />
∗L∗<br />
Pr<br />
Pm<br />
∗L<br />
∗<br />
P . Si esto es así, entonces <strong>de</strong>be cumplirse por la segunda<br />
n<br />
condición <strong>de</strong>l teorema a − = k(<br />
P ∗ P ∗L<br />
∗ P ∗ P ∗ P ) , por otro lado sabemos que a-1
<strong>Generación</strong> <strong>de</strong> <strong>números</strong> <strong>aleatorios</strong><br />
Las posibilida<strong>de</strong>s <strong>de</strong> elección <strong>de</strong> x0 para que se cumpla la primera condición <strong>de</strong>l teorema son<br />
Teorema <strong>3.</strong><br />
n<br />
( ) ∏ ( 1)<br />
− = ϕ m Pi<br />
P<br />
i=<br />
1<br />
Sea m=p e , a es raíz primitiva módulo m sii<br />
1) si p=2 ⇒ si:<br />
• e=1⇒ a <strong>de</strong>be ser impar.<br />
• e=2⇒ a mod 4 <strong>de</strong>be ser <strong>3.</strong><br />
• e=3⇒ a mod 8 <strong>de</strong>be ser 3, 5 ó 7.<br />
• e≥4⇒ a mod 8 <strong>de</strong>be ser 3 ó 5.<br />
2) si p es impar ⇒ si:<br />
•<br />
•<br />
⎧a<br />
≠ 0 mod p<br />
⇒#<br />
⎨ p 1<br />
⎩a<br />
≠ 1mod<br />
p<br />
e = 1 − / q<br />
<strong>3.</strong>4.- Otros métodos<br />
⎧ #<br />
⎨ 1<br />
⎩a<br />
≠ 1mod<br />
p<br />
e >⇒ p − 2<br />
con<br />
ei<br />
−1<br />
i<br />
<strong>3.</strong>4.1.- Generadores Cogruenciales Cuadráticos<br />
q divisor primo <strong>de</strong><br />
p −1<br />
2<br />
Son <strong>de</strong>l tipo = ( dx + ax + c)<br />
mod m . La longitud <strong>de</strong> periodo máxima que se alcanza<br />
xn+ 1 n n<br />
con ellos es m, igual que en el caso <strong>de</strong>l G.G.L mixto y sin embargo ha <strong>de</strong> realizar más operaciones que<br />
éste.<br />
Teorema 4.<br />
Para obtener longitud máxima <strong>de</strong> periodo (m) en un generador congruencial cuadrático, se ha<br />
<strong>de</strong> cumplir:<br />
1) c y m <strong>de</strong>ben ser primos relativos.<br />
2) d y a-1 han <strong>de</strong> ser múltiplos <strong>de</strong> todos los factores primos impares <strong>de</strong> m. (Si m=2 e ⇒a-<br />
1=d=1).<br />
3) Si:<br />
•<br />
⎧d ≡ ( a −1)<br />
mod 4<br />
m = k4<br />
⇒ ⎨<br />
⎩d<br />
<strong>de</strong>be ser par<br />
59
•<br />
4) Si m=k9 ⇒<br />
⎧d ≡ ( a −1)<br />
mod 2<br />
m = k2<br />
⇒ ⎨<br />
⎩d<br />
<strong>de</strong>be ser par<br />
⎧o<br />
bien d ≡ 0 mod 9<br />
⎪<br />
⎨ ⎧ a ≡ 1mod<br />
9<br />
ó<br />
⎪ ⎨<br />
⎩ ⎩cd<br />
≡ 6 mod 9<br />
Se pue<strong>de</strong> <strong>de</strong>finir también el G.C.L. generalizado como<br />
xn ( 1 n−<br />
1 2 n−2<br />
k n−k<br />
= a x + a x + L + a x ) mod m .<br />
<strong>Generación</strong> <strong>de</strong> <strong>números</strong> <strong>aleatorios</strong><br />
La filosofía <strong>de</strong> dicho método consiste en utilizar más <strong>de</strong> un elemento <strong>de</strong> la sucesión para<br />
generar un nuevo término.<br />
<strong>3.</strong>4.2.- Métodos Aditivos<br />
Hasta ahora hemos visto generadores que producían <strong>números</strong> en los que cada término <strong>de</strong>pen<strong>de</strong><br />
<strong>de</strong>l anterior. Ahora vamos a ver otro tipo <strong>de</strong> generadores en los que para generar un nuevo término se<br />
utilizan dos elementos anteriores.<br />
En este caso la longitud máxima <strong>de</strong> periodo que se pue<strong>de</strong> alcanzar es mayor, dado que para<br />
que se produzca un ciclo es necesario que se repitan parejas <strong>de</strong> <strong>números</strong>.<br />
xn<br />
= xn+<br />
k ⎫<br />
2<br />
⎬ ⇒ longitud máx ima <strong>de</strong> periodo = m<br />
xn−1<br />
= xn−1+<br />
k ⎭<br />
El primer generador <strong>de</strong> este tipo fue creado en los años 1950 y es la sucesión <strong>de</strong> Fibonacci:<br />
xn+ 1 = ( xn−1<br />
+ xn<br />
) mod m<br />
Ofrece una longitud <strong>de</strong> periodo mayor que m, pero los test han <strong>de</strong>mostrado que los <strong>números</strong><br />
producidos no son satisfactoriamente <strong>aleatorios</strong>.<br />
Green introdujo el siguiente generador:<br />
xn+ 1 = ( xn<br />
+ xn−k<br />
) mod m<br />
Demostró que para k≤15 dicho generador no pasaba bien los test <strong>de</strong> aleatoriedad pero que para<br />
k≥16 sí se portaba bien.<br />
Mitchell y Moore (1958) introdujeron el siguiente generador:<br />
Se ha <strong>de</strong> cumplir:<br />
xn + 1 = ( xn−24<br />
+ xn−55<br />
) mod<br />
m;<br />
n ≥ 55<br />
60
• m <strong>de</strong>be ser par.<br />
<strong>Generación</strong> <strong>de</strong> <strong>números</strong> <strong>aleatorios</strong><br />
• Se han <strong>de</strong> generar <strong>de</strong> forma aleatoria 55 semillas, <strong>de</strong>s<strong>de</strong> x0 hasta x54, <strong>de</strong> forma que todos<br />
ellas no sean pares.<br />
Este método tiene una longitud <strong>de</strong> periodo gran<strong>de</strong> y al ser simplemente aditivo y no utilizar<br />
multiplicadores, es rápido.<br />
Son muchas las posibilida<strong>de</strong>s para implementar este método. Una <strong>de</strong> ellas utiliza un array con<br />
55 elementos:<br />
Para n=1 hasta 54 hacer<br />
Y[n]x55-n<br />
Fin_para<br />
j24; k55<br />
Mientras no fin<br />
Y[k](Y[k]+Y[j]) mod 2e<br />
Salida Y[k]<br />
jj-1<br />
kk-1<br />
Si j=0<br />
Entonces j55<br />
Si k=0<br />
Entonces k55<br />
Fin_mientras<br />
Este algoritmo utiliza el array como si tuviese forma circular, <strong>de</strong> este modo siempre se tienen<br />
guardados los 55 valores que son necesarios para ir calculando los siguientes. Este es un generador<br />
bastante bueno.<br />
<strong>3.</strong>4.<strong>3.</strong>- Métodos Mixtos<br />
Estos métodos generan series <strong>de</strong> <strong>números</strong> <strong>aleatorios</strong> a partir <strong>de</strong> otras dos series:<br />
Zn n n<br />
= ( X + Y ) mod m .<br />
Sea L1 la longitud <strong>de</strong> periodo <strong>de</strong> la serie Xn (Lp(Xn)) y L2 la longitud <strong>de</strong> periodo <strong>de</strong> la serie Yn,<br />
si se cumple que mcd(L1 , L2)=±1⇒ (Lp(Zn))= L1*L2.<br />
Utilizando este método el hecho <strong>de</strong> que se repita un número no implica que la serie empiece a<br />
ciclar, tal y como ocurría con los G.C.L., ya que ahora interviene otro número <strong>de</strong> otra serie.<br />
No es conveniente utilizar el mismo método para generar las dos series <strong>de</strong> partida.<br />
<strong>3.</strong>4.4.- Métodos <strong>de</strong> Mezcla<br />
Este tipo <strong>de</strong> métodos intentan <strong>de</strong>sorganizar los elementos <strong>de</strong> una serie generada, <strong>de</strong> forma que<br />
se pueda eliminar la posible <strong>de</strong>pen<strong>de</strong>ncia entre términos.<br />
61
Vamos a ver dos <strong>de</strong> estos métodos:<br />
<strong>3.</strong>4.4.1.- Mezcla I<br />
<strong>Generación</strong> <strong>de</strong> <strong>números</strong> <strong>aleatorios</strong><br />
Fue introducido por Mclaren y Marsaglia. Este método utiliza dos series <strong>de</strong> <strong>números</strong><br />
<strong>aleatorios</strong>. La i<strong>de</strong>a es utilizar un generador para permutar la salida producida por otro generador. De<br />
esta forma se consigue enmascarar la <strong>de</strong>pen<strong>de</strong>ncia funcional que existe entre un número y el siguiente<br />
<strong>de</strong>ntro <strong>de</strong> una serie generada. Dados dos métodos (o series ya generadas) {Xn} e {Yn} el método<br />
produce una sucesión más aleatoria mediante permutaciones en la primera ocasionadas utilizando la<br />
segunda (se obtienen los valores <strong>de</strong> la primera pero en un or<strong>de</strong>n diferente).<br />
Proceso:<br />
Partimos <strong>de</strong> dos series {Xn} e {Yn} y vamos a <strong>de</strong>sor<strong>de</strong>nar a primera con la ayuda <strong>de</strong> la<br />
segunda.<br />
El módulo tomado para la generación <strong>de</strong> las series no tiene por qué ser el mismo. Vamos a<br />
suponer que el módulo utilizado para la generación <strong>de</strong> la primera es m y para la generación <strong>de</strong> la<br />
segunda es m’, por lo que 0≤xi
<strong>Generación</strong> <strong>de</strong> <strong>números</strong> <strong>aleatorios</strong><br />
En la mayoría <strong>de</strong> las situaciones <strong>de</strong> interés, la sucesión resultante es más aleatoria que la<br />
original {Xn}, y a<strong>de</strong>más la longitud <strong>de</strong> periodo <strong>de</strong> la nueva serie es el mínimo común múltiplo <strong>de</strong> las<br />
longitu<strong>de</strong>s <strong>de</strong> periodo <strong>de</strong> {Xn} e {Yn}.<br />
<strong>3.</strong>4.4.2.- Mezcla II<br />
Fue introducido por Carter Bays y Durham. Es un método parecido al anterior a diferencia <strong>de</strong><br />
que sólo utiliza una serie <strong>de</strong> <strong>números</strong> {Xn}. Mejora la aleatoriedad <strong>de</strong> la serie original con un costo<br />
muy pequeño.<br />
Proceso:<br />
En este caso partimos <strong>de</strong> sólo <strong>de</strong> una serie {Xn} y vamos a <strong>de</strong>sor<strong>de</strong>narla utilizando los<br />
elementos <strong>de</strong> la misma serie.<br />
0≤xi
jj+1<br />
V[h]xj<br />
Fin_mientras<br />
<strong>3.</strong>5.- Apéndice. Teoría <strong>de</strong> <strong>números</strong><br />
1) Se dice que a es divisible por b si ∃ c tal que a=bc<br />
•<br />
a = b (a es múltiplo <strong>de</strong> b)<br />
b/a (b es divisor <strong>de</strong> a)<br />
2) p es primo si sólo es divisible por ±1 y por ±p.<br />
<strong>Generación</strong> <strong>de</strong> <strong>números</strong> <strong>aleatorios</strong><br />
3) Dados a, b ∈ Z + se llama mcd(a,b)=c (máximo común divisor) tal que c/a y c/b y si ∃ d ∈<br />
Z + tal que d/a y d/b ⇒ d/c.<br />
4) Dados a, b ∈ Z + se llama mcm(a,b)=c (mínimo común múltiplo) tal que a/c y b/c y si ∃ d<br />
∈ Z + tal que a/d y b/d ⇒ c/d.<br />
5) Dados a, b ∈ Z + se dicen que son primos relativos si mcd(a,b)=1.<br />
6) Se <strong>de</strong>fine ψ(m) (Phi <strong>de</strong> Euler) <strong>de</strong> m, como la función que nos dice el número <strong>de</strong> primos<br />
relativos con m. ψ(m)=m-1 para m primo.<br />
7) Cualquier m∈Z + , se pue<strong>de</strong> escribir como producto <strong>de</strong> potencias <strong>de</strong> <strong>números</strong> primos:<br />
8) Dado cualquier m<br />
m =<br />
n<br />
∏<br />
i=<br />
1<br />
e<br />
Pi<br />
con P<br />
i ,<br />
n<br />
∏<br />
i=<br />
1<br />
primo<br />
ei<br />
−1<br />
i<br />
ϕ ( m)<br />
= ( P − 1)<br />
P ,<br />
9) a es congruente con b módulo m (a≡b) si a − b = m<br />
10) Propieda<strong>de</strong>s <strong>de</strong> los módulos:<br />
a) ((a mod m)+b) mod m=(a+b) mod m<br />
b) (a (b mod m)) mod m=(ab) mod m<br />
c) (a mod m) mod m= a mod m<br />
d) ((a mod m)+(b mod m)) mod m= (a+b) mod m<br />
e) Si d/m⇒ (a mod m) mod d= a mod d<br />
i<br />
•<br />
64
<strong>Generación</strong> <strong>de</strong> <strong>números</strong> <strong>aleatorios</strong><br />
11) Llamamos or<strong>de</strong>n <strong>de</strong> a módulo m al menor λ∈Z + que hace cierto a λ ≡1modm. Se llama<br />
or<strong>de</strong>n <strong>de</strong> m (λ(m)) al máximo <strong>de</strong> los ór<strong>de</strong>nes <strong>de</strong> los posibles a’s. Se dice que a es raíz<br />
primitiva módulo m cuando su or<strong>de</strong>n coinci<strong>de</strong> con el or<strong>de</strong>n <strong>de</strong> m.<br />
12) Cálculo <strong>de</strong> λ(m):<br />
a) Si m=P e , con P primo impar ⇒ λ(m)=(P-1)P e-1<br />
b) λ(2)=1, λ(4)=2 y λ(2 e )=2 e-2 ∀ e≥ 3<br />
k<br />
1<br />
k<br />
2<br />
1 2<br />
kr<br />
1<br />
kr<br />
c) Si m =<br />
P ∗ P ∗L<br />
∗ P ⇒ λ( m)<br />
= mcm(<br />
λ ( P ), L,<br />
λ(<br />
P ))<br />
r<br />
k<br />
1<br />
r<br />
65