Está en la página 1de 14

TRABAJO PRÁCTICO

DE

SIMULACIÓN

NÚMEROS ALEATORIOS

MINERVA CABALLERO

Profesor: Adán Noel

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.

Los números aleatorios permiten a los modelos matemáticos representar la realidad.

En general cuando se requiere una impredecibilidad en unos determinados datos, se


utilizan números aleatorios

Los seres humanos vivimos en un medio aleatorio y nuestro comportamiento lo es


también. Si deseamos predecir el comportamiento de un material, de un fenómeno
climatológico o de un grupo humano podemos inferir a partir de datos estadísticos.
Para lograr una mejor aproximación a la realidad nuestra herramienta predictiva debe
funcionar de manera similar: aleatoriamente. De esa necesidad surgieron los modelos
de simulación.

En la vida cotidiana se utilizan números aleatorios en situaciones tan dispares como


pueden ser los juegos de azar, en el diseño de la caída de los copos de nieve, en una
animación por ordenador, en tests para localización de errores en chips, en la
transmisión de datos desde un satélite o en las finanzas.
Introducción.

La lógica nos hace pensar que las personas somos generadores aleatorios imperfectos,


hay estudios que demuestran que existen tendencias claras en los humanos para la
elaboración de secuencias sesgadas y están relacionadas con características
personales, con los conocimientos o informaciones previas o con la edad

Podemos aprovecharnos de situaciones reales para obtener una tabla de números


aleatorios, como la lista de los números de Lotería Nacional premiados a lo largo de su
historia, pues se caracterizan por que cada dígito tiene la misma probabilidad de ser
elegido, y su elección es independiente de las demás extracciones.

Métodos manuales, lanzamiento de monedas, lanzamientos de dados, dispositivos


mecánicos, dispositivos electrónicos

Métodos de computación analógica, son métodos que dependen de ciertos procesos


físicosaleatorios, por ejemplo, el comportamiento de una corriente eléctrica.

Métodos de computación digital, cuando se usa el ordenador digital.

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.

Las aplicaciones que requieren de números aleatorios son:

· Simulación: para simular las entradas de aquellas variables aleatorias (no


determinísticas).
· Juegos o teoría de decisiones.
· Cálculo numérico: por ejemplo en la resolución de integrales.
· Teoría del muestreo: aquellos casos en los que sea demasiado costoso realizar la
muestra.
· Programación: generación de entradas para realizar las pruebas de los algoritmos y
programas.
Tipos de Generadores Automáticos.

1. Números uniformemente distribuidos.


Un problema básico que nos encontramos habitualmente es el de obtener secuencias
de números uniformemente distribuidos en un intervalo [0, 1].
La diferentes posibilidades para resolver dicho problema son:
i) Buscar en tablas de números aleatorios publicadas (libros, Internet);
ii) Observar un proceso físico tal como la desintegración radiactiva, el ruido eléctrico;
iii) Los lenguajes de programación y las hojas electrónicas incluyen una función para
generarlos
iv) Mediante algoritmos de generación de números aleatorios
Las principales ventajas de los generadores de números aleatorios son:
- Rapidez
- Comodidad
- Reproducibilidad
- Portabilidad
Y la desventaja fundamental:
- Las secuencias obtenidas no son realmente aleatorias, ya que se obtienen con
operaciones deterministas. Solo podemos obtener secuencias pseudo-aleatorias, que a
su vez satisfacen algunos criterios de aleatoriedad adecuados.
Los números generados deben cumplir ciertas características para que sean validos.
Dichas características son:

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.

Normalmente se utilizan números enteros, ya que su aritmética es exacta y rápida. Se


generan enteros Ni entre 0 y M − 1, y xi = Ni/M da valores reales en el intervalo [0, 1).

En general los algoritmos utilizan relaciones de recurrencia del tipo


