Mersenne Twister считается хорошим. Черт, источник CPython говорит, что он «является одним из наиболее тщательно протестированных генераторов из существующих». Но что это значит? Когда меня просят перечислить свойства этого генератора, большинство из того, что я могу предложить, плохо:
- Он массивный и негибкий (например, без поиска или нескольких потоков),
- Он не проходит стандартные статистические тесты, несмотря на его огромный размер состояния,
- У него есть серьезные проблемы около 0, предполагая, что он рандомизирует себя довольно плохо,
- Это вряд ли быстро
и так далее. По сравнению с простыми ГСЧ, такими как XorShift *, это также безнадежно сложно.
Поэтому я искал некоторую информацию о том, почему это когда-либо считалось хорошим. Оригинальная статья содержит множество комментариев о «суперастрономическом» периоде и 623-мерном равнораспределении, говоря
Среди многих известных мер тесты, основанные на более высокой размерной однородности, такие как спектральный тест (см. Knuth [1981]) и тест k-распределения, описанные ниже, считаются наиболее сильными.
Но для этого свойства генератор разбит счетчиком достаточной длины! Это не комментирует локальные дистрибутивы, а это то, что вам действительно нужно в генераторе (хотя «локальный» может означать разные вещи). И даже CSPRNG не заботятся о таких больших периодах, поскольку это просто не важно.
В газете много математики, но, насколько я могу судить, из этого мало что касается качества случайности. Практически каждое упоминание об этом быстро возвращается к этим оригинальным, в основном бесполезным заявлениям.
Кажется, что люди запрыгнули на этот подножку за счет более старых, более надежных технологий. Например, если вы просто увеличиваете количество слов в LCG до 3 (намного меньше, чем «только 624» в Mersenne Twister) и выводите верхнее слово при каждом проходе, он проходит BigCrush ( более сложная часть набора тестов TestU01). ), несмотря на то, что Твистер не справился с этим ( бумага PCG, рис. 2 ). Учитывая это, а слабые доказательства того, мне удалось найти в поддержку Вихрь Мерсенна, то , что было причиной внимания в пользу его на другие варианты?
Это не чисто историческое. Мне попутно сказали, что Mersenne Twister, по крайней мере, более проверен на практике, чем, скажем, PCG random . Но так ли различают сценарии использования, что они могут работать лучше, чем наши тесты? Некоторые из Google предполагают, что это не так.
Короче говоря, мне интересно, как Mersenne Twister получил широкую положительную репутацию, как в историческом контексте, так и в других отношениях. С одной стороны, я, очевидно, скептически отношусь к его качествам, но с другой стороны трудно представить, что это произошло совершенно случайно.