Está en la página 1de 13

UNIVERSIDAD POLITCNICA SALESIANA Carrera: Ingeniera en Sistemas Asignatura: Simulacin Tema del proyecto: Generador de nmeros aleatorios y su aplicacin

en estructura de datos Nombre: Darwin Aldas Fecha: 10 de octubre del 2013

NDICE DE CONTENIDOS

1. Objetivos

1.1 Objetivo General 1.2 Objetivos Especficos 2. Antecedentes 3. Marco Terico 4. Metodologa 5. Resultados 5.1. Algoritmo de congruencia lineal 5.2 Algoritmo Cola fifo 5.3 Algoritmo Cola lifo

6.Concluciones y Recomendaciones 7. Bibliografa

1. Objetivos 1.1 Objetivo General: Desarrollar algoritmos para la simulacin de nmeros aleatorios y hacer uso de los mismos en estructura de datos. 1.2 Objetivos Especficos: Investigar acerca de los diferentes y ms usados algoritmos para la generacin de nmeros aleatorios. Realizar prcticas en base a la investigacin realizada haciendo uso del conocimiento adquirido en cuanto a mtodos de simulacin de nmeros aleatorios. Aplicar el uso de mtodos para la generacin de nmeros aleatorios en estructuras de datos. 2. Antecedentes Mancilla, (2000), realizo la investigacin: Nmeros Aleatorios (Historia, teora y aplicaciones) en la cual refleja un amplio contenido terico dando pas a las siguientes conclusiones: _La generacin de nmeros aleatorios ha tenido trascendencia desde pocas muy antiguas dando origen a un sin nmero de experimentos relacionados con la probabilidad y las matemticas. _Se tiene varios mtodos para la generacin de nmeros aleatorios, de los cuales se pueden citar dos como los ms importantes: El generador de congruencia lineal de Lehmer. El mtodo mixto de congruencias Garca,(2004),presenta su trabajo titulado Generacin de nmeros aleatorios, en el cual se destacan mtodos utilizados hoy en da para generar nmeros aleatorios, se puede concluir enumerando varios algoritmos que sobresalen en la rama tecnolgica tales como: Generadores de desplazamiento de bits. Generadores de Fibonacci 3. Marco Terico Nmeros aleatorios Definicin: Son aquellos que pueden ser generados a partir de fuentes de aleatoriedad, las cuales, generalmente, son de naturaleza fsica (dados, ruletas, mecanismos electrnicos o mecnicos), y son gobernados por las leyes del azar; stos exhiben verdadera aleatoriedad en la realizacin de experimentos. Por su parte, los nmeros pseudo-aleatorios son aquellas que tienen un comportamiento similar a la naturaleza aleatoria, pero estn ceidos a un patrn, generalmente de naturaleza matemtica, que hace que su comportamiento sea determinstico. Generacin de nmeros aleatorios: Para generar variables aleatorias que sigan determinadas funciones de probabilidad necesitamos partir de series de nmeros que cumplan ciertas caractersticas de aleatoriedad, existen varios mtodos creados para le generacin de nmeros aleatorios entre los cuales podemos citar a los siguientes: Generadores de congruencias lineales Una gran mayora de los generadores utilizados actualmente utilizan esta tcnica introducida por Lehmer en 1951. Una secuencia de nmeros enteros Z1,Z2, . . . est definida por la frmula recursiva: Zi = (aZi1 + c) mod m

