質問

Random Ruby 1.9.2のクラスは、特定の種子と範囲を考慮して、同じ順序で乱数を生成することが保証されています。例えば:

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

ただし、別のコンピューターのシーケンスで次の数値を生成したいとします(シーケンスの以前の数値を再生成せずに)。これは、以前の出力を考慮して、可能である必要があります。でこれを行う方法はありますか Random クラス?または、自分の実装を書く必要がありますか Mersenne Twister?

[編集: 以下のコメントで指摘されているように、の状態を決定することは実際には不可能です Random 状態の一部(具体的には32ビットが低い)の一部のみが出力に使用されるため、出力からのみインスタンスがあります。

役に立ちましたか?

解決

Marc-AndréLafortuneによると、テストすることはできませんが、ジェネレーターをマーシャル化することができます ここ。だからこれはうまくいくかもしれない:

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)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top