You are on page 1of 19

MTODOS PARA GENERAR NMEROS PSEUDO-ALEATORIOS

1. GENERADORES CONGRUENCIALES LINEALES:

En 1951, D. H. Lehmer descubri que residuos de potencias sucesivas de un nmero tienen buenas propiedades aleatorias:

Una expresin equivalente para calcular x despus de calcular x


n

n-1

es:

Los parmetros a y m son llamados multiplicador y modulo respectivamente. Muchos de los generadores actuales son generalizaciones de la propuesta de Lehmer y tienen la siguiente forma:

En donde los x son enteros entre 0 y m-1, y las constantes a y b son no-negativas. La seleccin de a, b, y m afectan el periodo y la auto correlacin en la secuencia. Entre los resultados de los estudios realizados con estos generadores tenemos:

1. El modulo m debe ser grande. Dado que los x estn entre 0 y m-1, el periodo nunca puede ser mayor que m.
k

2. Para que el computo de mod m sea eficiente, m debe ser una potencia de 2, es decir, 2 . En este caso mod m puede ser obtenido truncando el resultado y tomando en k bits a la derecha.

Ejemplo:
4

45 mod 16 = 45 mod 2 = 13

3. Si b es diferente de cero, el periodo mximo posible m se obtiene si y solo si:

a) Los enteros m y b son primos relativos -- no tengan factores comunes excepto el 1. b) Todo nmero primo que sea un factor de m lo es tambin de a-1. c) es un mltiplo de 4 si m es un mltiplo de 4.
k

Todas estas condiciones se cumplen si m = 2 , a = 4c + 1, y b es impar, donde c, b, y k son enteros positivos. Si un generador tiene el periodo mximo posible se llama generador de periodo completo. Todos los generadores de periodo completo no son igualmente buenos. Son preferibles los generadores con menor autocorrelacin entre nmeros sucesivos. Por ejemplo, los dos generadores siguientes son de periodo completo, pero el primero tiene una correlacin de 0.25 entre x
-18 n-1

y x , mientras que el segundo


n

tiene una correlacin despreciable de menos de 2 .

(( ((

) )

) )

