Estoy usando la implementación boost mt19937 para una simulación.Boost Mersenne Twister: ¿cómo sembrar con más de un valor?
La simulación debe ser reproducible, y eso significa almacenar y potencialmente reutilizar las semillas RNG más adelante. Estoy usando windows crypto api para generar los valores de inicialización porque necesito una fuente externa para las semillas y no debido a ninguna garantía particular de aleatoriedad. La salida de cualquier ejecución de simulación tendrá una nota que incluya la semilla RNG, por lo que la semilla debe ser razonablemente corta. Por otro lado, como parte del análisis de la simulación, compararé varias ejecuciones, pero para estar seguro de que estas ejecuciones son realmente diferentes, tendré que usar semillas diferentes, por lo que la semilla debe ser larga. suficiente para evitar colisiones accidentales.
He determinado que 64 bits de siembra deberían ser suficientes; la probabilidad de una colisión alcanzará el 50% después de aproximadamente 2^32 carreras, esa probabilidad es lo suficientemente baja como para que el error promedio causado por ella sea insignificante para mí. Usar solo 32 bits de semilla es complicado; la probabilidad de una colisión alcanza el 50% después de 2^16 carreras; y eso es demasiado probable para mi gusto.
Desafortunadamente, la implementación de refuerzo genera un vector de estado completo, que es demasiado, muy largo o solo un bit largo de 32 bits, lo que no es ideal.
¿Cómo puedo sembrar el generador con más de 32 bits pero menos que un vector de estado completo? Intenté simplemente rellenar el vector o repetir las semillas para llenar el vector de estado, pero incluso una mirada superficial a los resultados muestra que eso genera resultados pobres.
Acaba de obtener el estado actual y modificarlo ... – kennytm
Su cálculo de colisión no es del todo correcto. Por ejemplo, para una semilla de 64 bits, la probabilidad de un duplicado es> = 0.5 después de 77163! = 65536 ejecuciones. – user168715
Las matemáticas de colisión son solo una aproximación fácil. Supongo que te refieres a una semilla de 32 bits, por cierto, ¿no una semilla de 64 bits? –