Está en la página 1de 10

3.

1 INTRODUCCIN los sistemas estocsticos pueden ser modelados mediante la combinacin apropiada de lanzamientos de dados no cargados cmo crear aleatoriedad dentro de un computador? Cules son los principios sobre los cuales debe construirse una funcin que cada vez que sea invocada retorne un nmero (seudo) aleatorio? En este captulo se describen las tcnicas ms importantes para lograr este objetivo. 3.2 CONCEPTO DE ALEATORIEDAD Y NMEROS ALEATORIOS Para un estudio de simulacin es ms importante el concepto de nmeros aleatorios que el de nmero aleatorio ; sin embargo, puesto que uno implica al otro, esta seccin inicia discutiendo la idea formal de nmero aleatorio y finaliza con el concepto de nmeros aleatorios.

3.2.1 Nmero aleatorio Definicin 1 1 : Nmero aleatorio. Un nmero extrado de una poblacin probabilsticamente uniforme en el intervalo entonces se se

denomina nmero aleatorio . En otras palabras, siempre que denomina nmero aleatorio.

Notas: 1. 2. 3. El nombre ms apropiado para los El valor esperado de ese nmero es sera nmero aleatorio uniforme . .

Un nmero aleatorio es la realizacin de una variable aleatoria uniforme en

3.2.2 Nmeros aleatorios Definicin 1 2 : Nmeros aleatorios. Un conjunto de vector aleatorio conjunta que para nmeros se denominan aleatorios siempre que sean extrados del con funcin de densidad de tal forma y . es un nmero aleatorio

Notas: 1. 2. 3. Es una realizacin de un proceso estocstico de sucesos independientes. Cualquier subconjunto de nmeros es tambin aleatorio La aleatoriedad es un concepto perfectamente definido.

3.2.3 Generador de nmeros aleatorios Definicin 1 3 : Generador de nmeros aleatorios. Se denomina Generador de nmeros aleatorios a un algoritmo capaz de producir una secuencia de nmeros independientes. Notas: 1. 2. 3. No es una actividad trivial construir este tipo de algoritmos Por esta razn en simulacin y otras disciplinas se construyen los generadores de nmeros cuasi-aleatorios Un generador de nmeros cuasi-aleatorios es aquel en el cual los nmeros obtenidos, aunque no son propiamente aleatorios en un sentido general, son estadsticamente uniformes el intervalo [0,1] y estadsticamente independientes. extrados de una poblacin uniforme mediante sucesos

3.3 MTODOS PARA GENERAR NMEROS ALEATORIOS Bsicamente existen dos formas para determinar o generar un nmero aleatorio usando computadores. Las tcnicas ms usuales se describen a continuacin. 3.3.1 Dispositivos aleatorios Son aquellos Generadores, basados en el estado del sistema, en los cuales el algoritmo mide el nivel de alguna variable estocstica del sistema de cmputo, justo en el momento de ser invocado. Por ejemplo, el nivel de voltaje de un circuito integrado del sistema. Aunque a primera vista es un buen generador, presenta el inconveniente de no poder asegurar que la distribucin de probabilidad de la cual provienen los datos sea uniforme. 3.3.2 Bases de datos Ello supone producir la secuencia. Un conjunto de nmeros aleatorios, con algn procedimiento externo a la mquina, luego de lo cual la secuencia determinada ser la fuente de alimentacin de una base de datos. Con este procedimiento, se logran nmeros que provienen de una distribucin uniforme y, adems, a travs de sucesos independientes; sin embargo, presentan un inconveniente a la vista del ingeniero: consumen recursos valiosos en el computador 3.3.3 Ecuaciones en diferencias y pseudoaleatoriedad Las ecuaciones en diferencias se emplean para construir generadores de nmeros cuasialeatorios . Es decir que tales nmeros no son verdaderamente aleatorios. La razn es que el nmero obtenido depende funcionalmente de algunos o todos sus predecesores 3.3.3.1 Modelo General Sea y una secuencia de nmeros (usualmente enteros) indexada bajo la

variable independiente y gobernada por la expresin es una ecuacin en diferencias (no necesariamente lineal ni homognea) que quedar totalmente especificada si se determinan las condiciones de frontera ,

denominadas semillas del generador entonces el nmero aleatorio se obtiene mediante una transformacin definida por:

Esta transformacin asegura que los nmeros Notas: 1. 2.

pertenezcan al intervalo