Algoritmo congruencial lineal El siguiente cdigo nos permite generar los nmeros pseudo-aleatorios, utilizando el algoritmo congruencial lineal, esta hecho en java y utiliza la herramienta de NetBeans. import javax.swing.JOptionPane; import javax.swing.*; /* * algoritmo.java */ public class algoritmo extends javax.swing.JFrame {

public algoritmo() { initComponents(); } // <editor-fold defaultstate=collapsed desc=Generated Code> private void initComponents() {} private void jb_calcularActionPerformed(java.awt.event.ActionEvent evt) {

int a=0; int m=0; int x=0; double X[]=new double 100; double R[]=new double 100; String presentar= ;

if ((jtf_Xo.getText()!=null) && (jtf_k.getText()!=null) && (jtf_g.getText()!=null)&&(jtf_c.getText()!=null)){ int Xo=Integer.parseInt(jtf_Xo.getText().toString()); int k=Integer.parseInt(jtf_k.getText().toString()); int g=Integer.parseInt(jtf_g.getText().toString());

int c=Integer.parseInt(jtf_c.getText().toString());

a=1+4*k; m=(int) Math.pow(2, g); X0=Xo;

for (int i= 1; i <= m; i++) { Xi=((a*Xi-1)+c)%(m); Ri=Xi/(m-1); }

for (int i = 1; i <= m; i++) { presentar+=Xi+\t+Ri+\n; } jta_presentar.setText(presentar); //System.out.println(m); //System.out.println(a); } else{ JOptionPane.showMessageDialog(null, Es necesario que los valores de las variables estn completos y sean enteros); } } public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new algoritmo().setVisible(true); } });}

Ejemplo de Generadores Congruenciales Lineales

Los generadores congruenciales lineales son de la forma:

En este ejemplo usaremos los siguientes valores para a, b y m para obtener nmeros aleatorios entre 0 y 1. a=5 b=3 m = 16

(
Usamos esta ecuacin con un cuadro. i 0 1 2 3 4 5 6 7 8 9 10 11 7 6 1 8 11 10 5 12 15 14 9 0

como semilla y obtenemos los nmeros mostrados en el siguiente

0.375 0.063 0.500 0.688 0.625 0.313 0.750 0.938 0.875 0.563 0.000

1.1

Generadores congruenciales lineales multiplicativos:

Los GCL presentados anteriormente son GCL mixtos. Si el incremento b es cero, no hay adicin y el generador es llamado GCL multiplicativo y tienen la forma:

Es obvio que estos son ms eficientes que los mixtos. Eficiencia adicional puede ser obtenida tomando m
k k

= 2 . Por lo tanto hay dos tipos de GCL multiplicativos dependiendo si m = 2 o no.

1.2

Generadores Congruenciales Lineales Mixtos:

Consideremos nuevamente el generador

). En la medida que las

computadoras se han vuelto ms rpidas, la longitud de su ciclo se ha tornado inadecuada ya que se corre el riesgo de que, en unas cuantas horas de simulacin, la secuencia se agote y se repita varias veces trayendo como consecuencia serias dudas en cuanto a la validez de los resultados.
9

Supongamos que tenemos una mquina con un procesador de 1GHz. Esto son 10 ciclos o tics del reloj por segundo. Supongamos tambin que el procesador es capaz de generar un nmero aleatorio por ciclo (esto es muy optimista ya que en realidad se requieren varios ciclos para producir un nmero aleatorio debido a las operaciones involucradas). Bajo estas condiciones se agotara la secuencia en . Por supuestos que ser en ms tiempo, pero se observa que efectivamente esta secuencia es fcilmente agotable durante una simulacin.

2. MTODO DE CUADRADOS MEDIOS Este algoritmo no congruencial o 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 para seleccionar del resultado los D dgitos del centro; el primer numero ri, se determina simplemente anteponiendo el 0, a esos dgitos. Para obtener el segundo r j, se sigue el mismo procedimiento, solo que ahora se elevan al cuadrado los D dgitos del centro que se seleccionaron para obtener el primer ri. Este mtodo se repite hasta obtener n nmeros ri. Los pasos para generar nmeros con el algoritmo de cuadrados medios son: 1. Seleccionar una semilla (X0)con D dgitos (D>3) 2. 3. Sea X0=resultado de elevar X0 al cuadrado; sea X1=los D dgitos del centro. Sea Yj = al resultado de elevar X, al cuadrado; sea Xi+1= los D dgitos del centro, y sea ri=0, D dgitos del centro para toda i=1,2,3n. 4. Repetir el paso 3 hasta obtener los n nmeros rj deseados Si no es posible obtener los D dgitos del centro del nmero Y, agregue ceros a la izquierda del nmero.

Ejemplo 1 Se desea generar una secuencia de nmeros de 4 dgitos pseudo-aleatorios usando el mtodo del medio del cuadrado. Para ello, se elige como semilla el nmero x0 = 3187: (3187)2= 10156969 x1 = 1569 (1569)2= 02461761 x2 = 4617 (4617)2= 21316689 x3 = 3166 (3166)2= 10023556 x4 = 0235 (0235)2= 00055225 x5 = 0552 (0552)2= 00304704 x6 = 3047 (3047)2= 09284209 x7 = 2842

Siguiendo con este proceso se iran obteniendo los nmeros 0769, 5913, 9635, 8332, 4222, 8252,......

Las secuencias obtenidas mediante esta tcnica presentan gran nmero de problemas como bajo periodo (es decir, que suelen caer rpidamente en una rutina que se repite continuadamente) y el hecho de que si en algn momento se produce el nmero cero, todos los nmeros siguientes de la secuencia sern el cero. Si bien este ltimo problema se puede presentar en la mayora de los generadores de secuencias pseudoaleatorias, la mayora de las veces stos se podrn disear de forma que se garantice que el nmero cero no se van a producir. En este generador es imposible garantizar esto. el siguiente ejemplo muestra este caso.

Ejemplo 2 Se desea generar una secuencia de nmeros de dos dgitos pseudo-aleatorios empleando el mtodo del medio del cuadrado, partiendo de la semilla x0 = 44: (44)2= 1936 x1 = 93 (93)2= 8649 x2 = 64 (64)2= 4096 x3 = 09 (09)2= 0081 x4 = 08 (08)2= 0064 x5 = 06 (06)2= 0036 x6 = 03 (03)2= 0009 x7 = 00 (00)2= 0000 x8 = 00

Algoritmo De Cuadrados Medios try{ semilla=txtSemilla.getText(); num=Integer.parseInt(txtCuantos.getText()); txtNumeros.setText(null); if (semilla.length()<4 || Integer.parseInt(semilla)<0 ){ JOptionPane.showMessageDialog(null, "Se necesita una semilla mnima de 4 dgitos...","Error", JOptionPane.INFORMATION_MESSAGE); } else{ long inicial=0; long cuadrado=0; int largoCuadrado=0; int largoSemilla=0; int posicionCentro=0; int diferenciaLargo=0; int cuantos=0; String valor; String cadenaCuadrado=" "; do{ inicial=Integer.parseInt(semilla);

System.out.println("Semiilla inicial : " + inicial); cuadrado=inicial*inicial; cadenaCuadrado=String.valueOf(cuadrado); System.out.println("Semilla al cuadrado : " + cuadrado); largoCuadrado=cadenaCuadrado.length(); largoSemilla=semilla.length(); System.out.println("Longitud de la semilla : " + largoSemilla); System.out.println("Longitud del cuadrado : " + largoCuadrado); diferenciaLargo=largoCuadrado-largoSemilla; System.out.println("Diferencia de las longitudes : " + diferenciaLargo); //agregamos ceros o dejamos igual dependiendo de si es par la diferencia //entre las longitudes if (diferenciaLargo%2==0){ posicionCentro=(largoCuadrado-largoSemilla)/2; } else{ //Aqui es donde agregamos ceros char cero='0'; do{ System.out.println("Agregando ceros..............."); cadenaCuadrado=cero + cadenaCuadrado; largoCuadrado=cadenaCuadrado.length(); largoSemilla=semilla.length(); System.out.println("\tCadena actual : " + cadenaCuadrado); System.out.println("\tLongitud de la semilla : " + largoSemilla); System.out.println("\tLongitud del cuadrado : " + largoCuadrado); diferenciaLargo=largoCuadrado-largoSemilla;

System.out.println("Diferencia de las longitudes" + diferenciaLargo); } while (diferenciaLargo%2!=0); } posicionCentro=(largoCuadrado-largoSemilla)/2; System.out.println("Cadena al cuadrado modificada : " + cadenaCuadrado); System.out.println("Posicion central : " + posicionCentro); valor=cadenaCuadrado.substring(posicionCentro, posicionCentro+largoSemilla); System.out.println("Nmero obtenido: " + valor); txtNumeros.setText(txtNumeros.getText() + "x"+ cuantos + "=" + semilla + "...............x"+ cuantos + "=" + cadenaCuadrado + "...............x" +cuantos + "="+ valor + "...............r" + cuantos + "=" + "0." + valor + "\n"); semilla=String.valueOf(valor); cuantos++; } while(cuantos<num); } } catch(Exception ex){ JOptionPane.showMessageDialog(null, "Falta algun de los dato necesarios o los datos son incorrectos\n o se ha"+"producido un error desconocido por favor verifique...","Error", JOptionPane.INFORMATION_MESSAGE); }

