Distribuido generación de números aleatorios secuenciales en Ruby 1.9.2
-
01-10-2019 - |
Pregunta
La clase Random
en Ruby 1.9.2 está garantizada para generar números aleatorios en el mismo orden, dado una semilla y rango particular. Por ejemplo:
r = Random.new(23)
r.rand(100) # 83
r.rand(100) # 40
Pero supongamos que quiero generar el siguiente número en la secuencia en otro equipo (sin volver a generar los números anteriores en la secuencia). Esto debería ser posible, dada la salida anterior. ¿Hay una manera de hacer esto con la clase Random
? O tengo que escribir mi propia aplicación de la Mersenne Twister ?
[ Editar: Como se señaló en los comentarios a continuación, no es de hecho posible determinar el estado de una instancia Random
sólo de la salida, porque sólo parte del estado (específicamente, la bajo 32 bits) se utilizan para la salida.]
Solución
no puede prueba, pero el generador puede ser marshalled, según Marc-André Lafortune aquí . Por lo que este trabajo puede:
r = Random.new(23)
r.rand(100) # 83
r.rand(100) # 40
File.open("/path/to/file","w") do |f|
Marshal.dump(r,f)
end
# later, may be on another computer
File.open("/path/to/file","r") do |f|
@v = Marshal.load(f)
end
puts @v.rand(100)