Псевдовипадкове число: методи отримання, достоїнства і недоліки

Історія

Першим PRNG, який уникнув серйозних проблем і все ще працював досить швидко, був Mersenne Twister (обговорюваний нижче), інформацію про який опублікували в 1998 році. З тих пір були розроблені інші високоякісні PRNG.

Але історія псевдовипадкових чисел цим не вичерпується. У другій половині 20-го століття стандартний клас алгоритмів, використовуваних для PRNG, включав лінійні конгруентні генератори. Було відомо, що якість LCG неадекватно, але кращі методи були недоступні. Press et al (2007) описав результат наступним чином: «Якщо б всі наукові статті, результати яких викликають сумніви з-за [LCG і пов’язаних з ними] зникли з бібліотечних полиць, на кожній полиці був би проміжок розміром з кулак».

Основним досягненням у створенні генераторів псевдовипадкових стало впровадження методів, заснованих на лінійних рекурентних в двухэлементном полі; такі генератори пов’язані з лінійними регістрами зсуву зі зворотнім зв’язком. Вони послужили основою для винаходу датчиків псевдовипадкових чисел.

Зокрема, винахід 1997 року Мерсена Твістера дозволило уникнути багатьох проблем з більш ранніми генераторами. Mersenne Twister має період 219937-1 ітерацій (≈4,3 × 106001). Доведено, що він рівномірно розподілений в (до) 623 вимірах (для 32-бітних значень), і на момент його впровадження працював швидше, ніж інші статистично обґрунтовані генератори, що створюють псевдовипадкові послідовності чисел.

У 2003 році Джордж Марсаглия представив сімейство генераторів ксоршифтов, заснованих також на лінійному повторенні. Такі генератори надзвичайно швидкі і — в поєднанні з нелінійної операцією — вони проходять суворі статистичні тести.

У 2006 році було розроблено сімейство генераторів WELL. Генератори WELL в деякому сенсі покращують якість Twister Mersenne, який має занадто великий простір станів і дуже повільне відновлення з них, генерують псевдовипадкові числа c великою кількістю нулів.