Generación de números aleatorios a partir de un fenómeno natural

Anuncio
GENERACIÓN DE NÚMEROS ALEATORIOS ........................................................... 2
GENERACIÓN A PARTIR DE LA NATURALEZA................................................ 2
UTILIZACIÓN DE TABLAS DE NÚMEROS ALEATORIOS ................................. 3
MÉTODO DEL CUADRADO MEDIO....................................................................... 4
MÉTODO CONGRUENCIAL LINEAL (MULTIPLICATIVO) ................................ 6
MÉTODO CONGRUENCIAL MULTIPLICATIVO PURO ...................................... 7
GENERACIÓN DE NÚMEROS ALEATORIOS
Desde que se empezaron a utilizar los ordenadores ha habido gran interés en simular
diferentes fenómenos. Para ello era necesario disponer de números que se generaran al
azar y ha habido muchos intentos de conseguir métodos que permitieran hacer esto con
sencillez y rapidez.
A continuación se describen algunos de los principales métodos utilizados a lo largo de
la historia para generar números pseudoaleatorios.
GENERACIÓN A PARTIR DE LA NATURALEZA
Dado que los fenómenos de la naturaleza se generan normalmente al azar, una de las
primeras ideas que se les ocurrieron a los científicos, que trataban de simular modelos,
consistió en utilizar acontecimientos naturales para obtener valores en las pruebas
realizadas mediante computadores.
Las denominadas "semillas" se obtenían a partir de algún fenómeno aleatorio de la
naturaleza y a partir de ella se obtenían el resto de valores para iniciar el proceso de
simulación.
La principal deficiencia que tiene este método es que no nos permite volver a generar un
valor obtenido con anterioridad para repetir un experimento. Recuérdese una de las
características que distinguen a los experimentos en la ciencia es que puedan repetirse
de manera que un investigador pueda repetir un experimento realizado por otro con el
fin de contrastar los resultados obtenidos por ambos. Sin embargo, esta no es una razón
excesivamente convincente ya que fácilmente puede guardarse la semilla para volver a
realizar el experimento.
Si el experimento no puede repetirse en las mismas condiciones establecidas, entonces
la ciencia no lo considera un experimento y por lo tanto no es un experimento científico.
Hoy en día los métodos naturales no se utilizan para generar semillas para los
experimentos. Entre otras razones, podemos destacar las siguientes:
La semilla que genera el método natural no es necesariamente una buena semilla, es
decir, existen semillas que generan buenas secuencias pseudoaleatorias y semillas
fatales, en el sentido de que la secuencia es excesivamente corta.
Por otro lado, estos métodos son caros y no suponen ninguna ventaja. Por ello hoy en
día no tiene justificación su uso.
UTILIZACIÓN DE TABLAS DE NÚMEROS ALEATORIOS
Este método se utilizó hasta que los investigadores tuvieron la oportunidad de utilizar
ordenadores para la generación de números pseudoaleatorios. A partir de entonces han
quedado en desuso lo mismo que les ha ocurrido a las, muy utilizadas, tablas de
logaritmos.
Una de las más famosas de estas tablas, para obtener números aleatorios, es la de la
empresa RAND editada en 1955.
MÉTODO DEL CUADRADO MEDIO
Este método fue utilizado por primera vez por John (János) von Neumann (Budapest
Hungría diciembre de 1903- muere de cáncer en Washington el 8 de febrero de 1957)
para la obtención de números pseudoaleatorios mediante computador.
El método consiste en utilizar un número del intervalo 1 a 99999999. De este número se
escogen un máximo de cuatro cifras del siguiente modo:
Si el número es menor o igual que 9999 entonces se escoge ese número.
Si el número tiene 5 cifras, se escogen las cuatro de la izquierda.
Si el número tiene 6, 7 u 8 cifras, se escogen las cuatro que se encuentran a la izquierda
de las centenas.
Una vez escogido el número, se eleva al cuadrado y para obtener el siguiente se vuelven
a escoger cuatro números tal como se ha indicado anteriormente.
Su interés es meramente histórico ya que actualmente no se utiliza por generar
secuencias de periodo muy pequeño.
A continuación mostramos los resultados que deben obtenerse para cada uno de los
números mostrados en la columna de la izquierda:
4443
9989
88
10000
10023
99989
100001
999999
1000001
7898776
99909967
93412527
3412546
412578
99999971
4443
9989
88
1000
1002
9998
1000
9999
0
8987
9099
4125
4125
4125
9999
A continuación mostramos cómo pueden obtenerse las cifras centrales.
Function num_centro(n)
If n <= 9999 Then
num_centro = n
ElseIf n <= 99999 Then
num_centro = n \ 10
ElseIf n <= 999999 Then
num_centro = n \ 100
Else
n = n \ 100
num_centro = n - (n \ 10000) * 10000
End If
End Function
Veamos otra forma de hacerlo tratando los números como cadenas y como números,
con la intención de que resulte algo más sencillo.
Function cifras_centro(x)
longitud = Len(x)
If longitud <= 4 Then
cifras_centro = x
ElseIf longitud = 5 Then
cifras_centro = x \ 10
ElseIf longitud = 6 Then
cifras_centro = x \ 100
ElseIf longitud = 7 Then
cifras_centro = resto(x) \ 100
Else
cifras_centro = resto (resto(x)) \ 100
End If
End Function
Function resto(x)
resto = Mid(x, 2)
End Function
Ejercicio:
Escribir un procedimiento que utilizando una semilla situada en una celda de la hoja,
genere en una columna la secuencia de valores proporcionados por este método.
Después de generada una columna con suficientes números, calcular el periodo de la
secuencia obtenida.
MÉTODO CONGRUENCIAL LINEAL (MULTIPLICATIVO)
En esta sección consideraremos métodos para generar una secuencia de fracciones
aleatorias, es decir, números aleatorios reales, Un, distribuidos uniformemente entre
cero y uno. Ya que un computador puede representar un número real con precisión
limitada, en realidad deberíamos generar números enteros, Xn, entre 0 y algún número
m; la fracción
Un 
Xn
m
Proporcionará valores entre cero y uno. Normalmente el m es el tamaño de la palabra de
la memoria del computador, por lo que Xn puede considerarse como el contenido entero
de una palabra del computador con el punto decimal en el extremo derecho y Un puede
considerarse como el contenido de la misma palabra suponiendo el punto decimal en el
extremo izquierdo.
Con gran diferencia, el método más popular para generar números aleatorios sigue el
siguiente esquema debido a D.H.Lehmer1 en 1949.
X n 1  (aXn  c) mod m
Donde todos los valores utilizados son enteros
n
m
a
c
Xo
índice de la sucesión
módulo
multiplicador
incremento
valor inicial
n≥0
m>0
0≤a<m
0≤c<m
0 ≤ Xo < m
Por ejemplo, la secuencia que obtendríamos utilizando los siguientes valores
m
a
c
Xo
módulo
multiplicador
incremento
valor inicial
10
7
7
7
Para obtener los sucesivos valores de la sucesión puede utilizarse la siguiente función,
codificada en VBA, para representar la expresión anterior.
Function gen(a, Xn, c, m)
gen = (a * Xn + c) Mod m
End Function
1
Proc. 2nd Symp. on Large-Scale Digital Calculating Machinery. Cambridge: Harvard University Press,
1951, pag 141-146.
MÉTODO CONGRUENCIAL MULTIPLICATIVO PURO
Es un caso particular del método anterior en el que se usa c igual a 0.
Se ha utilizado bastante con la idea de ahorrar tiempo de cálculo al evitar la suma.
Por ejemplo:
m
a
c
Xo
módulo
multiplicador
incremento
valor inicial
65535
7
0
12345
También se suele utilizar el módulo:
m  216  3
Los valores que nosotros utilizaremos utilizan el módulo siguiente:
m  232  1  2.147.483.647
Y como multiplicador usaremos el siguiente valor de a:
a  216  3  65.539
Descargar