2014-02-06 1 views
1

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

Примечание: Я знаю, что System.Random не является высококачественным RNG и что я должен использовать что-то еще для серьезного моделирования. Этот вопрос строго связан с System.Random и его реализацией.

ответ

3

Я сомневаюсь, что существует общее правило, в котором семена будут давать более короткий период, чем другие. Большие числа не гарантируют более длительный период, а числа, подобные 0, не обязательно будут иметь короткий период.

От MSDN Documentation:

Текущая реализация случайного класса на основе алгоритма генератора случайных чисел Дональда Кнута вычитательном. Для получения дополнительной информации см. D. E. Knuth. «Искусство программирования, том 2: Семинумерные алгоритмы». Addison-Wesley, Reading, MA, второе издание, 1981.

Существует также Microsoft Connect thread об ошибке в реализации алгоритма. По-видимому, в коде .NET есть опечатка. Один из разработчиков программного обеспечения .NET прокомментировал:

Действительно, [есть] настоящая проблема с реализацией Random.

Мы обсудили это в команде и с некоторыми нашими партнерами и пришли к выводу, что, к сожалению, мы не можем решить проблему прямо сейчас. Причина в том, что некоторые приложения полагаются на то, что при инициализации с одним и тем же семенем генератор создает одну и ту же псевдослучайную последовательность. Даже если изменение к лучшему, оно сломает приложения, которые сделали это предположение, как только они перешли к «фиксированной» версии.

1

Пар точек -

  1. Я не думаю, что периодичность хорошо известная PRNGs зависит от семян. Я уверен, что этот вопрос был бы рассмотрен в ходе реализации

  2. Однако бедный высева может привести к длинной последовательности, казалось бы, не случайные значения, см Disadvantages of Mersenne Twister

  3. выше пункт важен, так как реализация .NET может изменить в будущем

+0

Интересный вопрос № 2 – x0n

Смежные вопросы