Paralelo Mersenne Twister para Monte Carlo

10

Recientemente, me encontré con un comentario afirmando que casi todos los investigadores que hacen los métodos de Monte Carlo lo están haciendo mal. Continuó explicando que simplemente elegir diferentes semillas para diferentes instancias de un PRNG, como el Mersenne Twister, no es suficiente para garantizar resultados imparciales ya que pueden ocurrir colisiones malas . El artículo de Wikipedia sobre el Mersenne Twister parece corroborar:

Múltiples instancias de Mersenne Twister que difieren solo en el valor de semilla (pero no en otros parámetros) generalmente no son apropiadas para las simulaciones de Monte-Carlo que requieren generadores de números aleatorios independientes, aunque existe un método para elegir múltiples conjuntos de valores de parámetros.

Tengo que admitir que soy culpable de los cargos. Pero también lo son todas las otras implementaciones de bibliotecas paralelas de Monte Carlo que he visto hasta ahora, en particular ALPS .

El artículo de Wikipedia también hace referencia a dos documentos que ofrecen remedio:

Ambos métodos han sido creados por Matsumoto y Nishimura, los autores originales del algoritmo Mersenne Twister.

Me temo que no tengo mucho conocimiento de teoría de números o álgebra y no entiendo completamente los esquemas anteriores o las matemáticas detrás del Mersenne Twister. Mis preguntas son principalmente de naturaleza práctica:

  • ¿Cuánto realmente debo preocuparme por introducir sesgo en mis simulaciones cuando no empleo un esquema de este tipo si a casi nadie le importa en la práctica (al menos en mi comunidad)?
  • Si tuviera que implementar una de estas contramedidas, ¿estoy en lo cierto al suponer que la Jump-Ahead es más adecuada ya que se basa en una teoría firme y es el método más moderno?
Jonas Greitemann
fuente
1
¿No es esta pregunta específica para MT? Otros PRNG tienen formas bastante simples de generar flujos independientes, como se describe en el otro trabajo de Pierre L'Ecuyer (ver especialmente sus encuestas, como iro.umontreal.ca/~lecuyer/myftp/papers/parallel-rng-imacs.pdf ).
Kirill el
Sí, es algo específico para MT. Solo he usado MT en simulaciones de MC y mis colegas lo consideran la opción un poco más cara pero más segura. No estoy seguro si esto es cierto en general, pero es lo que he entendido.
Jonas Greitemann

Respuestas:

8

Como usted dice, el uso del Mersenne Twister para cálculos paralelos casi siempre se hace incorrectamente, ya que el método correcto es difícil de implementar.

Con mucho, la mejor y más fácil respuesta sería alejarse por completo del Mersenne Twister y usar algo como la familia PCG , que proporciona múltiples transmisiones fuera de la caja.

Se sabe que el Mersenne Twister falla varias pruebas estadísticas , a la vez que es más lento que los RNG más nuevos, como las familias PCG y XorShift +.

La razón por la que el Mersenne Twister se usa tanto hoy en día es principalmente el resultado de los RNG antes de que sea mucho peor, tanto en rendimiento como en calidad. También ayudó a que los autores originales abrieran una implementación de alto rendimiento.

LKlevin
fuente
2
Vale la pena señalar que en el documento al que se vinculó, MT solo falló dos pruebas de complejidad lineal de su flujo de bits, por lo que solo esa falla no necesariamente lo descalifica del uso, e imagino que hay muchas aplicaciones que no son sensibles a ese tipo particular de falla.
Kirill
Ciertamente. Es perfectamente adecuado para muchas aplicaciones. Para aplicaciones más antiguas, cambiar de MT sería un esfuerzo inútil. Sin embargo, para los nuevos, o aplicaciones que necesitan múltiples flujos de números aleatorios, no hay razón para usarlo.
LKlevin
1
Los generadores PCG suenan increíbles. Casi demasiado bueno para ser verdad. Tal vez sea solo una sobredosis de escepticismo científico o tal vez sea el fuerte argumento de venta del sitio web. De cualquier manera, es bastante nuevo. ¿Existen investigaciones independientes que corroboren sus afirmaciones?
Jonas Greitemann
1
Tienen un argumento de venta muy fuerte para el PCG, pero eso también es algo heredado del Mersenne Twister. Mira la página de inicio de xorshift + para ver a otro grupo haciendo lo mismo. En cuanto a terceros, supongo que cuento, ya que no tengo ninguna afiliación con el grupo PCG, y he verificado sus reclamos ampliamente (tratando de probar mi propio superior RNG). También puede ejecutar TestU01 usted mismo en el PCG, para probar los reclamos.
LKlevin
Para mi aplicación / hardware encontré xorshift+que era aproximadamente el doble de rápido que un generador PCG "equivalente", así que pruebe ambos si la velocidad es importante. El código PCG principal tiene muchas características incorporadas en comparación con el xorshift+código muy liviano .
horchler
2

Si desea usar MT, puede usar SFMT como su salto PRNG y SFMT para generar múltiples transmisiones.

110602106031060

Jukka Suomela
fuente
1

Realmente solo usted puede responder la pregunta sobre el sesgo de simulación y si es aceptable en su aplicación. El procedimiento estándar que uso:

Establezca una secuencia pseudoaleatoria como punto de referencia (Monte Carlo estándar) utilizando una gran cantidad de simulaciones (en la gestión de riesgos se utilizan a menudo 10,000, en otros campos se pueden usar 100,000 a 1M).

Ejecute su RNG sobre los mismos datos de entrada para un subconjunto de datos (usamos 1 año, pero a menudo es excesivo).

Compare los resultados usando estadísticas que describen características de los datos que realmente usa para tomar conclusiones / decisiones. Utilizamos percentiles (1,5,25,50,75,95,99), error absoluto, desviación estándar del error. Todo esto es relativo a su punto de referencia.

Ahora que tiene el análisis, puede usar su propio criterio para determinar si el sesgo de RNG es aceptable.

Mate
fuente