Este es el camino ms utilizado actualmente La funcin debe seleccionarse de tal forma que los nmeros sean independientes (estadsticamente hablando), mientras que la transformacin debera tratar de asegurar que stos sea uniformes en el intervalo . No para cualquier par funcin-transformacin se obtendrn buenos nmeros cuasialeatorios. El trabajo para encontrar las apropiadas es, la mayora de la veces, un trabajo complicado.

3.

Se encuentran varios tipos de programas basados en ecuaciones en diferencias que vale la pena destacar. El inters de estudio para esos programas, denominados Generadores Clsicos o tambin conocidos como Procedimientos aritmticos , no va ms all de la simple curiosidad. 3.3.3.2 Un generador no lineal La definicin de generador con base en una ecuacin en diferencias no restringe la funcin que se debe emplear; sin embargo, los estudios en el rea parecen mostrar que no se requiere procedimientos complejos para obtener nmeros aleatorios, por el contrario la sencillez es una buena tendencia en su diseo. Ejemplo 1 1 : Un generador no lineal. A manera de ejemplo considrese un generador en el cual manera donde y y en el que para , , . De esta y dados y

son funciones que extraen los dgitos de un nmero real y obtienen

el valor absoluto de sus argumentos respectivamente ( ). Pero son buenos las secuencias de nmeros pseudo-aleatorios encontrados en este ejemplo? Se deja como ejercicio al estudiante responder formalmente esta inquietud.

3.3.3.3 Mtodo de J.V. Newmann(1) A partir de una ecuacin en diferencias no lineal de grado dos, y homognea de orden 1 con coeficientes iguales a 1, semilla pueden generarse nmeros aleatorios con base en la (condicin de frontera dada). El algoritmo presenta la siguiente fisonoma:

Algoritmo 3 1: Generador de Newmann

Donde

Cul es la funcin

aqu? Cul la transformacin

3.3.3.4 Mtodo del Producto Medio Es una generalizacin del mtodo de Neumann. Aqu en lugar de considerar usa . El algoritmo es el siguiente: se

Algoritmo 3 2: Generador del Producto medio Notas: 1. Puesto que se emplea una relacin de recurrencia de orden dos, se requieren dos condiciones de frontera o semillas. 2. Es un procesamiento que o produce periodos muy largos, deseable en simulacin. 3.3.3.5 Mtodo de multiplicacin constante Esta tcnica emplea la ecuacin en diferencias para y donde es una constante. La transformacin es la misma que se emplea en el mtodo de Neumann. Por ejemplo si y entonces y

Una ecuacin en diferencias es la contraparte discreta de las ecuaciones diferenciales. Tambin son conocidas como Relaciones de recurrencia. 3.4 TCNICAS CONTEMPORNEAS PARA GENERAR NUMEROS ALEATORIOS 3.4.1 Criterios para la seleccin de un buen generador Es deseable que los generadores de nmeros aleatorios cumplan las siguientes caractersticas: 1. 2. 3. 4. De complejidad a lo ms lineal De pocas instrucciones . Que produzca nmeros seudo-aleatorios peridicos De naturaleza no degenerativa

Con base en estos criterios, en la actualidad se construyen generadores basados en una frmula recursiva en la cual es, normalmente, lineal y la transformacin incorpora el mdulo de dividir el resultado de entre algn entero . Sin embargo, este procedimiento sigue siendo completamente determinstico, an as, Knuth demostr que los nmeros as obtenidos tienen una distribucin aparentemente uniforme en el intervalo (0,1) y, adems, presentan la apariencia de provenir de eventos independientes.

3.4.2 Generador congruencial lineal

El generador congruencial lineal emplea la funcin transformacin

y la

con lo cual es claro que el nmero aleatorio se obtiene

mediante la expresin por el usuario y . Notas:

, para

lassemillas dadas

1. En ocasiones al generador congruencial se le conoce tambin con el nombre Generador con ponderaciones debido a que las constantes

pueden

interpretarse como la importancia de la variable dentro del clculo del siguiente nmero aleatorio. 2. Aunque esta tcnica cumple con la mayora de las caractersticas deseables para un generador, no para todos los parmetros el mtodo funciona bien.

Algunos de los ms populares generadores se obtienen a partir de estos postulados. Por ejemplo el generador de Fibonacci, se obtiene cuando semillas y por lo tanto . , , , y las

Es importante recordar que si entera) entonces se escribe 3.4.3 Mtodo de Knuth

