随机种子设置的范围

时间:2018-08-25 21:21:23

标签: julia

我想创建一个函数,如果我输入一个要求确定性响应的参数,它将始终返回相同的数字,否则将给出请求的伪随机数。不幸的是,我唯一想出办法的方法是重置全局随机种子,这是不希望的。

有没有办法为一堆伪随机数设置随机数种子,而又不影响全局种子或该种子的伪随机数序列的现有进展?

案例

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)

1 个答案:

答案 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,因为它可以更好地控制流程。