WikiDer > Комбинированный линейный конгруэнтный генератор
А комбинированный линейный конгруэнтный генератор (CLCG) это псевдослучайный генератор чисел алгоритм на основе объединения двух и более линейные конгруэнтные генераторы (LCG). Традиционный LCG имеет период что неадекватно для моделирования сложных систем.[1] Комбинируя две или более LCG, можно создавать случайные числа с более длительным периодом и лучшими статистическими свойствами.[1]Алгоритм определяется как:[2]
куда:
- это "модуль»первого LCG
- это яth вклад от jth LCG
- это яth сгенерированное случайное целое число
с:
куда это равномерно распределены случайное число от 0 до 1.
Вывод
Если Wя,1, Wя,2, ..., Wя, k - любые независимые дискретные случайные величины, одна из которых равномерно распределена от 0 до м1 - 2, то Zя равномерно распределяется между 0 и м1 - 2, где:[2]
Позволять Икся,1, Икся,2, ..., Икся,k быть выходом из k LCG. Если Wя,j определяется как Икся,j - 1, то Wя,j будут примерно равномерно распределены от 0 до мj − 1.[2] Коэффициент "(−1)j−1"неявно выполняет вычитание единицы из Икся,j.[1]
Характеристики
CLCG предоставляет эффективный способ вычисления псевдослучайных чисел. Алгоритм LCG является недорогим в вычислительном отношении.[3] Результаты нескольких алгоритмов LCG объединяются с помощью алгоритма CLCG для создания псевдослучайных чисел с более длинным период чем достигается с помощью самого метода LCG.[3]
Период CLCG - это наименьший общий множитель периодов отдельных генераторов, которые на единицу меньше модулей. Поскольку все модули являются нечетными простыми числами, периоды четные и, таким образом, имеют по крайней мере общий делитель 2, но если модули выбраны так, что 2 является наибольший общий делитель каждой пары это приведет к периоду:[1]
Пример
Ниже приведен пример алгоритма, предназначенного для использования на 32-разрядных компьютерах:[2]
LCG используются со следующими свойствами:
Алгоритм CLCG настроен следующим образом:
1. Посев для первого LCG, , следует выбирать в диапазоне [1, 2147483562].
- Семя для второй LCG, , следует выбирать в диапазоне [1, 2147483398].
- Набор:
2. Две LCG оцениваются следующим образом:
3. Уравнение CLCG решается, как показано ниже:
4. Вычислите случайное число:
5. Увеличьте счетчик (я = я + 1), затем вернитесь к шагу 2 и повторите.
Максимальный период двух используемых LCG рассчитывается по формуле:[1]
Это равно 2,1 × 109 для двух используемых LCG.
Этот CLCG, показанный в этом примере, имеет максимальный период:
Это представляет собой огромное улучшение по сравнению с периодом отдельных LCG. Видно, что комбинированный метод увеличивает период на 9 порядков.
Удивительно, но периода этого CLCG может хватить для всех приложений.[1] Другие алгоритмы, использующие метод CLCG, использовались для создания генераторов псевдослучайных чисел с периодами до 3 × 1057.[4][5][6]
Смотрите также
- Линейный конгруэнтный генератор
- Wichmann – Hill, особый комбинированный LCG, предложенный в 1982 г.
Рекомендации
- ^ а б c d е ж Бэнкс, Джерри; Карсон, Джон С .; Нельсон, Барри Л .; Николь, Дэвид М. (2010). Моделирование дискретных систем (5-е изд.). Прентис Холл. § 7.3.2. ISBN 0-13-606212-1.
- ^ а б c d L'Ecuyer, Пьер (1988). «Эффективные и портативные комбинированные генераторы случайных чисел» (PDF). Коммуникации ACM. 31 (6): 742–749, 774. CiteSeerX 10.1.1.72.88. Дои:10.1145/62959.62969.
- ^ а б Панди, Нирадж (6 августа 2008 г.). Реализация функции скачка для линейных конгруэнтных и запаздывающих генераторов Фибоначчи (PDF) (Магистерская диссертация). Государственный университет Флориды. § 2.2. Архивировано из оригинал (PDF) 12 июля 2011 г.. Получено 13 апреля 2012.
- ^ Л'Экуайер, Пьер (сентябрь – октябрь 1996 г.). «Комбинированные множественные рекурсивные генераторы чисел». Исследование операций. 44 (5): 816–822. Дои:10.1287 / opre.44.5.816.
- ^ L'Ecuyer, Пьер (январь – февраль 1999 г.). «Хорошие параметры и реализации для комбинированных множественных рекурсивных генераторов случайных чисел». Исследование операций. 47 (1): 159–164. CiteSeerX 10.1.1.48.1341. Дои:10.1287 / opre.47.1.159.
- ^ Л'Экуайер, Пьер; Р. Симард; E.J. Чен; У. Д. Келтон (ноябрь – декабрь 2002 г.). «Объектно-ориентированный пакет Randon-Number с множеством длинных потоков и подпотоков» (PDF). Исследование операций. 50 (6): 1073–1075. CiteSeerX 10.1.1.25.22. Дои:10.1287 / opre.50.6.1073.358.