Volver a la página de enlaces | Página personal de Francisco Vila

Generador de Tausworthe Rápido y Seguro

Creo que se pronuncia [Tauswer]. Los generadores de Tausworthe producen números pseudo-aleatorios con un período grande. En simulación se utilizan mucho; en los exámenes de la asignatura de Simulación de la carrera de Informática, siempre cae un problema que pide dar unos términos de la serie pseudo-aleatoria producida por un generador de Tausworthe.

Mi objetivo al sistematizar este procedimiento manual era convertir la parte más tediosa y proclive a errores de los exámenes de simulación, en la más rápida y segura.

En primer lugar aprovechemos que se permite utilizar cualquier material: no olvides varias hojas de papel cuadriculado tamaño folio. Toma una y ponla en apaisado.

Vamos a suponer los siguientes parámetros: 10 números en grupos de 6 bits.
r=4
q=9
b1=b2=b3=0; b4=b5=b6=1; b7=b8=b9=0
 

Preparación

Hacemos 10 corchetes horizontales que abarquen grupos de 6 cuadritos.
Escribimos la cadena inicial al principio de la línea y subrayamos el segundo bit que interviene en el cálculo de bi+1: estos es, b6.
(El primero siempre es b1)

000111000

Ahora copiamos en la fila inmediatamente inferior esta cadena, comenzando por el bit subrayado:

000111000
1000
 

Desarrollo

Ahora comienza la máquina a funcionar: Hacemos la operación XOR en vertical por columnas: anotando el desultado TRES VECES: la primera debajo, en la misma columna; la segunda al final de la segunda fila; la tercera al final de la fila superior. Así:

0001110001
10001
1

Proseguimos siempre haciendo XOR y anotando cada resultado tres veces, hasta completar el último grupo:

000111 000100 101010 001101 100111 110011 110001 011011 100101 001000
100010 010101 000110 110011 111001 111000 101101 110010 100100 0
100101 010001 101100 111110 011110 001011 011100 101001 000

Si necesitamos más de una línea, es muy fácil continuar debajo, sin tener que preocuparse por perder la cuenta.

Ahora cómprate una calculadora tipo Casio con la función BASE-N y ponla en MODE 0 en binario: Shift-BIN

Escribe cada grupo por turno y conviértelo a decimal con la tecla DEC. Anota el resultado sobre el mismo grupo.

  7      4      42     13     39     51     49     27     37     8
000111 000100 101010 001101 100111 110011 110001 011011 100101 001000
 

Comprobación

Lo mejor del sistema (me parece a mí) es que la comprobación se puede hacer repetidas veces muy rápido.

Se rodean con un círculo las parejas 1-1 de las dos primeras filas, y el resultado de la tercera fila (yo lo pongo aquí en rojo):

000111 000100 101010 001101 100111110011 110001 011011 100101 001000
100010 010101 000110 110011 111001111000 101101 110010 100100 0
100101 010001 101100 111110 011110001011 011100 101001 000

El resultado tiene que ser cero en todas las parejas. Al final hay una pareja que no es necesario comprobar.

Ahora se hace lo mismo con las parejas 0-0, rodeando con un círculo la pareja y el resultado:

000111 000100 101010 001101 100111110011 110001 011011 100101 001000
100010 010101 000110 110011 111001111000 101101 110010 100100 0
100101 010001 101100 111110 011110001011 011100 101001 000

Si todos los bits que quedan sin rodear con un círculo en la tercera fila son 1, el resultado es correcto.

Este sistema seguramente admite mejoras. ¿Alguna sugerencia?

Bibliografía

Law, Averill M.; Kelton. W David (1991). Simulation Modeling and Analysis. McGraw Hill.

Papoulis, A. (1991). Probability, Random Variables and Stochastic Processes. McGraw Hill.

--
Francisco Vila