Está en la página 1de 12

REPORTE DE ACTIVIDAD

UNIDAD 2 SIMULACION

26 DE FEBRERO DE 2014

El objetivo de esta actividad es demostrar cmo funcionan tanto el mtodo Congruencial mixto lineal como el mtodo de prueba de nmeros pseudoaleatorios de los promedios. El mtodo Congruencial mixto no es el nico mtodo para la generacin de los nmeros pseudoaleatorios pero si es uno de los mtodos ms fciles de aplicar y entender por lo que en esta actividad decidimos usarlo. Pero para comprobar estos nmeros, para verificar que realmente sean vlidos se deben comprobar mediante el mtodo de promedios o media. As que esta es una muestra de cmo funcionan estos mtodos mediante el uso de una aplicacin sencilla hecha en java.

HP Mini 110-3000 Software para desarrollo de cdigo de programa: Netbeans, Lenguaje Java Internet Adobe Reader Archivos PDF Microsoft Office: Word

Los generadores congruenciales Lineales generan una secuencia de nmeros pseudoaleatorios en la cual el prximo nmero pseudoaleatorios es determinado a partir del ltimo nmero generado, es decir, el nmero pseudoaleatorios Xn+1 es derivado a partir del nmero pseudoaleatorios Xn La relacin de recurrencia para el generador Congruencial mixto es Xn+1 =(a Xn+c) mod m, en donde: X0 = es la semilla a =el multiplicador c = constante aditiva m = el modulo (m > X0, a, c) X0, a, c >0 Esta relacin de recurrencia nos dice que Xn+1 es el residuo de dividir a Xn+c entre el modulo. Lo anterior significa que los valores posibles de Xn+1 son 0, 1, 2,3....m-1, es decir, m representa el nmero posible de valores diferentes que pueden ser generados.

Ejemplo: supongamos que se tiene un generador en el cual los valores de sus parmetros son: a = 5, c = 7, X0 = 4 y m = 8. El generador quedar de la siguiente manera: Xn+1 = (5 Xn + 7) mod 8 En la tabla 2, se muestran los nmeros aleatorios generados por este mtodo.

Cuando se quiere construir un generador de nmeros aleatorios para simular los valores de una variable aleatoria, se deben elegir los parmetros de tal manera que se garantice un periodo largo para que se puedan hacer todos los ensayos de simulacin, por lo tanto se deben tener en cuenta las siguientes condiciones: a debe ser un nmero impar, no divisible ni por 3 ni por 5. c usualmente puede ser cualquier constante, sin embargo, para asegurar buenos resultados, se debe seleccionar a de tal forma que, a mod 8 = 5 para una computadora binaria, o a mod 200 = 21 para computadora decimal. m debe ser el nmero entero ms grande que la computadora acepte. De acuerdo con Hull y Dobell, los mejores resultados para un generador Congruencial mixto en una computadora binaria son: c = 8*a3 a = cualquier entero X0 = Cualquier entero impar. M = 2b donde b >2 y que m sea aceptado por la computadora.

La realizacin de esta prueba requiere obtener una muestra de tamao N, es decir, es necesario generar N nmeros pseudoaleatorios. En seguida, su promedio aritmtico es evaluado de acuerdo a la siguiente expresin:

1+2+3+

(3.1)

Enseguida se determina el valor del estadstico utilizando la siguiente expresin:


1 ( ) 2 0 = 1 12

Si | | < / entonces no se puede rechazar la hiptesis, de los nmeros pseudoaleatorios generados proviene de un universo uniforme con media de 0.5. Para ilustrar la aplicacin de esta prueba de hiptesis, considere los nmeros pseudoaleatorios presentados en la tabla 3.1. Para estos nmeros, la media aritmtica (aplicacin de la ecuacin 3.1) resulta ser de 0.48234 y el estadstico resultar ser de:

Z0 =

(0.482340.5)100
1 12

=-0.61

Si se supone un nivel de significado () de 5%, entonces / tiene un valor de 1.96 y puesto que | |<1.96 entonces no se puede rechazar la hiptesis de que estos nmeros pseudoaleatorios tiene una media de 0.5.

