Алгоритмы генерации псевдослучайных чисел

12

Какие алгоритмы используются в современных и качественных генераторах случайных чисел?

Мехпер С. Палавузлар
источник
1
Перепутал «random-variate» на «random-variable» для согласованности с похожими вопросами.
whuber

Ответы:

10

В R настройкой по умолчанию для генерации случайных чисел являются:

  1. Для U (0,1) используйте алгоритм Мерсенна-Твистера
  2. Для чисел Гуаси используется числовая инверсия стандартной функции нормального распределения.

Вы можете легко проверить это, а именно.

> RNGkind()
[1] "Mersenne-Twister" "Inversion"

Можно изменить генератор по умолчанию на другие PRNG, такие как Super-Duper, Wichmann-Hill, Marsaglia-Multicarry или даже предоставленный пользователем PRNG. Смотрите? RNGkind для более подробной информации. Мне никогда не нужно было менять PRNG по умолчанию.

Библиотека C GSL также использует Mersenne-Twister по умолчанию.

csgillespie
источник
Вы уверены в своей второй точке, генерируя нормальные случайные величины путем инвертирования CDF? Инверсия нормального CDF является довольно дорогой функцией для оценки. Я полагаю, что метод Бокса-Мюллера будет быстрее. Еще быстрее был бы метод зиккурата Марсальи для генерации нормалей.
Джон Д. Кук
Я также нахожу это подозрительным. Ziggurat от Marsaglia используется по умолчанию в Matlab, и я не могу представить, что Matlab лучше, чем R в области генерации случайных чисел.
Шаббычеф
@John Действительно, полярный метод доступен в R, см. Пакет setRNG.
хл
3

Xorshift PNG, разработанный Джорджем Марсалья. Его период (2 ^ 128-1) намного короче, чем у Мерсенна-Твистера, но алгоритм очень прост в реализации и пригоден для распараллеливания. Хорошо работает на многоядерных архитектурах, таких как чипы DSP и Tesla от Nvidia.

brotchie
источник
Будет ли это хорошо для реализации на графических процессорах? Ссылка на детали, ссылки?
ДаренВ
2
Thomas, Howes, Luk - 2009 - Сравнение процессоров, графических процессоров, FPGA и массивов параллельных процессоров для генерации случайных чисел. doi.acm.org/10.1145/1508128.1508139 . Обсуждение + тестирование набора PNG, выполняемых на процессорах, графических процессорах, FPGA и массивах массивно параллельных процессоров.
Brotchie
Возможно также L'Ecuyer в RNG с несколькими потоками ( j.mp/bzJSlm )?
ЧЛ
3

На http://prng.di.unimi.it/ вы можете найти серию из нескольких генераторов случайных чисел, протестированных с использованием TestU01, современного набора тестов для генераторов псевдослучайных чисел, которые заменили несгибаемый и несгибаемый. Вы можете выбрать и выбрать.

Seba
источник