假设我用123播种srand(123),并运行rand()X次.后来,我希望能够重新启动Julia并播种一个数字(或状态),这样当我rand()再次运行时,如果我有种子123并运行rand()X + 1次,我将获得生成的数字.有什么方法可以做到这一点,还是我真的必须运行rand()X次以获得我想要的状态?
如果在朱莉娅检索RNG种子中提供的自定义随机数生成器的解决方案对您来说不可行,我能想到的最好的是复制全局随机数生成器的整个结构:
function reset_global_rng(rng_state)
Base.Random.GLOBAL_RNG.seed = rng_state.seed
Base.Random.GLOBAL_RNG.state = rng_state.state
Base.Random.GLOBAL_RNG.vals = rng_state.vals
Base.Random.GLOBAL_RNG.idx = rng_state.idx
end
rs = deepcopy(Base.Random.GLOBAL_RNG)
println(rand(5))
# [0.301558,0.602108,0.220952,0.0338732,0.553414]
reset_global_rng(rs)
println(rand(5))
# [0.301558,0.602108,0.220952,0.0338732,0.553414]
Run Code Online (Sandbox Code Playgroud)
虽然我不是100%确定它是如何与dsfmt_gv_srand()random.jl进行交互的.