2017-04-04 101 views
5

假設我用srand(123)種子123,並且運行rand() X次。後來,我希望能夠重新啓動Julia並播種一個數字(或狀態),這樣當我再次運行rand()時,如果我擁有種子123並運行rand() X + 1次,那麼我將獲得該數字。有沒有什麼辦法可以做到這一點,還是我真的需要運行rand() X來獲得我想要的狀態?有沒有辦法獲得隨機數發生器的狀態?

+0

是的,我只需要改變評論中提到的東西。 – amrods

回答

5

如果在Retrieve RNG seed in julia呈現的自定義隨機數生成器的解決方案是不適合你可行的,我可以拿出最好的是複製的全局隨機數生成器的整體結構:雖然我不是

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] 

100%確定它不會與random.jl中的dsfmt_gv_srand()進行交互。

相關問題