通过srand()修复种子会产生rand()的不同结果

时间:2017-10-25 10:24:27

标签: julia srand

在我的Julia 0.5脚本中,每次重新运行脚本时,我都使用srand(1234)从rand()获得相同的结果。但是,我得到了不同的结果。我错了什么?

2 个答案:

答案 0 :(得分:0)

正如@Dan Getz在评论中提到的,这可能是因为你有一些代码在你不知道的情况下调用随机函数。

如果使用相同的种子集调用相同的rand()函数,则会得到与预期相同的结果:

julia> for i in 1:3
           srand(1)
           println(rand())
       end
0.23603334566204692
0.23603334566204692
0.23603334566204692

但是,如果您的脚本中有另一个要调用的调用,可能会或可能不会调用,那么当您进行调查rand()调用时,您的随机数生成器将处于不同的阶段。这是一个例子来说明这一点:

julia> for i in 1:3
           srand(1)
           if i == 2
               rand()
           end
           println(rand())
       end
0.23603334566204692
0.34651701419196046
0.23603334566204692

请注意,在循环的第二次迭代中,如何进行额外的rand()调用,以抵消随机数生成器并产生不同的值。

答案 1 :(得分:0)

除了@ niczky12给出的答案之外,我建议您定义自己的发电机并使用它来获得更好的重现性,这样您就可以始终控制"您的"生成器,以及对使用全局函数的其他函数(可能不在您的控件中)的调用不会影响您获得的随机数。

例如,使用种子1234创建:host (.light-gray){ background: red !important; }

MersenneTwister

然后,您只需将此生成器传递给rng = MersenneTwister(1234) 来电:

rand