Возможности настройки случайных семян - PullRequest
0 голосов
/ 26 августа 2018

Я хочу создать функцию, которая будет всегда возвращать одни и те же числа, если я введу параметр, запрашивающий детерминированный ответ, и в противном случае выдаст запрошенное число псевдослучайных чисел. К сожалению, единственный способ выяснить, как это сделать, - сбросить глобальное случайное начальное число, что нежелательно.

Есть ли способ, которым я могу установить начальное число случайных чисел для одного набора псевдослучайных чисел, не затрагивая глобальное начальное число или существующую последовательность вдоль последовательности псевдослучайных чисел этого начального числа?

Пример дела

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 голосов
/ 26 августа 2018

Самое простое решение состоит в том, чтобы использовать вновь выделенный ГСЧ следующим образом:

using Random

function get_random(n::Int, deterministic::Bool)
    if deterministic
        m = MersenneTwister(1234)
        return rand(m, n)
    else
        return rand(n)
    end
end

В целом, я обычно вообще не использую глобальный ГСЧ в симуляциях, поскольку это дает мне лучший контроль над процессом.

...