public class CongruencialMixto { private int aConst; private int cConst; private int mMagni; private int xSemilla; private int nNum; private RandomAccessFile a; public CongruencialMixto(int a, int c, int m, int x, int n) {

aConst = a; cConst = c; mMagni = m; xSemilla = x; nNum = n; } public void metodoCongruencial() { int x; float r = 0.0F; String msj = ""; for(int i = 1; i <= nNum; i++) { x = (aConst * xSemilla + cConst) % mMagni; r = (float) x / mMagni; xSemilla = (int) x; msj += "N" + i + ": " + r + "\n";

guardarDatos(r); } JOptionPane.showMessageDialog(null, msj); } public void guardarDatos(double r) { try { a = new RandomAccessFile("dir.dat", "rw"); a.seek(a.length()); a.writeDouble(r); a.close(); } catch(FileNotFoundException e) {} catch(IOException e) {} } public void pruebaPromedio() { double r; float sum = 0; float prom; float z; float z2;

float z3; float raiz2; float absolut; try { a = new RandomAccessFile("dir.dat", "rw"); while((r = a.readDouble()) <= a.length()) { sum += r; } a.close(); } catch(FileNotFoundException e) {} catch(IOException e) {} prom = sum / nNum; raiz2 = (float)Math.sqrt(nNum); z = prom - 0.5f; z2 = z * raiz2; z3 = z2 / 0.28867f; absolut = Math.abs(z3); JOptionPane.showMessageDialog(null, prom); JOptionPane.showMessageDialog(null, absolut); if(absolut < 1.96) { JOptionPane.showMessageDialog(null, "La media de: " + prom + " es valida"); } else { JOptionPane.showMessageDialog(null, "No es valida"); } } } public class App { public static void main(String[] args) { CongruencialMixto obj; String menu = "1.- Generar numeros pseudoaleatorios\n"; menu += "2.- Prueba de promedios\n"; menu += "3.- Salir"; int op;

int a, c, m, x, n; a = Integer.parseInt(JOptionPane.showInputDialog("Da el valor de la constante multiplicativa.")); c = Integer.parseInt(JOptionPane.showInputDialog("Da el valor de la constante aditiva.")); m = Integer.parseInt(JOptionPane.showInputDialog("Da el valor de la maginitud del modulo.")); x = Integer.parseInt(JOptionPane.showInputDialog("Da el valor de la semilla.")); n = Integer.parseInt(JOptionPane.showInputDialog("Escribe la cantidad de numeros a generar.")); do { op = Integer.parseInt(JOptionPane.showInputDialog(menu)); obj = new CongruencialMixto(a, c, m, x, n); switch(op) { case 1: obj.metodoCongruencial(); break; case 2: obj.pruebaPromedio(); break; } } while(op != 3); } }

El programa funciona de la siguiente manera primero se ingresan los valores correspondientes: Primero se ingresa el valor de la constante multiplicativa.

Despus se ingresa la constante aditiva.

A continuacin se ingresa la magnitud del mdulo.

Y despus se da el valor semilla.

Y finalmente se ingresa el nmero o la cantidad de nmeros pseudoaleatorios a generar.

Se generaron los siguientes nmeros pseudoaleatorios:

10

Y ya casi para terminar se comprobaron estos nmeros con el mtodo de promedios o mtodo de la media para verificar que estos nmeros sean vlidos.

11

Y se comprob que efectivamente estos nmeros pseudoaleatorios son vlidos.

La conclusin a la que llegamos fue que este mtodo es muy sencillo y fcil de entender para generar nmeros pseudoaleatorios, adems nos dimos cuenta de que no solo el mtodo de cuadrados medios es el nico mtodo para generar nmeros ya que existen muchos otros cada uno con ciertas diferencias y tal vez cada uno de ellos un poco mejor que el otro. Algo que pudimos observar fue que es un mtodo que tiene si se puede decir una desventaja que es que se generan nmeros que se vuelven a repetir, pero de cualquier forma es un mtodo que nos agrad por que fue fcil trabajar con l y aprender mucho de este mtodo.

http://es.scribd.com/doc/52813155/Simulacion-Un-enfoque-Practico-Raul-COSS-Bu pg. [20][31] http://www.youtube.com/watch?v=8iAG3Wnlbo8 http://carlosmarquez.files.wordpress.com/2012/02/unidad-4-generacion-de-numerospseudoaleatorios1.pdf pg. [7]

También podría gustarte