我想创建一个函数,如果我输入一个要求确定性响应的参数,它将始终返回相同的数字,否则将给出请求的伪随机数。不幸的是,我唯一想出办法的方法是重置全局随机种子,这是不希望的。
有没有办法为一堆伪随机数设置随机数种子,而又不影响全局种子或该种子的伪随机数序列的现有进展?
using Random
function get_random(n::Int, deterministic::Bool)
if deterministic
Random.seed!(1234)
return rand(n)
else
return rand(n)
end
end
Random.seed!(4321)
# This and the next get_random(5,false) should give the same response
# if the Random.seed!(1234) were confined to the function scope.
get_random(5,false)
Random.seed!(4321)
get_random(5,true)
get_random(5,false)
答案 0 :(得分:4)
最简单的解决方案是使用新分配的RNG,如下所示:
using Random
function get_random(n::Int, deterministic::Bool)
if deterministic
m = MersenneTwister(1234)
return rand(m, n)
else
return rand(n)
end
end
通常,我通常倾向于在仿真中根本不使用全局RNG,因为它可以更好地控制流程。