Ni = f(Ni−1) en el caso de recurrencia simple, o bien
Ni = f(Ni−1, . . . ,Ni−k) para el caso de una recurrencia de orden k.
Se necesitar´a dar un valor inicial para comenzar el algoritmo (k valores para
recurrencias de orden k).
1.1. Generadores de congruencia lineal (GCL)
Estos generadores son los mas utilizados y los mas conocidos. Se basan en la
relación de recurrencia.
Ni+1 = (aNi + c) mod m donde a es el multiplicador y m el modulo.
- Hay m valores posibles de Ni, entre 0 i m − 1.
- La secuencia es periódica: cuando vuelve a aparecer un número por segunda
vez, la secuencia se vuelve a repetir. El periodo depende de los valores de a,c y m, ası
como del valor inicial; nótese que el máximo posible es m.
Recordemos que lo que nos interesa para trabajar con un buen generador de
números aleatorios es que la distribución de los números obtenidos tiene que ser
uniforme, no deben de haber correlaciones entre los términos de la secuencia, el
periodo debe ser lo más largo posible, y el algoritmo debe ser de ejecución rápida.

1.1.1. Mejora de los generadores de congruencia lineal


Las limitaciones más importantes de los generadores son su periodicidad
(normalmente el periodo no suele ser mas grande de 232 _ 4 × 109) y la posible
presencia de correlaciones entre términos consecutivos de la secuencia. Una manera
sencilla de suprimir estas limitaciones es”desordenar” un poco la secuencia mediante
el siguiente procedimiento:
 Se parte de un generador que da enteros aleatorios entre 0 y m−1, y en primer
lugar se genera con el GCL un vector que contiene una lista de N enteros
aleatorios jn, así como un entero aleatorio y. Se determina el índice k = [y _ N/m],
entre 0 y N − 1.
 El elemento jk de la lista se da como un nuevo nombre aleatorio, y se reasigna a la
variable y el valor jk. El valor de jk se renueva con el GCL, y se vuelve a repetir los
pasos desde la determinación del ´ındice k.

1.2. Generadores de desplazamiento de bits
En estos generadores cada nuevo numero entero aleatorio Ni, se obtiene
manipulando los bits del número anterior, Ni−1. En lenguaje C, esto se puede
hacer fácilmente utilizando operadores sobre bits, >>,<<, ^, |, &.

1.3. Generadores de Fibonacci


Las grandes ventajas de estos generadores es que son generadores muy rápidos
que tienen un periodo muy largo. La fomentación teórica en la que se basan es
diferente a la de los GCL. Los generadores de Fibonacci se basan en una recurrencia del
tipo.

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.

2.1 Métodos Aditivos

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.2 Generadores Cogruenciales Cuadráticos


Son del tipo x dx ax c m n n n ( 2 ) mod
1 = + + + . La longitud de periodo máxima que se alcanza con ellos es m, igual que en el
caso del G.G.L mixto y sin embargo ha de realizar más operaciones que éste.
Teorema 4.
Para obtener longitud máxima de periodo (m) en un generador congruencial
cuadrático, se ha de cumplir:
1) c y m deben ser primos relativos.
2) d y a-1 han de ser múltiplos de todos los factores primos impares de m. (Si m=2e a-
1=d=1).
3) Si:
·
îíì
º-

d debe ser par
da
mk
( 1)mod 4
4
Generación de números aleatorios
60
·
îíì
º-

d debe ser par
da
mk
( 1)mod 2
2
4) Si m=k9Þ
ïî
ïí
ì
îíì
º
º
º
6mod 9
1mod 9
0mod 9
cd
a
ó
o bien d
Se puede definir también el G.C.L. generalizado como
x a x a x a x m n n n k n k ( ) mod 1 -1 2 -2 - = + +L+ .
La filosofía de dicho método consiste en utilizar más de un elemento de la sucesión
para generar un nuevo término.

2.3 Métodos Mixtos


Estos métodos generan series de números aleatorios a partir de otras dos series:
Z X Y m n n n = ( + )mod .
Sea L1 la longitud de periodo de la serie Xn (Lp(Xn)) y L2 la longitud de periodo de la
serie Yn, si se cumple que mcd(L1 , L2)= 1 (Lp(Zn))= L1*L2.
Utilizando este método el hecho de que se repita un número no implica que la serie
empiece a ciclar, tal y como ocurría con los G.C.L., ya que ahora interviene otro
número de otra serie.
No es conveniente utilizar el mismo método para generar las dos series de partida.

2.4 Métodos de Mezcla.


Este tipo de métodos intentan desorganizar los elementos de una serie generada, de
forma que se pueda eliminar la posible dependencia entre términos.

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 ), , ( ))

También podría gustarte