Documentos de Académico
Documentos de Profesional
Documentos de Cultura
DE
SIMULACIÓN
NÚMEROS ALEATORIOS
MINERVA CABALLERO
Septimo Semestre
Sección 3
Turno Noche
Año 2010
Números aleatorios
Resumen.
Un número aleatorio es aquel obtenido al azar, es decir, que todo número tenga la
misma probabilidad de ser elegido y que la elección de uno no dependa de la elección
del otro. El ejemplo clásico más utilizado para generarlos es el lanzamiento repetitivo
de una moneda o dado ideal no trucado.
Tablas de bibliotecas, son números aleatorios que se han publicado; de los cuales
podemos encontrar listas en los libros de probabilidad y tablas de matemáticas. Estos
números fueron generados por alguno de los métodos de computación analógica.
1. Uniformemente distribuidos.
2. Estadísticamente independientes.
3. Su media debe ser estadísticamente igual a 1/2.
4. Su varianza debe ser estadísticamente igual a 1/12.
5. Su periodo o ciclo de vida debe ser largo.
6. Deben ser generados a través de un método rápido.
7. Generados a través de un método que no requiera mucha capacidad de
almacenamiento de la computadora.
Ni = (Ni−r _ Ni−s) mod m donde r < s son enteros dados y _ denota alguna de las
operaciones +,−,×,^.
Este tipo de generador precisa iniciar (con otro generador) y mantener una lista
de los últimos s números generados.
Otros tipos de generadores los podemos encontrar en: W.H. Press, S.A.
Teukolski, W.T. Vetterling i B.P. Flannery, Numerical Recipes in C, Cambridge University
Press. -D.E. Knuth, The Art of computing programming, 2: Semi numerical Algorithms,
Addison-Wesley.
Antes de aceptar un nuevo generador hace falta verificar que satisface una
serie de pruebas, lo que llamaremos pruebas de aleatoriedad.
2.Algunos Métodos.
Hasta ahora hemos visto generadores que producían números en los que cada término
depende del anterior. Ahora vamos a ver otro tipo de generadores en los que para
generar un nuevo término se utilizan dos elementos anteriores.
En este caso la longitud máxima de periodo que se puede alcanzar es mayor, dado que
para que se produzca un ciclo es necesario que se repitan parejas de números.
2
11
longitud máx ima de periodo m
xx
xx
nnk
nnkÞ=
þýü
=
=
--+
+
El primer generador de este tipo fue creado en los años 1950 y es la sucesión de
Fibonacci:
x x x m n n n ( )mod 1 1 = + + -
Ofrece una longitud de periodo mayor que m, pero los test han demostrado que los
números producidos no son satisfactoriamente aleatorios.
Green introdujo el siguiente generador:
x x x m n n n k ( )mod +1 - = +
Demostró que para k 15 dicho generador no pasaba bien los test de aleatoriedad pero
que para
k 16 sí se portaba bien.
Mitchell y Moore (1958) introdujeron el siguiente generador:
( )mod ; 55 1 24 55 = + ³ + - - x x x m n n n n
Se ha de cumplir:
Generación de números aleatorios
61
· m debe ser par.
· Se han de generar de forma aleatoria 55 semillas, desde x0 hasta x54, de forma que
todos ellas no sean pares.
Este método tiene una longitud de periodo grande y al ser simplemente aditivo y no
utilizar multiplicadores, es rápido.
Son muchas las posibilidades para implementar este método. Una de ellas utiliza un
array con
55 elementos:
Para n=1 hasta 54 hacer
Y[n]ßx55-n
Fin_para
jß24; kß55
Mientras no fin
Y[k]ß(Y[k]+Y[j]) mod 2e
Salida Y[k]
jßj-1
kßk-1
Si j=0
Entonces jß55
Si k=0
Entonces kß55
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.
2.4.1Mezcla. Tipo 1
Fue introducido por Mclaren y Marsaglia. Este método utiliza dos series de números
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 número y el siguiente dentro de una serie generada. Dados dos métodos (o
series ya generadas) {Xn} e {Yn} el método produce una sucesión más 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 {Xn} e {Yn} y vamos a desordenar a primera con la ayuda de la
segunda.
El módulo tomado para la generación de las series no tiene por qué ser el mismo.
Vamos a suponer que el módulo utilizado para la generación de la primera es m y para
la generación de la segunda es m’, por lo que 0£xi<m y 0£yi<m’ " i.
Tomamos los k primeros elementos de la primera serie (desde x0 hasta xk-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 y0 y
obtenemos la posición úû
ù
êë
=é
'
0
m
ky
j E (se hace esta transformación dado que los elementos de la segunda serie están 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 posición 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 xk . El proceso se va repitiendo tomando cada vez el
siguiente elemento de la segunda serie para seleccionar posición 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 más independencia a los mismos.
Algoritmo:
Para j=0 hasta k-1 hacer
V[j]ßxj
Fin_para
iß0; jßk
Mientras no fin
Xßxj ; Yßyi
hßEnt(k*Y/m’) (m’ es el módulo de {Yn} )
Salida V[h]
V[h]ßX
jßj+1; ißi+1
Fin_mientras
Generación de números aleatorios
63
En la mayoría de las situaciones de interés, la sucesión resultante es más aleatoria que
la original {Xn}, y además la longitud de periodo de la nueva serie es el mínimo común
múltiplo de laslongitudes de periodo de {Xn} e {Yn}.
2.4.2 Mezcla II
Fue introducido por Carter Bays y Durham. Es un método parecido al anterior a
diferencia de que sólo utiliza una serie de números {Xn}. Mejora la aleatoriedad de la
serie original con un costo muy pequeño.
Proceso:
En este caso partimos de sólo de una serie {Xn} y vamos a desordenarla utilizando los
elementos de la misma serie.
Vamos a suponer que el módulo utilizado para la generación de la serie es m por lo
que
0£xi<m " i.
Tomamos los k primeros elementos de la serie (desde x0 hasta xk-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 xk y
obtenemos la posición ú
û
ù
êë
é
=
m
kx
j E k (se hace esta transformación dado que los elementos de la serie están 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 posición 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 posición dado que si así lo hiciésemos elementos pequeños
seleccionarían posiciones bajas del array que se irían completando con dichos
elementos y los elementos grandes se irían a posiciones altas en el array, quedando
por tanto el array ordenado en cierta manera. Para evitar esto que quitaría
aleatoriedad a la serie que se está generando, lo que hacemos es utilizar el elemento
xk+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 posición 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
Yßxk
Mientras no fin
hßEnt(k*Y/m) (m es el módulo de {Xn} )
YßV[h]
Salida Y
Generación de números aleatorios
64
jßj+1
V[h]ßxj
Fin_mientras
Apéndice.
Teoría de números.
1) Se dice que a es divisible por b si $ c tal que a=bc
·
a = b (a es múltiplo de b)
b/a (b es divisor de a)
2) p es primo si sólo es divisible por ±1 y por ±p.
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
Î
Z+ tal que d/a y d/b Þ d/c.
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
Î 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 y(m) (Phi de Euler) de m, como la función que nos dice el número de
primos relativos con m. y(m)=m-1 para m primo.
7) Cualquier mÎZ+, se puede escribir como producto de potencias de números primos:
m P con P primo
n
i
e
i
i,
1 Õ=
=
8) Dado cualquier m
Õ=
=--
n
i
e
ii
mPPi
1
j ( ) ( 1) 1 ,
9) a es congruente con b módulo m (aºb) si
·
a-b=m
10) Propiedades de los módulos:
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
11) Llamamos orden de a módulo m al menor lÎZ+ que hace cierto alº1modm. Se llama
orden de m (l(m)) al máximo de los órdenes de los posibles a’s. Se dice que a es raíz
primitiva módulo m cuando su orden coincide con el orden de m.
12) Cálculo de l(m):
a) Si m=Pe, con P primo imparÞ l(m)=(P-1)Pe-1
b) l(2)=1, l(4)=2 y l(2e)=2e-2 " e³ 3
c) Si 1 2 ( ) ( ( 1 ), , ( ))