在朱莉婭,全球RNG種子可以用檢索朱莉婭RNG種子
srand(SEED)
設置如何取回種子或全局RNG的當前狀態,例如在稍後的時間呢?
目標是在任何給定的時間點獲得RNG的狀態,並在不同的會話中重新創建它,而無需知道初始種子或同時發生的所有RNG呼叫。
例如,R允許通過
.Random.seed
我希望的等效方式將在朱存在訪問當前種子。
在朱莉婭,全球RNG種子可以用檢索朱莉婭RNG種子
srand(SEED)
設置如何取回種子或全局RNG的當前狀態,例如在稍後的時間呢?
目標是在任何給定的時間點獲得RNG的狀態,並在不同的會話中重新創建它,而無需知道初始種子或同時發生的所有RNG呼叫。
例如,R允許通過
.Random.seed
我希望的等效方式將在朱存在訪問當前種子。
一個明顯的解決方案是在致電srand(seed)
之前保存種子值。另外,如果您知道正在使用的RNG,並且它不是加密安全的,那麼您可以從它生成的僞隨機數中計算出值。例如,看到Cracking a linear congruential generator
Julia中的隨機數生成使用Mersenne Twister庫。 – jurgemaister 2014-10-17 12:15:42
然後請參閱[扭轉梅森扭轉者RNG脾氣功能](http://b10l.com/reversing-the-mersenne-twister-rng-temper-function/)等。 – rossum 2014-10-17 12:19:06
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
這是沒有記錄,但the source是很容易閱讀。我不確定如何獲得RNG的當前狀態,但它可能位於dSFMT
模塊
現在可以通過'Base.Random.GLOBAL_RNG.seed'訪問,而不是'Base.Random.RANDOM_SEED'。 – Chris 2016-07-24 21:29:11
使用帶有顯式變量的專用MersenneTwister(而不是默認隨機值函數提供的隱藏全局函數) ,你需要的功能,可以提供:
newmt = Base.Random.MersenneTwister(123)
randvec = [rand(newmt) for i=1:100]
# save state now
savestate = deepcopy(newmt.state)
randvec2 = [rand(newmt) for i=1:20]
# rewind state to old state
newmt.state = savestate
randvec3 = [rand(newmt) for i=1:20]
if randvec2==randvec3
println("works!")
end
的deepcopy
扔我的第二個存在。此外,在功能和一般使用隨機生成器時,它會更容易訪問全局隨機生成狀態,但它可能需要ccall
荷蘭國際集團libdSFMT庫(見Base
random.jl
和dSFMT.jl
。
爲了更好地控制,
RND = srand(0)
function coolfun()
println(RND.idx)
output = srand(RND, 100)
...
end
你應該得到的種子像這樣
reinterpret(Int32, Base.Random.GLOBAL_RNG.seed)
測試:
julia> srand(123456789);
julia> reinterpret(Int32, Base.Random.GLOBAL_RNG.seed)
1-element Array{Int32,1}:
123456789
爲了保存恢復完整的狀態,你可以做簡單的事情,只存儲整個Base.Random.GLOBAL_RNG
對象。一個簡單的方法將使用JLD包。
在我的私人包中,我手動保存/讀取rng狀態到HDF5,請參閱here。
編輯:這當然@ IainDunning的回答更明確的版本
[閱讀出色的手冊(http://docs.julialang.org/en/release-0.3/stdlib/base/#random-號)。 – jurgemaister 2014-10-17 11:58:12
@jurgemaister這部分涉及設置種子。我找不到任何關於如何恢復的提示。 – Julian 2014-10-17 12:02:07
@jurgemaister:你似乎並不瞭解設置種子和後來發現種子的設置之間的區別。 – DSM 2014-10-17 12:06:10