5

Ruby 1.9.2 中的Random类保证以相同的顺序生成随机数,给定特定的种子和范围。例如:

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

但是假设我想在另一台计算机上生成序列中的下一个数字(而不重新生成序列中的早期数字)。鉴于先前的输出,这应该是可能的。有没有办法在Random课堂上做到这一点?还是我必须编写自己的Mersenne twister实现?

[编辑:正如下面评论中所指出的,实际上不可能Random仅从输出中确定实例的状态,因为只有部分状态(特别是低 32 位)用于输出。]

4

1 回答 1

2

根据 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)
于 2010-08-27T19:23:54.820 回答