Ruby 1.9.2中的分布式顺序随机数生成

Tre*_*ham 5 ruby random mersenne-twister ruby-1.9

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

r = Random.new(23)
r.rand(100)         # 83
r.rand(100)         # 40
Run Code Online (Sandbox Code Playgroud)

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

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

ste*_*lag 2

无法测试,但可以根据 Marc-Andr\xc3\xa9 Lafortune此处对生成器进行编组。\n所以这可能有效:

\n\n
r = Random.new(23)\nr.rand(100)         # 83\nr.rand(100)         # 40\n\nFile.open("/path/to/file","w") do |f|\n  Marshal.dump(r,f)\nend\n\n# later, may be on another computer\n\nFile.open("/path/to/file","r") do |f|\n  @v = Marshal.load(f)\nend\n\nputs @v.rand(100)\n
Run Code Online (Sandbox Code Playgroud)\n