TestU01 — это пакет статистических эмпирических тестов, реализованный на языке ANSI C, который предлагает набор утилит для тестирования генераторов случайных чисел. Последняя версия библиотеки была представлена в 2007 году Пьером Л`Экуйе и Ричардом Симардом из Монреальского университета[1].
Пакет содержит в себе несколько типов ГПСЧ, включая некоторые предложенные в литературе и некоторые широко используемые в программном обеспечении. Он дает общие реализации классических статистических тестов для генераторов случайных чисел, а также для предложенных в литературе и некоторых оригинальных. Эти тесты могут быть применены к генераторам, которые уже имеются в библиотеке, пользовательским генераторам и потокам случайных чисел. Специальные тесты проверяют любые последовательности равномерно распределенных случайных чисел в или битовые последовательности. Основные инструменты для построения векторов точек, вырабатываемых генераторами, тоже присутствуют[1].
TestU01 впервые был реализован в 1985 году на языке Pascal и содержал тесты, предложенные Дональдом Кнутом во втором издании второго тома Искусства программирования[2]. Четыре года спустя был повторно реализован на языке Modula-2 в виде пакета с модульным дизайном. Тогда вместе с новыми тестами были добавлены некоторые наиболее часто используемые ГПСЧ. В период с 1990 по 2001 годы пакет периодически пополнялся новыми генераторами и тестами, а руководство пользователя своевременно обновлялось (на французском). модули, содержащие инструменты для тестирования семейств генераторов, впервые были представлены в 1997 году. В 2002 году Пьер Л`Экуйе и Ричард Симард переработали библиотеку, реализовали её на языке C и перевели руководство на английский язык.
Критерий качества ГПСЧ
правитьГПСЧ в основном предназначены для хорошей имитации последовательности независимых случайных величин, обычно в действительном интервале или в двоичном наборе . В первом случае гипотеза 0A гласит, что числа 0, 1, 2, 3... – независимые величины из равномерного распределения в интервале [3]. Во втором, 0B гласит, что имеется последовательность независимых случайных бит, каждый из которых принимает значение или с равной вероятностью[3].
0A эквивалентно высказыванию, что для любого целого вектор ( 0, ..., ) равномерно распределён в -мерном кубе . Для алгоритмических ГПСЧ утверждение является неверным, т.к. векторы в них берут свои значения из конечного числа всех -мерных векторов, которые способен выдать генератор[3].
Для последовательности бит гипотеза 0B тоже не может формально называться истинной в случае, когда длина последовательности превышает количество бит состояний генератора, потому что количество производимых возможных последовательностей не может превышать [3]. Задача генератора состоит в том, чтобы убедиться в равномерном распределении последовательностей в поле всех возможных последовательностей в .
Другой критерий качества для ГПСЧ используется в криптологии и в азартных игровых автоматах. Здесь, вдобавок ко всему вышеперечисленному, отдельное внимание уделяется непредсказуемости последующих чисел[3].
TestU01 предлагает четыре группы модулей для работы с генераторами:
- реализация заранее запрограммированного генератора (модуль );
- реализация специальных статистических тестов (модуль );
- реализация батарей статистических тестов (модуль );
- применение тестов на целых семействах генераторов (модуль ).
Когда конкретный тест применяется на выходных данных генератора размера , p-значение теста обычно остается разумным до тех пор, пока размер данных не достигнет определенного значения . После этого p-значение расходится к или с экспоненциальной скоростью. Модуль позволяет исследователю изучить связь между специальным тестом и структурой множества точек, полученных с помощью определенного семейства генераторов. Эта техника может быть использована для определения размера проверяемых данных в зависимости от длины периода генератора до того, как генератор не начнет систематически проваливать тесты.
TestU01 предлагает несколько батарей тестов, таких как SmallCrush (состоит из 10 тестов), Crush (96 тестов) и BigCrush (106 тестов). На компьютере на базе процессора Pentium 4 и с операционной системой Linux для простого генератора время работы батареи тестов SmallCrush занимает несколько минут, Crush — порядка часа, BigCrush — порядка десятка часов[3].
Другие программы для тестирования ГПСЧ
правитьОдним из широко распространённых пакетов тестов ГПСЧ является DIEHARD[4], содержащий большое число статистических тестов, но имеющий ряд недостатков и ограничений. Во-первых, последовательность тестов, а также их параметры (такие как размер образца и др.) фиксированы, что плохо сказывается на скорости тестирования[3]. Во-вторых, DIEHARD требует на вход данные в виде целых чисел размером 32 бита, записанных в двоичном файле, когда как многие генераторы выдают числа размером меньше, чем 32 бита[3]. По сравнению с TestU01, пакет DIEHARD менее гибок в этих аспектах[3].
Ещё один общедоступный пакет тестов – это библиотека SPRNG[5], включающая в себя классические тесты, описанные в "Искусстве Программирования"[2]. Также, Национальный институт стандартов и технологий разработал свой пакет из 15 тестов для тестирования генераторов, используемых в криптографии[6].
Батареи
правитьБатарея Alphabit создавалась для тестирования аппаратных генераторов случайных чисел. Проводит девять последовательных тестов, перед каждым переписывая входные данные.
Rabbit – батарея, больше сфокусированная на тестировании двоичных данных, но некоторые тесты проходят с фиксированными параметрами, какого бы размера ни были входные данные. Поэтому данные, размер которых превышает 64 мегабайта, приводит к ошибке в одном из тестов и приводит к переполнению оперативной памяти.[7]
SmallCrush, маленькая и быстрая батарея тестов, считывает генератор как файл, содержащий числа с плавающей точкой в пределах . Ограничение на файл чуть менее 51320000 случайных чисел. Файл будет переписан в начале каждого теста. Некоторые тесты требуют чтобы генератор возвращал как минимум 30 бит решения, в противном случае генератор с большой вероятностью провалит их. Обычно используется для проверки целесообразности проведения тестов на более строгих батареях[7].
Crush – Батарея из строгих статистических тестов. Включает в себя как классические тесты Кнута, так и множество других. Некоторые из этих тестов предполагают, что генератор возвращает как минимум 30 бит решения, в противном случае тесты будут считаться проваленными. Один из тестов требует 31 бит данных. Батарея использует примерно 235 случайных чисел[7].
BigCrush – батарея самых строгих статистических тестов. Так же как и в остальных батареях, некоторые тесты требуют как минимум 30 бит входных данных, иначе тесты будут провалены. Так же один из тестов требует 31 бит данных. Батарея использует почти 238 случайных чисел. Когда BigCrush впервые появился, даже считавшиеся хорошими ГПСЧ с трудом его проходили[7].
Тесты батареи SmallCrush
правитьВот некоторые примеры тестов батареи SmallCrush[1].
BirthdaySpasings | Тест, основанный на парадоксе дней рождения. Выбираются случайные точки на большом интервале, расстояния между которыми должны быть асимптотически распределены по Пуассону. |
Gap | Тест, использующийся для определения интервала между повторениями одной и той же цифры. |
CouponCollector | Пусть последовательность длины n и размерности m. Исследуются последовательности определенной длины, которые содержат m-разрядное число. |
MatrixRank | Тест выбирает определённое количество бит из некоторого количества случайных чисел чтобы сформировать матрицу над {0,1}. Затем определяется ранг матрицы. |
Литература
править- Pierre L’Ecuyer, Richard Simard. TestU01: A C Library for Empirical Testing of Random Number Generators. — D´epartement d’Informatique et de Recherche Op´erationnelleUniversit´e de Montr´eal: ACM Transactions on Mathematical Software, 2007. — 40 с.
- Knuth D.E. The Art of Computer Programming volume 2, — ISBN 0-201-89684-2.
Ссылки
правитьПримечания
править- ↑ 1 2 3 4 5 Pierre L'Ecuyer, Richard Simard. TestU01: A C Library for Empirical Testing of Random Number Generators // ACM Trans. Math. Softw.. — August 2007. — Т. 33, вып. 4. — С. 22:1–22:40. — ISSN 0098-3500. — doi:10.1145/1268776.1268777.
- ↑ 1 2 D. E. Knuth. The Art of Computer Programming, Volume 2: Seminumerical Algorithms. — Addison-Wesley, 1981. — 142 с. Архивировано 4 сентября 2008 года.
- ↑ 1 2 3 4 5 6 7 8 9 Pierre L’Ecuyer and Richard Simard. A Software Library in ANSI C for Empirical Testing of Random Number Generators. — 2013. — С. 219. Архивировано 9 декабря 2014 года.
- ↑ [Marsaglia.] DIEHARD: a battery of tests of randomness . Department of Statistic (1996). Архивировано из оригинала 20 января 2016 года.
- ↑ M. Mascagni and A. Srinivasan. Algorithm 806: SPRNG: A scalable library for pseudorandom number generation // ACM Transactions on Mathematical Software. — 2000. — 1 декабря (т. 26, № 4). — С. 436–461.
- ↑ CSRC - NIST SP 800-22: Documentation and Software . csrc.nist.gov. Дата обращения: 24 сентября 2017. Архивировано 25 сентября 2017 года.
- ↑ 1 2 3 4 TestU01 results - BitBabbler (англ.). www.bitbabbler.org. Дата обращения: 26 сентября 2017. Архивировано 6 октября 2017 года.