在朱莉娅中取回RNG种子

Jul*_*ian 8 random julia

在朱莉亚,可以设置全球RNG的种子

srand(SEED)
Run Code Online (Sandbox Code Playgroud)

如何检索全局RNG的种子或当前状态,例如稍后再次检索?

目标是在任何给定的时间点获得RNG的状态,并在不同的会话中重新创建它,而不知道同时发生的初始种子或对RNG的所有调用.

例如,R允许访问当前种子

.Random.seed
Run Code Online (Sandbox Code Playgroud)

我希望朱莉娅能有同样的方式.

Iai*_*ing 6

Base.Random.RANDOM_SEED 是你获得种子的朋友:

julia> srand(10)

julia> Base.Random.RANDOM_SEED
1-element Array{Uint32,1}:
 0x0000000a

julia> srand(1)

julia> Base.Random.RANDOM_SEED
1-element Array{Uint32,1}:
 0x00000001

julia> srand(0xF)

julia> Base.Random.RANDOM_SEED
1-element Array{Uint32,1}:
 0x0000000f
Run Code Online (Sandbox Code Playgroud)

这没有记录,但源代码很容易阅读.我不知道如何获得RNG的当前状态,但它可能在dSFMT模块中

  • 现在可以通过`Base.Random.GLOBAL_RNG.seed`访问它,而不是`Base.Random.RANDOM_SEED`. (5认同)
  • @Chris,这些都不再适用于 Julia 1.7/1.8:`Base.Random` 现在是它自己的包,但是 `Random.GLOBAL_RNG` 没有字段 `seed` 并且未定义 `Random.RANDOM_SEED` (3认同)

ros*_*sum 0

一个明显的解决方案是在调用之前保存种子值srand(seed)

或者,如果您知道正在使用的 RNG,并且它在加密上不安全,那么您可以根据它生成的伪随机数计算值。例如,请参阅破解线性同余生成器