Esta pregunta se relaciona principalmente con un problema práctico de ingeniería de software, pero me gustaría saber si los teóricos podrían proporcionar más información al respecto.
En pocas palabras, tengo una simulación de Monte Carlo que usa un generador de números pseudoaleatorio, y me gustaría paralelizarlo para que haya 1000 computadoras que ejecuten la misma simulación en paralelo. Por lo tanto, necesito 1000 secuencias independientes de números pseudoaleatorios.
¿Podemos tener 1000 flujos paralelos con las siguientes propiedades? Aquí debería ser un PRNG muy conocido y ampliamente estudiado con todo tipo de buenas propiedades teóricas y empíricas.
Las transmisiones son probablemente tan buenas como las que obtendría si simplemente usara y dividiera la transmisión generada por en 1000 transmisiones.X
Generando el siguiente número en cualquier corriente es (casi) tan rápido como la generación de la siguiente número con .
Dicho de otra manera: ¿podemos obtener múltiples transmisiones independientes "gratis"?
Por supuesto, si simplemente usamos , siempre descartando 999 números y escogiendo 1, entonces ciertamente tendríamos la propiedad 1, pero perderíamos en el tiempo de ejecución por el factor 1000.
Una idea simple sería usar 1000 copias de , con semillas 1, 2, ..., 1000. Esto ciertamente sería rápido, pero no es obvio si los flujos tienen buenas propiedades estadísticas.
Después de buscar en Google, he encontrado, por ejemplo, lo siguiente:
La biblioteca SPRNG parece estar diseñada exactamente para este propósito y es compatible con múltiples PRNG .
El tornado de Mersenne parece ser un PRNG popular hoy en día, y encontré algunas referencias a una variante que es capaz de producir múltiples flujos en paralelo.
Pero todo esto está tan lejos de mis propias áreas de investigación, que no pude entender qué es realmente el estado del arte y qué construcciones funcionan bien no solo en teoría sino también en la práctica.
Algunas aclaraciones: no necesito ningún tipo de propiedades criptográficas; Esto es para el cálculo científico. Necesitaré miles de millones de números aleatorios, por lo que podemos olvidar cualquier generador con un período de .
Editar: no puedo usar un verdadero RNG; Necesito un PRNG determinista. En primer lugar, ayuda mucho con la depuración y hace que todo sea repetible. En segundo lugar, me permite hacer, por ejemplo, la búsqueda de mediana de manera muy eficiente al explotar el hecho de que puedo usar el modelo de múltiples pasos (ver esta pregunta ).
Edición 2: hay una pregunta estrechamente relacionada @ StackOverflow: generador de números pseudoaleatorios para el entorno de clúster .