Инициализировать генератор случайных чисел в ruby (т. Е. установить начальное значение)?

#ruby #random-seed

#ruby #случайное начальное значение

Вопрос:

Как мы можем установить начальное значение в ruby таким образом, чтобы любые функции, зависящие от RNG, возвращали одинаковые результаты (например, похожие на random.seed() в python?

Ответ №1:

Чтобы установить глобальное случайное начальное значение, вы можете использовать Kernel#srand . Это повлияет на будущие вызовы Kernel#rand , глобальной функции случайных чисел.

 srand(some_number)
rand() # Should get consistent results here
  

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

 r = Random.new(some_number)
r.rand() # Should get same result as above
  

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

Комментарии:

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

2. Это должен быть предпочтительный ответ — большой 1 за упоминание побочных эффектов srand

Ответ №2:

Используйте srand() метод

 srand(12345)

rand() 
=> 0.9296160928171479
rand()
=> 0.3163755545817859

srand(12345)

rand() 
=> 0.9296160928171479
rand()
=> 0.3163755545817859