Generadores de Números U(0,1)

 ¬ Principal 

La mayoría de los lenguajes de programación tienen incorporada una función para generar números aleatorios, con distribución uniforme en el intervalo (0,1). Esta función es la base de la generación de números aleatorios con otras distribuciones. Como en realidad estos números se generan a partir de una relación de recurrencia puramente determinística, no son números aleatorios sino determinísticos. Pero, a los fines de la simulación, esto no es importante si parecen aleatorios. Por eso a estos números se los llama a veces seudoaleatorios.

En el caso de Delphi, se trata de la función random (sin argumentos), la que devuelve números de tipo real. Si coloca el argumento rango, generará números enteros desde 0 hasta rango-1.

Para inicializar (comenzar) la generación de números, utilice la función randomize (sin argumentos). Pero si desea una secuencia de números que luego pueda replicar, utilice para inicializar la función randseed(semilla), donde semilla será el número inicial (de tipo longint, hasta 2147483647) para la secuencia.


Vea la ayuda o lea el manual de su lenguaje sobre la función random y sus relacionadas. Luego:

Haga un programa que publique los números aleatorios del generador de su lenguaje.

Datos de Entrada: Cantidad de números a generar, Opción para grabar los números como archivo de texto o de otro tipo, Inicializar semilla.

Datos de Salida: Lista de números, o Archivo


Es posible (aunque improbable), que su lenguaje no tenga un generador de números aleatorios. También es posible que quiera que su trabajo de investigación pueda ser replicado por otras personas, utilizando otro lenguaje.

En ese caso, no debe preocuparse. Existen generadores portátiles de números aleatorios con distribución uniforme. Aquí se da uno congruencial mixto y uno congruencial multiplicativo.


Generador Congruencial Mixto

El código en Delphi es:

function aleat:double; {GENERADOR PORTATIL MIXTO de NAYLOR}

const a=129; c=1; modulo=34359738368;

begin

semilla:=((a*semilla +c) mod modulo);

aleat:=semilla/modulo;

end;


 

Generador Congruencial Multiplicativo

El código en Delphi es

function aleat:double; {GENERADOR PORTATIL MULTIPLICATIVO}

const a=16807; modulo= 2147483647; {modulo es un numero primo}

begin

semilla:=((a*semilla) mod modulo);

aleat:=semilla/modulo;

end;


La función mod es el módulo de la división. Significa encontrar el resto de la división entre (a*semilla +c) y modulo. Este resto será un número comprendido entre 0 y el módulo.

La variable aleat, entonces, al dividirse por modulo, será un número comprendido entre 0 y (modulo-1)/modulo; digamos que casi 1.

La variable semilla debe ser inicializada: se le debe dar un valor, fuera de la función. Elija cualquier número entre 0 y módulo-1. Cuando quiera que el generador le dé la misma sucesión de números, asígnele el mismo valor inicial.