Necesito ejecutar simulaciones de MonteCarlo en paralelo en diferentes máquinas. El código está en C++, pero el programa se configura y se inicia con un script de python que establece muchas cosas, en particular, la semilla aleatoria. La función setSeed thake un 4 bytes entero sin signoMejor semilla para el proceso paralelo
Usando un simple
import time
setseed(int(time.time()))
no es muy bueno porque puedo enviar los trabajos a una cola en un clúster, que siguen pendientes de algunos minutos después de que se inicia, pero la hora de inicio es impredicible, puede ser que dos puestos de trabajo se encienden al mismo tiempo (segundos), por lo que cambiar a:
setseet(int(time.time()*100))
pero no estoy feliz. ¿Cuál es la mejor solución? Tal vez pueda combinar información de: tiempo, ID de la máquina, ID del proceso. ¿O tal vez la mejor solución es leer desde/dev/random (máquinas Linux)?
Cómo leer 4 bytes de/dev/random?
f = open("/dev/random","rb")
f.read(4)
dame una cadena, ¡quiero un número entero!
En realidad, no has dicho lo que consitutes "mejor". Supongo que está tratando de asegurarse de que cada instancia use una semilla diferente. Pero, ¿deberían ser únicos entre diferentes trabajos en una sola ejecución, o necesita algo que se aproxime (o garantice ser) globalidad global (todos los trabajos ejecutados y todos). En segundo lugar, ¿alguna vez debe ser capaz de repetir una ejecución con las mismas semillas (a veces útil en la depuración intermitente). Y puede haber otras complicaciones. – dmckee
Quiero semilla al azar para cada instancia, por lo que si la semilla es de 0 a 2^(8 * 4) -1 es muy probable que las semillas sean diferentes para cada instancia. No obligo a las semillas a ser diferentes, incluso si tal vez sería mejor si lo fueran. Creo que no es un gran problema. No necesito repetir la ejecución con la misma semilla. –
Bueno, ese es el caso fácil y ya tienes buenas respuestas. Aclamaciones. – dmckee