donde el mdulo m, el multiplicador a, el incremento c y la semilla o valor de comienzo Z0 son enteros no negativos Mtodo de congruencias aditivas. Es un mtodo rpido, puesto que no necesita realizar multiplicacin. Se precisa una secuencia de nmeros x1, x2. . . , xn. El generador produce una extensin de la secuencia xn+1, xn+2, . . . de la forma siguiente: xi = (xi1 + xin) mod m Por definicin a = b mod m si ab es divisible por m (resto 0). Por ejemplo, en mdulo 4, los nmeros 2, 6, 10, 14 son equivalentes porque (10 2), (10 6) . . . son todos divisibles por 4. Hay que tener en cuenta que, cuando utilizamos mdulo m, los valores que resultarn estarn comprendidos entre 0 y m-1. Mtodo de cuadrados medios: Fue propuesto en la dcada de los 40 del siglo XX por Von Neumann y Metrpolis. Requiere un nmero entero detonador (llamado semilla) con D dgitos, el cual es elevado al cuadrado. Los pasos para generar nmeros mediante cuadrados medios son: 1. Seleccionar una semilla (X0). 2. Se eleva al cuadrado la semilla. 3. Se extrae la cantidad de dgitos del centro que se deseen, y este ser X1. 4. Dividir X1 entre 10000 y el resultado es el nmero aleatorio buscado. 5. Repetir desde el paso 2 siendo la semilla X1 hasta obtener la cantidad de nmero aleatorios deseados. Estructura de datos (Colas) Una cola es una estructura de datos, caracterizada por ser una secuencia de elementos en la que la operacin de insercin push se realiza por un extremo y la operacin de extraccin pop por el otro. Tambin se le llama estructura FIFO (del ingls First In First Out), debido a que el primer elemento en entrar ser tambin el primero en salir. El tipo cola representa la idea que tenemos de cola en la vida real. La cola para subir al autobs est compuesta de elementos (personas), que dispone de dos extremos comienzo y fin. Por el comienzo se extraer un elemento cuando haya comprado el billete para su viaje, y si llega una nueva persona con intencin de usar el autobs, tendr que colocarse al final y esperar que todos los elementos situados antes que l abandonen la cola. Aplicaciones de las Colas Las Colas tambin se utilizan en muchas maneras en los sistemas operativos para planificar el uso de los distintos recursos de la computadora. Uno de estos recursos es la propia CPU (Unidad Central de Procesamiento). Si est trabajando en una sistema multiusuario, cuando le dice a la computadora que ejecute un programa concreto, el sistema operativo aade su peticin a su "cola de trabajo". Cuando su peticin llega al frente de la cola, el programa solicitado pasa a ejecutarse. Igualmente, las colas se utilizan para asignar tiempo a los distintos usuarios de los dispositivos de entrada/salida (E/S), impresoras, discos, cintas y dems. El sistema operativo mantiene colas para peticiones de imprimir, leer o escribir en cada uno de estos dispositivos. Representacin de las Colas Se las puede representar por listas enlazadas o por arrays C= Q(1), Q(2)......., Q(n). En cualquier caso se necesitan dos punteros frente (f) final (r) Representacin de una Cola, mediante un array. 100 264 119 48

frente final Representacin de una Cola mediante una lista enlazada

1234 100 264 119 48 frente final Las operaciones que se pueden realizar con una cola son: a. Acceder al primer elemento de la Cola b. Aadir un elemento al final de la Cola c. Eliminar el primer elemento de la Cola d. Vaciar una Cola e. Verificar el estado de la Cola: vaca, Llena. 4. Metodologa Para realizar la simulacin de los nmeros aleatorios se adoptara el uso del algoritmo de congruencia lineal: La ecuacin que modela a este grupo de generadores es +1 = ( + ) mod donde +1 es el nmero generado, es la semilla de la iteracin (el nmero inmediato anterior generado), y son parmetros de generacin y es el perodo deseado de la secuencia. La eleccin de los parmetros , , es crucial para obtener un generador efectivo. Las restricciones que se deben considerar son: 1. 0 < < 2. 0 < 3. 0 0 < 4. , , 0, + 5. y son primos relativos 6. = 1 mod , factor primo de 5. Resultados: Utilizando los mtodos investigados acerca de la generacin de nmeros aleatorios realice uno de los algoritmos citados en el presente trabaj, para la realizacin de la prctica es necesario usar perl como lenguaje. 5.1. Algoritmo de congruencia lineal: #!/usr/bin/perl print "Algoritmo de congruencia lineal \n"; print "Sea la funcin: Xi+1 = (aXi + c) mod m \n"; print "donde:\n"; print "m= el modulo (m>0)\n"; print "a=el multiplicador (0<=a<m)\n"; print "c=el corrimiento (0<=c<m)\n"; print "Ingrese el valor de m\n"; $m=<STDIN>; chop($m); print "Ingrese el valor de a\n"; $a=<STDIN>; chop($a); print "Ingrese el valor de c \n"; $c=<STDIN>;

