Frage

Die Random Klasse in Ruby 1.9.2 ist garantiert Zufallszahl in der gleichen Reihenfolge zu erzeugen, eine bestimmte Samen und Bereich gegeben. Zum Beispiel:

r = Random.new(23)
r.rand(100)         # 83
r.rand(100)         # 40

Aber wenn ich die nächste Zahl in der Folge auf einem anderen Computer erstellt werden soll (ohne die früheren Zahlen in der Folge neu zu erzeugen). Dies sollte möglich sein, die vorherige Ausgabe gegeben. Gibt es eine Möglichkeit, dies mit der Random Klasse zu tun? Oder muss ich meine eigene Implementierung der Mersenne-Twister ?

[ Edit: Wie unten in den Kommentaren darauf hingewiesen, ist es in der Tat nicht möglich, den Zustand einer Random Instanz zu bestimmen, nur von dem Ausgang, da nur einen Teil des Staates (insbesondere die niedrige 32 Bits) für die Ausgabe verwendet.]

War es hilfreich?

Lösung

Kann nicht testen, aber der Generator rangieren kann, nach Marc-André Lafortune hier . So Dies könnte funktionieren:

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top