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.]

¿Fue útil?

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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top