chop($c); print "Ingrese la raiz Xo\n"; $Xo=<STDIN>; chop($Xo); #------Generador de numeros aleatorios for($i=1;$i<$m;$i++) { $Xn1=formula($a,$c,$Xo,$m); $Xo=$Xn1; print"\n",$Xo; } sub formula ($a,$c,$Xo,$m) { $Xn1=($Xo*$a+$c)%$m; return($Xn1); } Ejecucin:

Haciendo uso de estructura de datos realizar el algoritmo que simule el funcionamiento de las colas lifo y fifo respectivamente, tomando en cuenta nicamente nmeros aleatorios. 5.2 Algoritmo Cola fifo !#/usr/bin/perl #Generacin de nmeros aleatorios # METODO DE CONGRUENCIA LINEAL print "Algoritmo de congruencia lineal \n"; print "Sea la funcion: Xi+1 = (aXi + c) mod m \n"; print "donde:\n"; print "m= el modulo (m>0)\n"; print "a=el multiplicador (0<=a<m)\n"; print "c=el corrimiento (0<=c<m)\n";

print "Ingrese el valor de m\n"; $m=<STDIN>; chop($m); print "Ingrese el valor de a\n"; $a=<STDIN>; chop($a); print "Ingrese el valor de c \n"; $c=<STDIN>; chop($c); print "Ingrese la raiz Xo\n"; $Xo=<STDIN>; chop($Xo); @colaFifo=(); inicializar(); #--Metodo genera numeros aleatorios e inserta en la lista sub inicializar(){ print "\n Numeros aleatorios \n"; for($i=1; $i<=10; $i++){ $x=obtNumAleatorio($a,$b,$xo,$m); $x0=$x; print "\n Elemento $i: $x0"; push(@colaFifo,$x0); } } #--Imprimir lista print "\n COLA FIFO \n"; for($n=0; $n<=@colaFifo; $n++){ print $colaFifo[$n]."\n"; } #--Recorrer lista extrae elementos $d1 = @colaFifo; for($n1=0; $n1<=$d1; $n1++){ print "extrae = ".pop(@colaFifo)." "; print "\n"; } #---Metodo genera numeros aleatorios sub obtNumAleatorio($a,$b,$xo,$m){ $x=($x0*$a+$c)%$m; return($x); } Ejecucin:

5.3 Algoritmo Cola lifo !#/usr/bin/perl #Generacin de nmeros aleatorios # METODO DE CONGRUENCIA LINEAL print "Algoritmo de congruencia lineal \n"; print "Sea la funcion: Xi+1 = (aXi + c) mod m \n"; print "donde:\n"; print "m= el mdulo (m>0)\n"; print "a=el multiplicador (0<=a<m)\n"; print "c=el corrimiento (0<=c<m)\n"; print "Ingrese el valor de m\n"; $m=<STDIN>; chop($m); print "Ingrese el valor de a\n"; $a=<STDIN>; chop($a); print "Ingrese el valor de c \n"; $c=<STDIN>; chop($c); print "Ingrese la raiz Xo\n";