PRUEBAS DE ALEATORIDAD 1. PRUEBA DE SERIES

Esta prueba es usada para probar uniformidad en dos o ms dimensiones. En dos dimensiones, se
2

divide el espacio entre 0 y 1 en K celdas de igual rea. Si tenemos una muestra de tamao n, podemos construir n/2 pares no solapados (x , x ), (x , x ), ..., y contar los puntos que caen en
1 2 3 4

cada celda. Idealmente se esperan

puntos en cada celda. Se puede usar la chi-cuadrado para


2

encontrar la desviacin entre lo observado y lo esperado. Los grados de libertad son K -1. Es fcil ver como se puede extender la prueba a k-dimensiones.

Ejemplo:
2

Para el generador ejemplo, usando una muestra de tamao 500, y dividiendo en 5 = 25 celdas que dan 250 pares no solapados, obtenemos:

y las siguientes frecuencias:

Con 250 pares esperamos 10 observaciones por celda. El valor de es 23,2 y la [ ] 33,2; por lo tanto aceptamos que los nmeros son uniformes en dos dimensiones a un nivel de =0.10. No se deben usar pares solapados. Si se usan pares solapados, el nmero de puntos por celda no es independiente y no se puede usar la prueba chi-cuadrado. La dependencia entre nmeros sucesivos aparece como no-uniformidad en dimensiones ms grandes. Por ejemplo, si nmeros sucesivos tienen correlacin de primer orden negativa, es muy probable un valor alto x sea
n

seguido de un valor bajo x

n+1

. Si graficamos los pares no solapados, los puntos tienden a

concentrarse derecha-y-abajo e izquierda-y-arriba y no se pasar la prueba.

2. PRUEBA PKER Esta es una prueba de independencia basada en la frecuencia con que ciertos dgitos se repiten en una serie de nmeros. Su nombre se debe al popular juego de cartas Pker. Consideremos la siguiente serie de nmeros con una repeticin inusual de dgitos:

0.255, 0.577, 0.331, 0.414, 0.828, 0.909, 0.033, 0.010

En cada caso aparecen uno de los tres dgitos repetido y las posibilidades para este caso son: Los tres dgitos distintos Los tres dgitos iguales Un par de dgitos iguales