es el residuo de dividir y .

entre

el cociente (parte

Sin duda alguna el mtodo ms frecuentemente usado en la actualidad lo propuso Donald Knuth. Su generador es un caso particular del generador congruencial lineal tal vez el ms simple y sencillo de todos pero a la vez uno de los mejores que se conocen hasta la fecha. 3.4.3.1 Definicin El generador de Knuth se obtiene del congruencial lineal cuando semilla y por lo tanto , y son constantes no negativas. Notas: , para , , , la

. En este caso los parmetros

1. La semilla debe ser un nmero entero definida en el conjunto , sin embargo, normalmente los algoritmos que implementan el mtodo de Knuth no imponen restriccin y, simplemente, filtran ese dato mediante la expresin y es este resultado el que se emplea como semilla. 2. Frecuentemente cuando el generador se denomina multiplicativo . Es un tipo de generador que se emplea mucho por su facilidad de implementacin. 3. Nuevamente, no para todos los parmetros el generador ser bueno por ello algo de teora debe emplearse para llegar a buenos resultados. Principalmente la secuencia debera ser de periodo completo es decir que el periodo del generador debera ser , la secuencia debera parecer aleatoria.

Ejemplo 3 2 : Generador congruencial evidentemente malo. Al considerar los nmeros generados por este mtodo con los parmetros , y se obtiene los resultados que se muestran en la Tabla 3 - 1. ,

0 1 2 3 4 5 6 7 8 9 10 6 3 3 3 3 3 3 3 3 3 3 0.667 0.333 0.333 0.333 0.333 0.333 0.333 0.333 0.333 0.333 0.333
Tabla 3 -1 : Generador congruencial con , , y Es claro que es un psimo generador pues es degenerado y su periodo no es el mximo; ms an las secuencias (obviamente) no parecen aleatorias. Ejemplo 3 3: Generador congruencial aparentemente bueno En la Tabla 3 - 2 se presenta un generador congruencial con , , y . Al observar con algn detalle es claro que no es degenerado, presenta un periodo completo y la secuencia es (por lo menos en apariencia) aleatoria.

0 1 2 3 4 5 6 7 8 9 10 5 4 7 6 1 0 3 2 5 4 7 0.625 0.500 0.875 0.750 0.125 0.000 0.375 0.250 0.625 0.500 0.875
Tabla 3 - 2 : Generador congruencial con , , y

Claramente, la calidad del generador depende de los parmetros que se seleccionen. Efectivamente Knuth y otros investigadores en el rea han demostrado que la seleccin de los parmetros para un buen generador debe cumplir algunas condiciones mnimas. A continuacin se exponen ciertas condiciones deseables en cada uno de esos parmetros. Dado que existe un nmero finito de residuos en este generador, la secuencia eventualmente se repetir. Es decir, existirn dos enteros y , de forma que para los cuales si y, en consecuencia para todo entero positivo seguido de un segundo . De esta manera es el entero positivo ms pequeo para el cual , entonces el generador producir

un conjunto de nmero iniciales conjunto

el cual se repetir indefinidamente.

Al entero se le denomina periodo del generador . As mismo se dice que el generador es de periodo mximo siempre que . 3.4.3.2 Criterios para la seleccin de la semilla

La semilla o condicin de frontera

debe ser un entero definido en el

conjunto que puede ser seleccionada arbitrariamente . Esto significa que la calidad del mtodo no depende para nada de la condicin de frontera, por esa razn es frecuente que el usuario suministre ese dato o que se emplee un mtodo (no necesariamente aleatorio) para suministrar este nmero. En la prctica, sin embargo, es frecuente que los algoritmos (ver seccin 1.4.3.4 ) realicen una transformacin empleando la funcin de valor absoluto y la funcin mdulo para garantizar que algoritmo es cumpla con estas condiciones, es decir que si el nmero suministrado al entonces . y el factor

3.4.3.3 Criterios para la seleccin del mdulo

El nmero debe ser grande , tomado de tal manera que sea del orden de la longitud de palabra del computador. Es decir debera poder escribirse de la forma o algn nmero que cercano a l como , donde es el nmero de bits empleado para el tipo de entero que se defina para , con lo cual se asegura que el mdulo va a ser tan grande como sea posible. Por ejemplo si el lenguaje de programacin emplea 4 Bytes para almacenar un entero entonces . A continuacin se enuncian, sin demostracin, algunos resultados importantes que sirven para seleccionar apropiadamente el parmetro . Se deja, sin embargo, la inquietud al lector para que consulte la bibliografa incluida cuando desee ampliar su conocimiento y demostracin de esos resultados. Teorema 3 - 1 Si el factor entero y el mdulo son primos relativos, es decir que el . , existe un

para el cual

Teorema 3 - 2 Si pequeo , entonces el periodo del generador es el entero positivo ms para el cual donde .

Teorema 3 - 3 Si el entonces el periodo de la secuencia es cada nmero primo que divide a se tiene que 1. para cada primo impar 2. Si 4 divide a , entonces 3. El . . . si y nicamente si para

Con base en estos enunciados y otros de menor importancia, es posible concluir, adems, que: 1. Es recomendable que cumpla la restriccin de que y, en la mediad de

lo posible que . 2. El parmetro c debe ser un nmero impar no mltiplo de 5. 3.4.3.4 Algoritmo Una primera aproximacin a la implementacin de esta tcnica puede observarse en el pseudo cdigo que sigue:

Algoritmo 3 - 1 : Esquema general del mtodo Congruencial En el algoritmo se recibe como parmetro la semilla que debe ser un nmero entero. Para garantizar que se encuentre en el rango apropiado se pasa a travs de la funcin valor absoluto para suprimirle un posible signo negativo y luego a travs de la funcin mdulo.

En la siguiente instruccin existe un llamada a la funcin . Esta funcin construye una lista dinmica (posiblemente) bidimensional en la que en la primera columna se almacenarn las semillas que el usuario ha empleado hasta el momento y ligada a cada semilla en un sentido horizontal se guardar el que deber usarse para calcular el siguiente nmero aleatorios cuando el usuario emplee nuevamente la funcin de Knuth con esa semilla asociada. Para calcular este valor dentro de esta funcin se deber emplear una instruccin como .

De esta manera cada vez que se desee generar un nmero aleatorio esta funcin extrae el que se requiere en el clculo de . Cuando la semilla que el usuario enva no se encuentra en la lista se crea una nueva fila para esa semilla y se retorna el mismo valor de la semilla dado como parmetro a esta funcin (el valor filtrado) e internamente se calcula el que se emplear la prxima vez que se invoque a esta funcin con el valor de esa semilla.

Ejemplo 3 - 2 : Funcionamiento de la Funcin Anterior_Z Suponiendo que se ha diseado un generador de Knuth con los parmetros, , y . Suponiendo tambin que la primera vez el usuario invoca a la funcin entonces sta llama a su vez a la funcin quien se da cuenta que hasta ese momento no haba sido llamada anteriormente y por lo tanto crear un registro en el cual almacene la semilla 7 y calcular y guardar el valor 4 que corresponde al prximo valor de que deber usarse cuando el usuario vuelva a llamar la funcin de Knuth con esta misma semilla (como se muestra en la Tabla 3 en donde se tiene la secuencia para los parmetros dados y la semilla ).

0 7

1 4

2 3 4 5 10 3

5 0

6 1

7 8 9 10 11 6 15 12 13 2

Tabla 3 - 3: Secuencia con una semilla igual a 7 Cuando el usuario ejecuta nuevamente la instruccin funcin , la

busca en la lista y encuentra que esa semilla ya est en uso y, en

consecuencia, extraer el valor de que deber usarse en el clculo del aleatorio (en este caso el 4) actualizar la lista, es decir reemplazar el 4 por el 5 y retornar . Ahora bien, cuando el usuario emplee nuevamente la funcin entonces encuentra que esa semilla no ha sido utilizada por lo tanto crear un registro en el que la almacena guarda el prximo dato a utilizar, que como se muestra en la Tabla 4 corresponde al valor de 0, y retorna 3.

0 3

1 0

2 1

3 4 5 6 7 8 9 10 11 6 15 12 13 2 11 8 9 14

Tabla 3 - 4: Secuencia de datos con una semilla 19 Con este mismo procedimiento es claro que, si se opera secuencialmente , Nota: Al encontrar unos buenos parmetros se pueden encontrar diferentes secuencias que producirn buenos nmeros aleatorios. Este hecho es importante puesto que en simulacin de sistemas complejos varias veces se exige que se empleen distintos generadores (en este caso secuencias independientes). Con un valor de y apropiados se pueden tener simultneamente miles de millones de buenos generadores de nmeros aleatorios implementados en un solo algoritmo. , , , etc. ,

También podría gustarte