as per the following, how could I make sure the random seed remains unchanged before and after calling the function?
function f()
rng0 = Random.default_rng() # save the current seed
### section for deterministic randomized algorithm
Random.seed!(123)
xxxxxx
xxxxxxx
###
# ??? how could I restore the seed to rng0 ???
end
thanks.
Random.seed!(rng0.seed)
is one option.
Perhaps cleaner would be to leave the global random number generator alone:
function f()
rng = MersenneTwister(123);
x = rand(rng)
[...]
end
3 Likes
Also, if you want determinism in your rand
s to hold across Julia versions, you probably want to use something like StableRNGs.jl
further suggesting that @hendri54’s suggestion is best here.
3 Likes
The .seed
field of the global RNG will soon not exist anymore (in Julia 1.7). An alternative would be to copy the state:
julia> rand()
0.09028876420540066
julia> state = copy(Random.default_rng())
MersenneTwister(0xacbf17e36353b3a3a75764abc1e03e06, (0, 1002, 0, 2))
julia> rand()
0.5688115492566419
julia> copy!(Random.default_rng(), state)
MersenneTwister(0xacbf17e36353b3a3a75764abc1e03e06, (0, 1002, 0, 2))
julia> rand()
0.5688115492566419
This should also be quite faster than re-seeding.
4 Likes