Факты о случайных последовательностях RNG
Случайная последовательность — это не «хаос», а поток значений с проверяемыми свойствами. В игровых системах от качества этого потока зависит честность спинов, раздач, мультипликаторов. Ниже — ключевые факты о том, какой должна быть последовательность RNG и как её проверяют.
1) Независимость важнее «красивости»
i.i.d. (независимые и одинаково распределённые) — золотой стандарт.
Отсутствие видимых паттернов не гарантирует случайность; важны тесты на корреляции и серийность, а не «на глаз».
2) Распределение задано протоколом
У «сырого» потока часто предполагается равномерность (например, 32-битные слова равновероятны).
В игре равномерные числа мапятся в события: символы слота, карты из «виртуальной колоды», сектора колеса. Корректный мэппинг = отсутствие «мёртвых зон» и перекосов.
3) Период есть всегда — вопрос в его длине
У PRNG конечный период (цикличность). Хороший генератор имеет период настолько длинный, что в реальной эксплуатации вы его не «обойдёте».
Критично избегать совпадений «состояния» (state/nonce reuse), иначе повторятся подпоследовательности.
4) Сид (seed) — корень непредсказуемости
Неправильная инициализация сидом даёт повторяемые или предсказуемые выходы.
Надёжная система использует многоканальную энтропию и периодический reseeding (документированный).
5) Энтропия — не то же самое, что «шум»
Битовая энтропия измеряет, насколько непредсказуем поток.
Аппаратная энтропия (шум) обычно переваривается криптографическим DRBG (CSPRNG), чтобы получить быстрый и стойкий поток.
6) p-values не должны быть «красивыми»
В батареях тестов (частот, серий, «дней рождения», рангов матриц и т. п.) p-values должны распределяться равномерно по [0;1], а не «собираться около 0.5».
Один «красный» тест не доказывает проблему: учитывают множественность проверок и повторяют прогон.
7) Локальная «полоса» — не баг
В любой истинно случайной последовательности возникают кластеры (длинные серии нулей/единиц, повторов символов).
Полосы — нормальны; системный риск — устойчивые перекосы за большие окна.
8) Линейность — скрытый враг
Простые линейные генераторы вида LCG могут проходить базовые тесты, но «сыпятся» на сложных (ранг матрицы, линейная сложность, DFT).
В игровой индустрии стандарт — криптостойкие DRBG (напр., на блочных шифрах/хэшах).
9) Мэппинг должен быть стационарным и версионированным
Любое изменение таблиц соответствия «число → событие» = новая версия игры и повторная проверка.
Хорошая практика — жёсткая фиксация мэппинга с хеш-суммами и цифровыми подписями.
10) «Почти-выигрыш» — про интерфейс, а не про поток
Near-miss — часть визуальной драматургии; доля и поведение задаются математикой игры.
RNG выдаёт число, а интерфейс рассказывает историю — эти слои должны быть разведены.
11) Воспроизводимость ≠ предсказуемость
Для аудита каждый раунд логируется так, чтобы можно было воспроизвести исход (ID раунда, сид/nonce, хеши).
Это не делает поток предсказуемым в момент игры: секреты (сид) и состояния защищены.
12) «Хорошие» последовательности живут на проде под наблюдением
После релиза важен мониторинг: сходится ли RTP к сертифицированному, нет ли дрейфа частот символов, повторов, «горячих» номеров.
Алёрты по порогам → изоляция тайтла и техрасследование.
13) Состояние и потоки — раздельно
Разные игры/столы/инстансы используют независимые состояния RNG.
Нельзя «делить» один поток на несколько продуктов — появляются перекрёстные корреляции.
14) Forward/Backward-security важнее, чем кажется
При компрометации текущего состояния хороший CSPRNG не должен раскрывать прошлое (backtracking resistance) и будущее (forward security) последовательности.
Это достигается криптопримитивами и регулярным reseeding.
15) «Provably fair» доказывает неподлежащее подмене
Коммит-ревил (хеш серверного сида → раскрытие) + клиентский сид дают игроку возможность пересчитать исход.
Это гарантирует целостность последовательности, но не заменяет аудит математики игры и мэппинга.
Как выглядит плохая последовательность (приметы)
Повтор сидов/nonce → дубликаты результатов при одинаковых входах.
Стабильный перекос частот в больших окнах (не единичный кластер).
Выявляемые периоды в DFT, «провалы» в TestU01/BigCrush.
Дрейф эмпирического RTP от заявленного за разумные объёмы.
Как выглядит хорошая последовательность
Ровные частоты и серийность в пределах доверительных интервалов; равномерные p-values.
Отсутствие корреляций между соседними и отстоящими элементами.
Сходимость эмпирического RTP/частот событий к модели.
Нулевая разница между продуктивным бинарём и сертифицированным (контроль хешей).
Мини-шпаргалки
Для студий/провайдеров
Используйте CSPRNG + документированный reseeding из многоканальной энтропии.
Разделяйте состояния по потокам/играм; ведите журнал nonce.
Гоняйте NIST/Dieharder/TestU01, плюс массимуляции мэппинга до схода RTP.
Фиксируйте мэппинг и бинарии под цифровой подпись; запретите неподписанные релизы.
Настройте алёрты на дрейф метрик в проде; план изоляции и роллбэка.
Для операторов
Сверяйте версии и хеши игр с сертифицированными.
Мониторьте RTP/частоты/повторы; держите пороги и авто-алёрты.
Храните неизменяемые логи раундов с возможностью быстрого экспорта по тикету.
Для игроков
Проверяйте инфо-экран: RTP, правила, версия, max win.
Не путайте кластеры с «подкруткой»: полосы — нормальны.
В споре просите ID раунда и выписку — исход должен воспроизводиться.
Случайная последовательность RNG — это инженерный артефакт с проверяемыми свойствами: независимость, корректное распределение, длинный период, грамотный сидинг и устойчивость к компрометации. В играх честность возникает там, где качественный поток соединён с правильным мэппингом и процедурами контроля: сертификация до релиза, логи и мониторинг после. Когда все три слоя на месте, «случайность» превращается из обещания в надёжную практику.