2017-04-04 16 views
5

Giả sử tôi gieo 123 bằng srand(123) và chạy rand() X lần. Sau đó, tôi muốn có thể khởi động lại Julia và hạt giống một số (hoặc tiểu bang) như vậy mà khi tôi chạy rand() một lần nữa tôi nhận được số đó có thể đã được tạo ra nếu tôi có hạt giống 123 và chạy rand() X + 1 lần. Có cách nào tôi có thể làm điều đó, hay tôi thực sự phải chạy rand() X lần để có được trạng thái tôi muốn?Có cách nào để có được trạng thái của trình tạo số ngẫu nhiên không?

+0

vâng, tôi chỉ cần thay đổi nội dung được đề cập trong nhận xét. – amrods

Trả lời

5

Nếu giải pháp với máy phát điện số tùy chỉnh ngẫu nhiên được trình bày trong Retrieve RNG seed in julia là không khả thi cho bạn là tốt nhất tôi có thể đưa ra là để sao chép toàn bộ cấu trúc của bộ tạo số ngẫu nhiên toàn cầu:

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] 

mặc dù tôi không Đảm bảo 100% cách nó không tương tác với dsfmt_gv_srand() trong random.jl.

Các vấn đề liên quan