$Xo=<STDIN>; chop($Xo); @colaLifo=(); inicializar(); #--Metodo genera numeros aleatorios e inserta en la lista sub inicializar(){ print "\n Numeros aleatorios \n"; for($i=1; $i<=10; $i++){ $x=obtNumAleatorio($a,$b,$xo,$m); $x0=$x; print "\n Elemento $i==> $x0"; unshift(@colaLifo,$x0); } } #--Imprimir lista print "\n COLA LIFO \n"; for($n=0; $n<=@colaLifo; $n++){ print $colaLifo[$n]."\n"; } #--Recorrer lista extrae elementos $d1 = @colaLifo; for($n1=0; $n1<=$d1; $n1++){ print "extrae = ".shift(@colaLifo)." "; print "\n"; } #---Metodo genera numeros aleatorios sub obtNumAleatorio($a,$b,$xo,$m){ $x=($x0*$a+$c)%$m; return($x); } Ejecucin

5.3 Algoritmo Ascensor #!/usr/bin/perl print "Algoritmo de congruencia lineal \n"; print "Sea la funcion: Xi+1 = (aXi + c) mod m \n"; print "donde:\n"; print "m= el mdulo (m>0)\n"; print "a=el multiplicador (0<=a<m)\n"; print "c=el corrimiento (0<=c<m)\n"; print "Ingrese el valor de m\n"; $m=<STDIN>; chop($m); print "Ingrese el valor de a\n"; $a=<STDIN>; chop($a); print "Ingrese el valor de c \n"; $c=<STDIN>; chop($c); print "Ingrese la raiz Xo\n"; $Xo=<STDIN>; chop($Xo);

#numeroPisos(); pisoInicial(); #---Selecciona posicin inicial y direccin sub pisoInicial(){ $Nump=numeroPisos(); $Po=generaAleatorio($a,$c,$Xo,$Nump); print " El ascensor esta en el piso N: \n" ,$Po; } #---Escojer el numero de pisos del edificio sub numeroPisos(){ $Num=generaAleatorio($a,$c,$Xo,$m); print "El numero de pisos del edificio es de : \n",$Num; for($i=1;$i<$Num;$i++) { push(@numpiso,$Num=generaAleatorio($a,$c,$Xo,$m)); } return($Num); } sube(); baja(); #----Genera y debuelve los numeros aleatorios-sub generaAleatorio($a,$c,$Xo,$m){ for($i=1;$i<$m;$i++) { $Xn1=formula ($a,$c,$Xo,$m); $Xo=$Xn1; #print"\n",$Xo; return($Xo); } } sub formula ($a,$c,$Xo,$m) { $Xn1=($Xo*$a+$c)%$m; return($Xn1); } #---------Defini posicion subida o bajada sub sube { for($l=$#numpiso;$l>0;$l--){ if($direccion[$l]==1){ push(@subida,$numpiso[$l]); } } print " SUBE PISO : \t"; print "@subida\n"; } sub baja {

for($p>0;$p<$#numpiso;$p++){ if($direccion[$p]==0){ push(@bajada,$numpiso[$p]); } } print " BAJA PISO : \t"; print "@bajada\n"; } Ejecucin:

6.Concluciones: _Se ha concluido que en la actualidad la generacin de numeros aleatorios se aplica mucho en la prctica experimental ya que ayuda a modelar de mejor manera procesos que requieran de insercin de datos. _Se concluy tambin que mediante el uso de numeros aleatorios podemos entender de mejor manera el funcionamiento de estructuras de datos en especial las expuestas en este informe (cola fifo y lifo). Recomendaciones: Es recomendable realizar ciertas inducciones tericas antes de realizar el trabajo prctico pues de esta manera se est preparando para un mejor entendimiento durante el proceso de elaboracin de ciertos algoritmos. 7.Bibliografia: Pgina:SlidShare

Descripcin:Se puede encontrar gran cantidad de teora referente a cualquier tema, en nuestro caso:Generador de numeros aleatorios Url: http://www.slideshare.net/Norlan0987/generador-de-nmeros-aleatorios-pseudoaleatorios-

cuasialeatoricos-i Pgina:

También podría gustarte