Батарея статистических тестов
Тесты diehard представляют собой набор статистических тестов для измерения качества генератора случайных чисел . Они были разработаны Джорджем Марсальей в течение нескольких лет и впервые опубликованы в 1995 году на CD-ROM случайных чисел. [1] В 2006 году оригинальные тесты diehard были расширены до dieharder
тестов. [2]
История
Первоначальный набор тестов на случайность для ГСЧ был предложен в первом издании « Искусства программирования» Дональда Кнута 1969 года (том 2, глава 3.3: статистические тесты). Затем тесты Кнута были вытеснены тестами Diehard Джорджа Марсальи (1995), состоящими из пятнадцати различных тестов. Невозможность изменять параметры теста или добавлять новые тесты привела к разработке библиотеки TestU01 , представленной в 2007 году Пьером Л'Экюйером и Ричардом Симардом из Монреальского университета .
Обзор теста
- Интервалы между днями рождения
- Выбрать случайные точки на большом интервале. Расстояния между точками должны быть распределены асимптотически экспоненциально . [3] Название основано на парадоксе дней рождения .
- Перекрывающиеся перестановки
- Проанализируйте последовательности из пяти последовательных случайных чисел. 120 возможных упорядочений должны происходить со статистически равной вероятностью.
- Ранги матриц
- Выберите некоторое количество бит из некоторого количества случайных чисел, чтобы сформировать матрицу над {0,1}, затем определите ранг матрицы. Подсчитайте ранги.
- Тесты на обезьянах
- Рассматривать последовательности некоторого количества бит как «слова». Подсчитывать перекрывающиеся слова в потоке. Количество «слов», которые не появляются, должно соответствовать известному распределению. Название основано на теореме о бесконечной обезьяне .
- Посчитайте единицы
- Подсчитайте биты 1 в каждом из последовательных или выбранных байтов. Преобразуйте счетчики в «буквы» и подсчитайте вхождения пятибуквенных «слов».
- Тест на парковке
- Случайным образом разместите единичные круги в квадрате 100×100. Круг успешно припаркован, если он не перекрывает существующий успешно припаркованный. После 12 000 попыток количество успешно припаркованных кругов должно следовать определенному нормальному распределению .
- Тест на минимальное расстояние
- Случайным образом разместите 8000 точек в квадрате 10000×10000, затем найдите минимальное расстояние между парами. Квадрат этого расстояния должен быть экспоненциально распределен с определенным средним.
- Тест случайных сфер
- Случайным образом выберите 4000 точек в кубе с ребром 1000. Центрируйте сферу в каждой точке, радиус которой равен минимальному расстоянию до другой точки. Наименьший объем сферы должен быть распределен экспоненциально с определенным средним.
- Тест на сжатие
- Умножьте 2 31 на случайные числа с плавающей точкой на ( 0,1 ) до тех пор, пока не получите 1. Повторите это 100000 раз. Количество чисел с плавающей точкой, необходимое для получения 1, должно соответствовать определенному распределению.
- Тест перекрывающихся сумм
- Сгенерируйте длинную последовательность случайных чисел с плавающей точкой на ( 0,1 ). Добавьте последовательности из 100 последовательных чисел с плавающей точкой. Суммы должны быть нормально распределены с характерным средним значением и дисперсией.
- Тест запуска
- Сгенерировать длинную последовательность случайных чисел с плавающей точкой ( 0,1 ). Подсчитать восходящие и нисходящие серии. Подсчеты должны следовать определенному распределению.
- Тест на кости
- Сыграйте 200000 игр в крэпс , подсчитывая выигрыши и количество бросков за игру. Каждый подсчет должен следовать определенному распределению.
Описания тестов
- Тест на интервалы между днями рождения
- Выберите m дней рождения в году из n дней. Перечислите интервалы между днями рождения. Если j — это количество значений, которые встречаются в этом списке более одного раза, то j асимптотически распределено по Пуассону со средним значением m 3 / (4 n ) . Опыт показывает, что n должно быть довольно большим, скажем, n ≥ 2 18 , для сравнения результатов с распределением Пуассона с этим средним значением. Этот тест использует n = 2 24 и m = 2 9 , так что базовое распределение для j принимается как пуассоновское с λ = 2 27 / 2 26 = 2 . Берется выборка из 500 j s, и тест согласия хи-квадрат дает значение p . Первый тест использует биты 1–24 (считая слева) из целых чисел в указанном файле. Затем файл закрывается и открывается снова. Далее биты 2–25 используются для предоставления дней рождения, затем 3–26 и так далее до битов 9–32. Каждый набор бит предоставляет p -значение, а девять p -значений предоставляют выборку для KSTEST.
- Тест на перекрывающиеся 5-перестановки
- Это тест OPERM5. Он рассматривает последовательность из одного миллиона 32-битных случайных целых чисел. Каждый набор из пяти последовательных целых чисел может находиться в одном из 120 состояний для 5! возможных порядков пяти чисел. Таким образом, 5-е, 6-е, 7-е, ... числа каждое обеспечивает состояние. Поскольку наблюдаются тысячи переходов состояний, производятся кумулятивные подсчеты числа появлений каждого состояния. Затем квадратичная форма в слабой обратной ковариационной матрице 120×120 дает тест, эквивалентный тесту отношения правдоподобия, что 120 подсчетов ячеек произошли из указанного (асимптотически) нормального распределения с указанной ковариационной матрицей 120×120 (с рангом 99). Эта версия использует 1000000 целых чисел дважды. Этот тест может иметь нерешенные ошибки, приводящие к постоянно плохим p-значениям. [4]
- Тест двоичного ранга для матриц 31×31
- Самые левые 31 бит из 31 случайных целых чисел из тестовой последовательности используются для формирования двоичной матрицы 31×31 над полем {0,1}. Ранг определяется. Этот ранг может быть от 0 до 31, но ранги < 28 редки, и их подсчеты объединяются с рангом 28. Ранги находятся для 40000 таких случайных матриц, и тест хи-квадрат выполняется для подсчетов для рангов 31, 30, 29 и ≤ 28.
- Тест двоичного ранга для матриц 32×32
- Формируется случайная двоичная матрица 32×32, каждая строка — случайное 32-битное целое число. Определяется ранг. Этот ранг может быть от 0 до 32, ранги менее 29 редки, и их подсчеты объединяются с рангом 29. Ранги находятся для 40000 таких случайных матриц, и тест хи-квадрат выполняется для подсчетов для рангов 32, 31, 30 и ≤ 29.
- Тест двоичного ранга для матриц 6×8
- Из каждого из шести случайных 32-битных целых чисел из тестируемого генератора выбирается указанный байт, и полученные шесть байтов образуют двоичную матрицу 6×8, ранг которой определяется. Этот ранг может быть от 0 до 6, но ранги 0, 1, 2, 3 встречаются редко; их подсчеты объединяются с рангом 4. Ранги находятся для 100000 случайных матриц, и тест хи-квадрат выполняется для подсчетов для рангов 6, 5 и ≤ 4.
- Тест битстрима
- Тестируемый файл рассматривается как поток битов. Назовем их b 1 , b 2 , ... . Рассмотрим алфавит с двумя «буквами», 0 и 1, и представим поток битов как последовательность 20-буквенных «слов», перекрывающихся друг друга. Таким образом, первое слово — b 1 b 2 ...b 20 , второе — b 2 b 3 ...b 21 и т. д. Тест потока битов подсчитывает количество пропущенных 20-буквенных (20-битных) слов в строке из 2 21 перекрывающихся 20-буквенных слов. Существует 2 20 возможных 20-буквенных слов. Для действительно случайной строки из 2 21 + 19 бит число пропущенных слов j должно быть (очень близко к) нормально распределено со средним значением 141 909 и сигмой 428. Таким образом, ( j −141909) / 428 должно быть стандартной нормальной переменной ( оценкой z ), которая приводит к равномерному [0,1) значению p . Тест повторяется двадцать раз.
- Тесты OPSO, OQSO и DNA
- OPSO означает перекрывающиеся пары-разреженное-занятие. Тест OPSO рассматривает 2-буквенные слова из алфавита из 1024 букв. Каждая буква определяется указанными десятью битами из 32-битного целого числа в последовательности, которая должна быть протестирована. OPSO генерирует 2 21 (перекрывающихся) 2-буквенных слов (из 2 21 + 1 «нажатия клавиш») и подсчитывает количество пропущенных слов – то есть 2-буквенных слов, которые не появляются во всей последовательности. Это количество должно быть очень близко к нормальному распределению со средним значением 141909, сигма 290. Таким образом, (missingwrds-141909) / 290 должно быть стандартной нормальной переменной. Тест OPSO берет 32 бита за раз из тестового файла и использует назначенный набор из десяти последовательных битов. Затем он перезапускает файл для следующих назначенных 10 бит и так далее. OQSO означает перекрывающиеся-четверки-разреженные-занятия. Тестовый OQSO похож, за исключением того, что он рассматривает 4-буквенные слова из алфавита из 32 букв, каждая буква определяется назначенной строкой из 5 последовательных бит из тестового файла, элементы которого предполагаются 32-битными случайными целыми числами. Среднее количество пропущенных слов в последовательности из 2 21 четырехбуквенных слов (2 21 + 3 "нажатия клавиш") снова равно 141909, с сигмой = 295. Среднее значение основано на теории; сигма получается из обширного моделирования. Тест ДНК рассматривает алфавит из 4 букв C, G, A, T, определяемый двумя назначенными битами в последовательности случайных целых чисел, которые тестируются. Он рассматривает 10-буквенные слова, так что, как и в OPSO и OQSO, существует 2 20 возможных слов, а среднее количество пропущенных слов из строки из 2 21 (перекрывающихся) 10-буквенных слов (2 21 + 9 «нажатий клавиш») составляет 141909. Стандартное отклонение сигма = 339 было определено, как и для OQSO, путем моделирования. (Сигма для OPSO, 290, является истинным значением (до трех знаков), а не определяется путем моделирования.
- Тест подсчета единиц в потоке байтов
- Рассмотрим тестируемый файл как поток байтов (четыре на 32-битное целое число). Каждый байт может содержать от нуля до восьми единиц с вероятностями 1, 8, 28, 56, 70, 56, 28, 8, 1 на 256. Теперь пусть поток байтов предоставляет строку перекрывающихся 5-буквенных слов, каждая «буква» принимает значения A, B, C, D, E. Буквы определяются количеством единиц в байте: 0, 1 или 2 дают A, 3 дают B, 4 дают C, 5 дают D и 6, 7 или 8 дают E. Таким образом, у нас есть обезьяна за пишущей машинкой, нажимающая пять клавиш с различными вероятностями (37, 56, 70, 56, 37 на 256). Существует 5 5 возможных 5-буквенных слов, и из строки из 256000 (перекрывающихся) 5-буквенных слов подсчеты производятся по частотам для каждого слова. Квадратичная форма в слабой обратной матрице ковариации количества ячеек обеспечивает хи-квадрат тест Q5–Q4, разницу наивных сумм Пирсона (OBS-EXP) 2 / EXP по подсчетам для 5- и 4-буквенных подсчетов ячеек.
- Тест подсчета единиц для определенных байтов
- Рассмотрим тестируемый файл как поток 32-битных целых чисел. Из каждого целого числа выбирается определенный байт, скажем, самые левые биты от 1 до 8. Каждый байт может содержать от 0 до 8 единиц с вероятностями 1, 8, 28, 56, 70, 56, 28, 8, 1 на 256. Теперь пусть указанные байты из последовательных целых чисел образуют строку (перекрывающихся) 5-буквенных слов, где каждая «буква» принимает значения A, B, C, D, E. Буквы определяются количеством единиц в этом байте 0, 1 или 2 → A, 3 → B, 4 → C, 5 → D и 6, 7 или 8 → E. Таким образом, у нас есть обезьяна за пишущей машинкой, нажимающая пять клавиш с различными вероятностями 37, 56, 70, 56, 37 на 256. Существует 5 5 возможных 5-буквенные слова, и из строки из 256000 (перекрывающихся) 5-буквенных слов, подсчеты производятся по частотам для каждого слова. Квадратичная форма в слабой обратной ковариационной матрице подсчетов ячеек обеспечивает критерий хи-квадрат Q5 – Q4, разность наивных сумм Пирсона (OBS − EXP) 2 / EXP по подсчетам для 5- и 4-буквенных подсчетов ячеек.
- Тест на парковке
- В квадрате со стороной 100 случайным образом «припаркуйте» автомобиль – круг радиусом 1. Затем попробуйте припарковать второй, третий и так далее, каждый раз паркуясь «на слух». То есть, если попытка припарковать автомобиль приводит к столкновению с уже припаркованным автомобилем, попробуйте еще раз в новом случайном месте. (Чтобы избежать проблем с траекторией, рассмотрите парковку вертолетов, а не автомобилей.) Каждая попытка приводит либо к столкновению, либо к успеху, последний сопровождается увеличением списка уже припаркованных автомобилей. Если мы построим график n : количество попыток, в зависимости от k – количество успешно припаркованных автомобилей, мы получим кривую, которая должна быть похожа на те, которые предоставляет идеальный генератор случайных чисел. Теория поведения такой случайной кривой кажется недостижимой, и поскольку графические дисплеи недоступны для этой серии тестов, используется простая характеристика случайного эксперимента: k , количество автомобилей, успешно припаркованных после n = 12000 попыток. Моделирование показывает, что k должно быть в среднем 3523 с сигмой 21,9 и очень близко к нормальному распределению. Таким образом, ( k − 3523) / 21,9 должна быть стандартной нормальной переменной, которая, преобразованная в равномерную переменную, обеспечивает входные данные для KSTEST на основе выборки из 10.
- Тест на минимальное расстояние
- Он делает это 100 раз, выбирая n = 8000 случайных точек в квадрате со стороной 10000. Найдите d , минимальное расстояние между ( n 2 − n ) / 2 парами точек. Если точки действительно независимы и равномерны, то d 2 , квадрат минимального расстояния, должен быть (очень близок к) экспоненциально распределен со средним значением 0,995. Таким образом, 1 − exp(− d 2 / 0,995) должен быть равномерным на [0,1), а KSTEST для полученных 100 значений служит тестом равномерности для случайных точек в квадрате. Выводятся тестовые числа = 0 mod 5, но KSTEST основан на полном наборе из 100 случайных выборов 8000 точек в квадрате 10000×10000.
- Тест 3D-сфер
- Выберите 4000 случайных точек в кубе с ребром 1000. В каждой точке поместите в центр сферу, достаточно большую, чтобы достичь следующей ближайшей точки. Тогда объем наименьшей такой сферы будет (очень близок к) экспоненциально распределен со средним значением 120 π / 3. Таким образом, радиус в кубе будет экспоненциальным со средним значением 30. (Среднее значение получено путем обширного моделирования). Тест 3D-сфер генерирует 4000 таких сфер 20 раз. Каждый минимальный радиус в кубе приводит к однородной переменной с помощью 1 − exp(− r 3 / 30) , затем KSTEST выполняется на 20 p -значениях.
- Тест на сжатие
- Случайные целые числа плавают, чтобы получить униформы на [0,1). Начиная с k = 2 31 = 2147483648, тест находит j , количество итераций, необходимых для уменьшения k до 1, используя уменьшение k = ceiling( k × U ), где U предоставляется плавающими целыми числами из тестируемого файла. Такие j s находятся 100000 раз, затем подсчитывается количество раз, когда j было ≤ 6, 7, ..., 47, ≥ 48, что используется для обеспечения теста хи-квадрат для частот ячеек.
- Тест перекрывающихся сумм
- Целые числа плавают, чтобы получить последовательность U (1), U (2), ... равномерных [0,1) переменных. Затем формируются перекрывающиеся суммы, S (1) = U (1) + ... + U (100), S (2) = U (2) + ... + U (101), .... S s являются практически нормальными с определенной ковариационной матрицей. Линейное преобразование S s преобразует их в последовательность независимых стандартных нормалей, которые преобразуются в равномерные переменные для KSTEST. P -значения из десяти KSTEST задаются еще одним KSTEST.
- Тестовые запуски
- Он подсчитывает прогоны вверх и вниз в последовательности равномерных переменных [0,1), полученных путем плавающего 32-битного целого числа в указанном файле. Этот пример показывает, как подсчитываются прогоны: 0.123, 0.357, 0.789, 0.425, 0.224, 0.416, 0.95 содержит прогон вверх длиной 3, прогон вниз длиной 2 и прогон вверх (по крайней мере) 2, в зависимости от следующих значений. Матрицы ковариации для прогонов вверх и вниз хорошо известны, что приводит к тестам хи-квадрат для квадратичных форм в слабых обратных матрицах ковариации. Прогоны подсчитываются для последовательностей длиной 10000. Это делается десять раз. Затем повторяется.
- Тест на кости
- Он играет в 200000 игр в крэпс, находит количество побед и количество бросков, необходимых для завершения каждой игры. Количество побед должно быть (очень близко к) нормальному со средним значением 200000 p и дисперсией 200000 p (1 − p ) , где p = 244 / 495 . Броски, необходимые для завершения игры, могут варьироваться от 1 до бесконечности, но подсчеты для всех > 21 объединяются с 21. Проводится тест хи-квадрат на подсчетах ячеек количества бросков. Каждое 32-битное целое число из тестового файла дает значение для броска игральной кости путем плавающего значения [0,1), умножения на 6 и взятия 1 плюс целая часть результата.
Большинство тестов в DIEHARD возвращают p -значение, которое должно быть равномерным на [0,1), если входной файл содержит действительно независимые случайные биты. Эти p -значения получаются из p = F ( X ), где F — предполагаемое распределение случайной величины выборки X — часто нормальное. Но это предполагаемое F — всего лишь асимптотическое приближение, для которого соответствие будет наихудшим в хвостах. Таким образом, вас не должны удивлять случайные p -значения около 0 или 1, такие как 0,0012 или 0,9983. Когда поток битов действительно СИЛЬНО НЕ ПРОХОДИТ, вы получите p s от 0 или 1 до шести или более знаков. Поскольку существует много тестов, вполне вероятно, что p < 0,025 или p > 0,975 означает, что ГСЧ «провалил тест на уровне 0,05». Мы ожидаем, что среди сотен событий, которые выдает DIEHARD, произойдет несколько таких событий p s, даже при условии идеальности генератора случайных чисел.
Смотрите также
Ссылки
- ^ "CDROM Marsaglia Random Number, включающий Diehard Battery of Tests of Randomness". Университет штата Флорида . 1995. Архивировано из оригинала 25.01.2016.
- ^ Браун, Роберт Г. "dieharder" . Получено 25.09.2023 .
- ^ Реньи, 1953, стр. 194
- ^ "Страница общих инструментов Роберта Г. Брауна". Архивировано из оригинала 2017-07-03.
Дальнейшее чтение
- Винья, Себастьяно (июль 2016 г.). «Экспериментальное исследование генераторов ксоршифта Марсальи, скремблированное» (PDF) . ACM Transactions on Mathematical Software . 42 (4): 30. arXiv : 1402.6246 . doi :10.1145/2845077. S2CID 13936073.
- О'Нил, Мелисса Э. (5 сентября 2014 г.). PCG: Семейство простых быстрых и эффективных по объему статистически хороших алгоритмов для генерации случайных чисел (PDF) (Технический отчет). Колледж Харви Мадда . HMC-CS-2014-0905.
Внешние ссылки
- «CDROM Marsaglia Random Number, включающий Diehard Battery of Tests of Randomness». Университет штата Флорида . 1995. Архивировано из оригинала 25.01.2016.
- Роберт Г. Браун. «Dieharder: A Random Number Test Suite».