y las probabilidades asociadas son:


P(todos distintos) = P(segundo distinto del primero)P(tercero distinto del segundo) P(todos iguales) = P(segundo igual al primero)P(tercero igual al segundo)

P (un par) = 1 P(todos distintos) P(todos iguales)

Supongamos una secuencia de 1000 nmeros aleatorios en donde se analizan los tres primeros dgitos y se tiene que 680 tienen los 3 dgitos distintos, 289 contienen exactamente un par y 31 tienen todos iguales. Los clculos respectivos usando la prueba Chi-Cuadrado son:

Observamos que 47.66 > nmeros.

= 5.99 y por lo tanto rechazamos la hiptesis de independencia de los

Esta prueba se puede extender a ms dgitos pero a su vez las posibilidades aumentan y los clculos se complican. Por ejemplo, para 5 dgitos, podramos tener, todos iguales, todos distintos, exactamente un par, exactamente un trio, un trio y un par, dos pares, etc.

Aplicacin de Prueba de Pker Para realizar esta prueba tomaremos 10 datos y sus 3 primeros dgitos, por lo tanto tenemos: 0.375, 0.063, 0.500, 0.688, 0.625, 0.313, 0.750, 0.938, 0.875, 0.563 Ahora las probabilidades esperadas son: P (todos distintos) = P (segundo distinto del primero) P (tercero distinto del segundo) = (0.9) (0.8) = 0.72 P (todos iguales) = P (segundo igual al primero) P (tercero igual al segundo) = (0.1) (0.1) = 0.01 P (un par) = 1 0.72 0.01 = 0.27

Caso

