24.04.2013 Views

3.- Generación de números aleatorios

3.- Generación de números aleatorios

3.- Generación de números aleatorios

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!