Как инициализировать конкретное случайное начальное число в scala breeze, скажем, для распределения по Гауссу?

Как заставить генератор случайных чисел (если возможно) использовать определенное семя в scala breeze, скажем, следующий код scala всегда генерирует одну и ту же последовательность seq?

    import breeze.stats.distributions._        
    val g = new Gaussian(0, 1)
    val seq = gau.sample(3)

Я использую scala для создания симулятора Монте-Карло и хотел бы, чтобы результаты моделирования были воспроизводимыми (путем параметризации определенного случайного семени).


person Carson Pun    schedule 19.10.2015    source источник


Ответы (1)


Создайте неявный RandBasis и направьте его туда, где вы создаете генераторы случайных чисел. Я, вероятно, должен улучшить API для этого, но что-то вроде:

implicit val randBasis: RandBasis = new RandBasis(new ThreadLocalRandomGenerator(new MersenneTwister(seed)))
person dlwh    schedule 19.10.2015
comment
(эта многопоточность может не делать то, что вы хотите. каждый поток получает одно и то же начальное число. Возможно, вы захотите использовать что-то, что генерирует начальные значения на основе некоторого базового начального числа и (стабильного) индикатора идентичности потока.) - person dlwh; 20.10.2015
comment
Спасибо, Дэйв, за подробности, особенно за часть комментария к отдельной ветке, которой я займусь дальше. - person Carson Pun; 20.10.2015
comment
Это, кажется, не помогает, если кто-то хочет контролировать любую генерацию случайных чисел, которая происходит ниже по течению внутри функций бриза черного ящика. Например, рассмотрите возможность написания модульного теста, который каждый раз воспроизводит одну и ту же последовательность шагов оптимизатора, просто устанавливая случайное начальное число, некоторые игрушечные данные и вызывая функции оптимизатора. Если тест работает на уровне вызова функций оптимизатора, как если бы они были черными ящиками, то нет возможности проникнуть через RandBasis во внутренности этих функций и любые случайные структуры, которые они могут поддерживать сами по себе. - person ely; 13.08.2018