Académique Documents
Professionnel Documents
Culture Documents
FA C U LTA D M U LT I D I S C I P L I NA R I A O R I E N TA L
D E P. I N G E N I E R I A Y A R Q U I T E C T U R A
M TOD O S
PRO BABI L S TI CO S
GENERADORES DE NUMEROS
ALEATORIOS
Docente:
Lic. Maria del Transito Gutirrez Reyes.
Presentan:
Argueta Ramos Milton No
Benavides Romero Laura Maria
Iraheta Medrano Luis Jos
Jimnez Martnez Junior Mario
Garca Melndez Yenifer Zuleyma
SAN MIGUEL
LUNES 8 DE AGOSTO DE 2016
AR15012
BR15014
IM15005
JM13012
GM15002
INDICE
INDICE.................................................................................................. 2
INTRODUCCIN ................................................................................... 3
QUE DEBEMOS SABER SOBRE LOS GENERADORES DE NUMEROS ALEATORIOS? .......... 3
OBJETIVOS ........................................................................................... 4
GENERADORES DE NUMEROS ALEATORIOS.......................................... 5
NUMEROS PSEUDOALEATORIOS................................................................ 5
PROPIEDADES: ........................................................................................... 6
INTRODUCCIN
Q U E D E B E M O S S A B E R S O B R E L O S G E N E R A D OR E S D E N U M E R OS
A L E A TOR I O S ?
OBJETIVOS
Describir y desarrollar algunos mtodos para obtener
nmeros aleatorios, a travs de generadores de dichos
nmeros que sean eficaces y lograr una aleatoriedad
certera.
GENERADORES DE NUMEROS
ALEATORIOS
NUMEROS PSEUDOALEATORIOS.
Si decidisemos realizar el sorteo de Navidad de Lotera Nacional mediante
ordenador, seguramente la gente no conara en la aleatoriedad del ordenador y se
quejara. En su lugar, se prever un mtodo fsico y sencillo de entender, como extraer
bolas de un bombo. Incluso este tipo de mtodos requiere tomar ciertas precauciones:
todas las
bolas debe tener idntico peso, deben de estar bien mezcladas en el bombo y se deben
cambiar regularmente para reducir las posibilidades de que unas aparezcan ms que
otras. Claramente este procedimiento no es prctico para una simulacin
computacional que requiere la generacin de cientos de miles de nmeros aleatorios.
El mtodo ms conveniente y ms able de generar nmeros aleatorios es utilizar
algoritmos determinsticos que posean alguna base matemtica slida.
Estos algoritmos producen una sucesin de nmeros que se asemeja a la de una
sucesin de realizaciones de variables aleatorias iid U (0,1), aunque realmente no lo
sea. Es por ello que este tipo de nmeros se denominan pseudo-aleatorios y el
algoritmo que los produce se llama Generador de nmeros pseudo-aleatorios
U N B U E N G E N E R A D O R D E N M E R O S P S E U D O - A L E A TO R I O S D E B E R A T E N E R
L A S S I G U I E N T E S P R OP I E DA D E S :
Por encima de todo, la sucesin de valores que proporcione debera asemejarse a una
sucesin de realizaciones independientes de una variable aleatoria U (0,1).
Los resultados deben ser reproducibles, en el sentido de que comenzando con las mismas
condiciones iniciales debe ser capaz de reproducir la misma sucesin. Esto nos puede
permitir depurar fallos del modelo o simular diferentes alternativas de modelo en las
mismas condiciones obteniendo una comparacin ms precisa. Los procedimientos fsicos
no permiten que los resultados sean reproducibles.
La sucesin de valores generados debe tener un ciclo no repetitivo tan largo como sea
posible
Congruencial Mixto
La frmula (o relacin de recurrencia) es sencilla:
X n+1=( a X n+ C ) mod m
Donde:
X0 es la semilla
a el multiplicador
c la constante aditiva y
m el mdulo
A tener en cuenta: Los valores a, X0 y c tienen que ser mayores que cero. Y la variable m tiene que
ser mayor que las tres anteriores. Para entrar en accin vamos a darle valores arbitrarios a cada
uno de estos parmetros y estudiar que reaccin tienen en la relacin de recurrencia. Supongamos
que a = 5, c = 7, X0 = 7 y m = 8. Entonces los resultados son:
Xn
Xn + 1
Ntese que despus de 8 pasadas el valor inicial de X se repite. Decimos entonces que el periodo
del generador es 8 igualito al valor del mdulo Eso no siempre es as. Veamos un caso donde el
periodo es menor a m. El valor de los parmetros es a = c = X0 = 4 y m = 6. Ahora lo resultados
son:
Xn
Xn + 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
periodo = 0
bandera = 0
while(bandera != x):
if (periodo == 0):
bandera = x
x = (a * x + c) % mod
print(x)
periodo = periodo + 1
if(periodo == mod):
print("El periodo es completo: ", periodo)
else:
print("El periodo es incompleto:", periodo)
def main():
x = int(raw_input("Introduce
a = int(raw_input("Introduce
c = int(raw_input("Introduce
m = int(raw_input("Introduce
mixedMethod(x,a,c,m)
el
el
el
el
valor
valor
valor
valor
de la semilla: "))
del multiplicador: "))
de la constante aditiva: "))
del modulo: "))
if __name__ == "__main__":
main()
Congruencial Multiplicativo
El generador Congruencial lineal multiplicativo es bsicamente el mismo rollo. La relacin de
recurrencia es similar a la del mtodo anterior:
10
Problema Ejemplo:
La suma
Problema
La serie de Fibonacci se define como: F1 = 1; F2 = 1; Fn+1 = Fn + Fn-1, para toda n > 1. Tienes que
encontrar s la suma de los primeros k nmeros de Fibonacci.
Entrada
La primera lnea tiene un nmero natural k (0 < k < 41).
Salida
La primera lnea debe tener el nmero s.
Saratov: 123
11
Cdigo
En las primeras dos lneas declaramos el nico entero que vamos a utilizar, k, el cual usaremos
para leer la entrada.
La siguiente funcin (lneas 4 a 13) calcula el nmero de Fibonacci para una entrada n. En la lnea
11 utilizamos la frmula para obtener el siguiente fibonacci, y utilizamos el arreglo fib para no
tener que volver a calcular los datos anteriores. Las lneas 8 y 9 sirven para obtener los primeros
dos valores. En la lnea 12 devolvemos el resultado. Si necesitramos utilizar ms de un valor en
el problema, podemos declarar fib como global y obtener los datos a travs del arreglo en lugar
de la funcin.
En la parte principal (lneas 15 a 18), lo nico que hacemos es leer la entrada y escribir la salida de
acuerdo a la frmula que obtuvimos.
Caso Ejemplo
Entrada:
Desarrollo:
5
1
1
1
1
1
1
1
1
1
1
1
1
2
2
2
2
2
3
3 5
3 5 8
3 5 8 13
13 1 = 12
12
Salida:
Posibles Cambios
Algo que podemos observar es que slo necesitamos los ltimos dos valores para calcular el
siguiente, lo cual podemos aprovechar. Si tenemos que a= 1 y b= 1, el siguiente nmero lo
podemos obtener sumndole b a a, con lo que tendramos a= 2 y b= 1; despus sumamos a a b,
con lo que obtenemos a= 2 y b= 3. Podemos ir repitiendo el mismo procedimiento
indefinidamente, con lo que en cada iteracin el valor de Fn se intercambiando entre a y b. Por
ejemplo, para calcular F10:
Fn
a
b
1
1
1
2
2
1
3
2
3
4
5
3
5
5
8
6
13
8
7
13
21
8
34
21
9
34
55
10
89
55
12
El algoritmo utiliza n sumas, por lo que su complejidad es de (n), al igual que el anterior. El
nico cambio es que ya no utilizamos el arreglo, lo cual es una ventaja si necesitamos calcular uno
o pocos Fn.
Otra forma en que podemos calcular los nmeros de Fibonacci es mediante el uso de matrices.
Tenemos que:
Sabiendo que F2 = F1 = 1 y F0 = 0:
13
Podemos utilizar el mismo algoritmo del tema anterior para elevar potencias, con lo que
obtendramos Fn en (lgn).
En las lneas 1 y 2 definimos el tipo de variable matriz dos que es la que utilizaremos para las
operaciones de matrices. La funcin multiplica (lneas 4 a 12) la utilizamos para multiplicar dos
matrices cuadradas (multiplicamos rengln por columna, segn corresponda para cada casilla). La
funcin Fibonacci (lneas 14 a 27) es prcticamente igual la segunda funcin bigmod de la seccin
anterior, con el cambio de que aqu utilizamos matrices en lugar de enteros.
Donde ri es la i-sima raz, y ci es una constante que se determina a partir de las condiciones
iniciales.
14
Utilizando F0 = 0 y F1 = 1 y obtenemos:
A diferencia de otros lenguajes, Pascal no cuenta con funciones de exponencial, excepto para
potencias de e, por lo que debemos hacerlas nosotros. Para esto, vamos a aprovechar que s
cuenta con funciones de logaritmos:
y = xn
y = elnxn
y = enlnx
Un problema de utilizar este cambio, es que si x es negativo, lnx no est definido en los reales
(por lo que causara error de ejecucin). Para poder solucionar esto, tomamos a x con su valor
absoluto y ajustamos el signo segn se requiera (negativo si n es impar, y positivo si no lo es).
Otro inconveniente con esta frmula es que utiliza nmeros flotantes y las operaciones
intermedias toman valores grandes, por lo que pierde precisin rpidamente cuando n crece,
debido a errores de redondeo.
Cdigo en C.
15
16
17
GENERADORES COMBINADOS
Una forma de incrementar el periodo e intentar evitar regularidades que muestren los
generadores lineales es combinar (mezclar) diferentes generadores para obtener
generadores hbridos de mejor calidad que los generadores originales.
Es posible combinar generadores para obtener mejores generadores. Algunas de las
tcnicas usadas son: 1. OR-exclusivo de nmeros aleatorios de dos o ms generadores.
Esta tcnica es similar a la anterior excepto que la suma es reemplazada por un orexclusivo bit por bit. Se ha demostrado que esta tcnica aplicada a nmeros ligeramente
aleatorios puede ser usada para generar nmeros con mayor aleatoriedad. 2. Barajeo. Usa
una secuencia como un ndice para decidir qu nmero generado por otra secuencia ser
retornado. Por ejemplo, uno de estos algoritmos usa un arreglo de tamao 100 que
contiene nmeros de una secuencia aleatoria xn . Para generar un nmero aleatorio se
genera un nmero aleatorio yn (entre 0 y m-1) para obtener el ndice i = 1 + 99yn / (m1). El valor del i-esimo elemento del arreglo es devuelto. Un nuevo valor xn es calculado
y almacenado en la i-exima localidad.
Cuando la aplicacin requiere de un periodo mayor al que se puede alcanzar con un
generador simple, se recurre a los generadores combinados de congruencia lineal. Para
generar la secuencia de Xi y Ri requerida, este generador necesita las salidas Xi,j, j = 1..k,
de k diferentes generadores de congruencia multiplicativa cuyos parmetros tienen los
valores apropiados para asegurar un periodo mj-1. El generador j produce la salida Xi,j
entera uniformemente distribuida de 1 a mj-1.
La combinacin se calcula mediante las siguientes formulas
Para computadoras de 32 bits se sugiere combinar dos generadores k = 2 con m1 =
2147483563, a1 = 40014, m2 = 2147483399 y a2 = 40692. La semilla del primer
generador se toma del intervalo [1, 2147483562], y la semilla del segundo generador se
toma del intervalo [1, 2147483398]. El periodo es (m1-1) (m2-1)/2 2x1018.
G EN ER AD OR ES C ON G RUE N C I AL ES LI NE AL E S C OM B I NADO S
M TO D O D E L O S C UA D R A D OS M E D I OS - M I D S QUA R E M E T H OD
Este mtodo se debe fue propuesto en los aos 40 por los matemticos John von
Neumann y Nicholas Metrpolis. El mtodo comienza tomando un nmero al azar, x0,
De 2n cifras (originalmente los autores proponan 4 cifras) que al elevarlo al cuadrado
Resulta un nmero de hasta 4n cifras. Si es necesario se aaden ceros a la izquierda
Para que el nmero resultante tenga exactamente 4n cifras. Sea x1 el nmero resultante
de seleccionar las 2n cifras centrales de x2 0; el primer nmero aleatorio u1 se obtiene
poniendo un punto decimal delante las 2n cifras de x1. A continuacin x2 y u2 se generan
a partir de x1 del mismo modo. As sucesivamente.
Este mtodo tiene dos inconvenientes principales:
1. Tiene una fuerte tendencia a degenerar a cero rpidamente
(probar, por ejemplo
Con x0 = 1009)
2. Los nmeros generados pueden repetirse cclicamente despus de una secuencia
Corta.
Ejemplo
X0 = 3708 x2 0 = 13|7492|64 x1 = 7492 u1 = 0.7492
X1 = 7492 x2 1 = 56|1300|64 x2 = 1300 u2 = 0.1300
X2 = 1300 x2 2 = 1|6900|00 x3 = 6900 u3 = 0.6900
X3 = 6900 x2 3 = 47|6100|00 x4 = 6100 u4 = 0.6100
X4 = 6100 x2 4 = 47|2100|00 x5 = 2100 u5 = 0.2100
X5 = 2100 x2 5 = 4|4100|00 x6 = 4100 u6 = 0.4100
X6 = 4100 x2 6 = 16|8100|00 x7 = 8100 u7 = 0.8100
X7 = 8100 x2 7 = 65|6100|00 x8 = 6100 u8 = 0.6100
M TOD O A C I E RTO FA L L O.
Supongamos que deseamos calcular (), donde la funcin g est acotada en (a, b).
1
{(xi, yi)} =1 de puntos de cuadrado unidad y calcular la proporcin muestra de los que
pertenecen al conjunto A.
19
b
n
h
n
En este caso los primeros q bits deben ser especificados, esto es anlogo a la semilla de
los generadores congruenciales.
Este tipo de generador depende del largo de la palabra
Ejemplo:
h = 3 ; q = 5 ; b 1 = b 2 = b3 = b4 = b5 = 1
b6 = (b3 + b1) mod 2 = 2 mod 2 = 0
b7 = (b4 + b2) mod 2 = 2 mod 2 = 0
b8 = (b5 + b3) mod 2 = 2 mod 2 = 0
b9 = (b6 + b4) mod 2 = 1 mod 2 = 1
b10 = (b7 + b5) mod 2 = 1 mod 2 = 1
...
b42 = (b39 + b37) mod 2 = 2 mod 2 = 0
CONVERSION DEL GENERADOR BINARIO
Transformar la sucesin {bi} en un nmero aleatorio U(0,1)
Consideremos {bi}
b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12
1
1 1 1
1 0 0 0
1 1
0 1
......... b41 b42
......... 1
0
Consideremos l = 4
y1 = b123 + b222 + b321 + b420 = 8 + 4 + 2 + 1 = 15
u1 =
y2 = b523 + b622 + b721 + b820 = 8 + 0 + 0 + 0 = 8
u2 =
y3 = b923 + b1022 + b1121 + b1220 = 8 + 4 + 0 + 1 = 13
u3 =
.... y as sucesivamente
10
i i 1
15 8 13 13 4 2 5 9 1
, , , , , , , , ,...
16 16 16 16 16 16 16 16 16
20
CONCLUSION
21