Як я можу визначити період мого генератора псевдовипадкових чисел?


14

Припустимо, я використовую лінійний конгрурентний генератор псевдовипадкових чисел (PRNG). З огляду на насіння , множуючий коефіцієнт (a), коефіцієнт зсуву (c) та коефіцієнт модуля (m), як я можу визначити період мого PRNG? Чи визначаю це за допомогою експериментальних / алгоритмів виявлення шаблонів, чи існує пряма формула для обчислення періоду? x0

Хоча моє питання стосується конкретно лінійного конгруентного методу, я відкритий для того, щоб дізнатися більше про те, як обчислюються періоди на практиці для інших PRNG.



BTW, якщо ви використовуєте LFSR, то період є максимальним, якщо поліном зворотного зв’язку є примітивним . У такому випадку період AFAIK (не цитуйте мене; занадто лінивий, щоб викопати мої курсові конспекти) - це де поліном зворотного зв'язку p ( x ) F q [ x ] ступеня n , а q - розмір поле коефіцієнтів. qnp(x)Fq[x]nq

2
Алгоритми виявлення циклу Флойда, а також алгоритми виявлення циклу Брента - це ефективні способи виявлення циклів. Обидва повернуть кілька кратних L періоду, і як тільки ви отримаєте це, ви можете розподілити L і побачити, який найменший коефіцієнт є періодом.
xdavidliu

Відповіді:


12

Якщо ви обмежуєтесь повноцінним LCG PRNG , тоді відповідь проста, за визначенням це просто m .

Щоб знайти період не повного циклу LCG PRNG для даного насіння, просто потрібно порахувати кількість ітерацій PRNG, поки він ще раз не генерує значення насіння.

З посилань на сторінку вікіпедії :

Довжина періоду

mc

  • cm
  • a1m
  • a1m

cma

Історично поганий вибір призвів до неефективного впровадження ЛГЗ. Особливо показовим прикладом цього є RANDU, який широко використовувався на початку 1970-х років і привів до багатьох результатів, які ставляться під сумнів через використання цього поганого ЖКГ.

Чому ви хочете використовувати генератор повного циклу

Якщо ви не обмежуєтесь повноцінним циклом PRNG, тоді ви ризикуєте .

Якщо ви не знаєте, що даний LCG є повним циклом, то ви можете створити генератор з довільною кількістю взаємно розрізнених послідовностей, деякі з яких можуть бути бентежно невеликими і мати жахливі випадковість, можливо навіть гірші, ніж сумнозвісний генератор RANDU .

Ви дійсно не хочете перевіряти всі можливі значення насіння, щоб переконатися, що воно генерує послідовність, достатньо довгу для вашої програми.

Подальше читання

Для чудового букваря на генераторах псевдовипадкових чисел я настійно рекомендую ознайомитись з розділом « Числові рецепти» про випадкові числа.


Це правда, але я не обмежую себе повним періодом LCG PRNG ... Мені цікаво поганий вибір a, c і m, таким, що випадкові потоки, які не досягають повного періоду. Я хотів би мати можливість знати достроково, враховуючи деякі a, c і m, яким буде неминуче період. Я знаю, що вона є верхньою межею m, але мені було цікаво, чи можемо ми зробити краще, ніж це, і отримати точний період.
Павло

Я не думаю, що це взагалі розщеплення волосків за технічністю: питання полягало у тому, як "визначити період LCG за допомогою довільних параметрів", в той час як у цій відповіді сказано: "не використовуйте довільні LCG, завжди використовуйте LCG з повним періодом" і якщо ви це зробите , відповідь на ваше питання буде максимально можливим періодом, за визначенням ". Аргумент щодо використання ПЗФ на повний період, викладений у цій відповіді, є абсолютно переконливим, але питання полягає не в тому, що було задано питання.
xdavidliu

Вибачте @xdavidliu, але я не бачу, як ваш новий коментар допомагає мені покращити свою відповідь. Ви довели мені до відома, що я насправді не відповідав на запитання, я відредагував свою відповідь, щоб виправити це, а потім повідомив вам так, як я думав, що може змусити вас посміхнутися (якщо ви фанат Футурами). Я не бачу, щоб нічого більше говорити.
Марк Бут

Зауважте, що при обміні стеками коментарі не призначені для розширених обговорень, для цього використовуйте Computational Science Chat . Коментарі допомагають покращити питання та відповіді та відволікають увагу, тому ми намагаємося звести їх до мінімуму. Коментарі слід вважати ефемерними, будь-який коментар, який більше не допомагає покращити запитання чи відповідь, може бути видалений у будь-який час, щоб привести в порядок публікацію.
Марк Бут
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.