Frecuencias Observadas (

Frecuencias Esperadas

( )
7.2 0.1 2.7 10 0.09 0.10 0.18 0.37

Todos iguales Todos distintos Exactamente un par

8 0 2 10

Observamos que nmeros.

y por lo tanto aceptamos la hiptesis de independencia de los

3. PRUEBA DE LA CORRIDA

Una corrida se define como un conjunto de nmeros que aparecen ordenados en forma monotonicamente creciente o decreciente. Por ejemplo: 03, 23, 57, 92, 99 contienen una sola corrida, mientras que 03, 99, 23, 92, 27 contiene (03,99), (223,92), (57) Si se utiliza el signo + para identificar que el nmero que aparece a la derecha de otro es mayor, o si es menor, se tiene que: 30, 23, 57, 92, 99, mientras que 03, 99, 23, 92, 57 , Esta prueba se basa en el supuesto que el nmero de corridas es una variable aleatoria. Si una secuencia tiene ms de 20 nmeros, el nmero de corridas que es una variable aleatoria distribuida normalmente con media y varianza conocida.

La prueba se realiza de la siguiente manera: Paso 1.- Se formula la hiptesis Ho: La secuencia de nmeros es aleatoria. Paso 2.- Se selecciona una muestra de tamao n (n>20)

Paso 3.- Se definen con los signos +, - las posibles corridas. Paso 4.- Se define la estadstica r como el numero de corridas. Paso 5.- si n>20 y Ho es verdadera, entonces r se aproxima a una distribucin normal con media: Paso 6.- Se acepta ho, a un nivel de riesgo , si donde z(*) esta tabulada en la distribucin normal. Ejemplo: Se tiene la siguiente secuencia de nmeros pseudoaleatorios: 10 37 08 99 12 66 31 85 63 73 32 04 68 02 99 74 10 77 32 42 76 64 19 09 80 34 45 02 05 03 13 74 09 70 36 76 82 64 74 64 34 24 23 28 64 36 35 68 90 35 si r = 35 De tablas: Z(0.68) = 0.7517 Por lo que para el nivel de significancia por ejemplo 10% Se afirma la Hiptesis Ho: La secuencia de nmeros es aleatoria.

4. PRUEBA DE KOLMOGOROW

La prueba de Kolmogorov-Smirnov para una muestra se considera un procedimiento de "bondad de ajuste", es decir, permite medir el grado de concordancia existente entre la distribucin de un conjunto de datos y una distribucin terica especfica. Su objetivo es sealar si los datos provienen de una poblacin que tiene la distribucin terica especificada. Mediante la prueba se compara la distribucin acumulada de las frecuencias tericas (ft) con la distribucin acumulada de las frecuencias observadas (f obs), se encuentra el punto de divergencia mxima y se determina qu probabilidad existe de que una diferencia de esa magnitud se deba al azar. En las tareas de investigacin se pudo obtener un conjunto de observaciones, en las cuales se supone que tienen una distribucin normal, binomial, de Poisson, etc. Para el caso, las frecuencias de las distribuciones tericas deben contrastar con las frecuencias observadas, a fin de conocer cul distribucin se adecua mejor al modelo.

Pasos: 1. Calcular las frecuencias esperadas de la distribucin terica especfica por considerar para determinado nmero de clases, en un arreglo de rangos de menor a mayor. 2. Arreglar estos valores tericos en frecuencias acumuladas.

3. Arreglar acumulativamente las frecuencias observadas. 4. Aplicar la ecuacin D = ft - f obs, donde D es la mxima discrepancia de ambas. 5. Comparar el valor estadstico D de Kolmogorov-Smirnov en la tabla de valores crticos de D. 6. Decidir si se acepta o rechaza la hiptesis. Ecuacin: D = ft - fobs En esta ecuacin se aprecia que el procedimiento es muy simple y quiz lo que parezca ms complicado corresponde al clculo de la frecuencia esperada de cada tipo de distribucin terica. Por lo tanto, en la marcha de los ejercicios se presentar cada uno de ellos y la manera de aplicar la prueba estadstica. EJEMPLO: En una investigacin, consistente en medir la talla de 100 nios de 5 aos de edad, se desea saber si las observaciones provienen de una poblacin normal. Eleccin de la prueba estadstica. El modelo experimental tiene una muestra y es factible un arreglo en el carcter ordinal o en los rangos de las series de clases. Planteamiento de la hiptesis.

Hiptesis alterna (Ha). Los valores observados de las frecuencias para cada clase son diferentes de las frecuencias tericas de una distribucin normal. Hiptesis nula (Ho). Las diferencias entre los valores observados y los tericos de la distribucin normal se deben al azar.

Nivel de significacin. Para todo valor de probabilidad igual o menor que 0.05, se acepta Ha y se rechaza Ho. Zona de rechazo. Para todo valor de probabilidad mayor que 0.05, se acepta Ho y se rechaza Ha.
Tabla de 100 nios. Los valores X + son 99.2 2.85.

Aplicacin de la prueba estadstica. Primero se elaboran los clculos de los valores tericos esperados para la distribucin normal. Inicialmente se determina el valor Z de los lmites de cada clase en la serie, por ejemplo: en la primera clase se determinan el lmite inferior y el superior (90 y 93), y en las subsecuentes slo los lmites superiores (97, 101, 105 y 109). Para cada valor de Z, se localiza el rea bajo la curva norma tipificada. (Vase: tabla de reas bajo la curva normal tipificada de 0 a 2). Los clculos de valores Z, son de la forma siguiente:

Y as sucesivamente. Para cada valor Z, se localiza el rea de la curva tipificada de la tabla de nmeros aleatorios. A partir de estos valores, se obtiene la diferencia entre los lmites de clases entre el superior y el inferior, por ejemplo: 0.4997 - 0.4793 = 0.020, 0.4793 - 0.2357 = 0.2436, 0.2357 - (-0.2794) = 0.5151, -0.2794 - (-0.4854) = 0.206 y -0.4854 - (-0.4994) = 0.014. Estos resultados de diferencias se multiplican por el tamao de la muestra (100 nios), luego se obtienen las frecuencias tericas y despus se arreglan en frecuencias acumuladas. Clculos de los valores tericos.

Las frecuencias acumuladas tericas y las observadas se arreglan en los rangos correspondientes, como se muestra en la siguiente tabla, y posteriormente se aplica la frmula de KolmogorovSmirnov. Clculo estadstico D de Kolmogorov-Smirnov.

D = ft - fobs = - 0.036
La diferencia mxima D es igual a -0.049, valor que se compara con los valores crticos de D en la prueba muestral de Kolmogorov-Smirnov y se obtiene la probabilidad de la existencia de esa magnitud de acuerdo con la prueba de Kolmogorov-Smirnov. El valor N es 100 y el mayor nmero de N en la tabla es 35, por lo cual se aplica la frmula al pie de la tabla:

Para la probabilidad de Lo anterior quiere decir que para todo valor menor que el crtico para una probabilidad de 0.05, la probabilidad correspondiente es mayor que 0.05, y todo valor mayor que D al calculado tinen una probabilidad menor que 0.05, o sea, es inversamente proporcional al crtico determinado o localizado en la tabla. Decisin. En virtud de lo anterior, el estadstico de Kolmogorov-Smirnov obtendo es menor que el crtico y su probabilidad mayor que 0.05, por lo tanto, se acepta Ho y se rechaza Ha. Interpretacin. Las frecuencias observadas y las tericas calculadas no difieren significativamente. Por lo tanto, las observaciones tienen una distribucin normal.

You might also like