Тестування алгоритмів генерації випадкових змінних


Відповіді:


9

Diehard Test Suite є те , що близько до Золотим стандартом для тестування генераторів випадкових чисел. Він включає ряд тестів, коли хороший генератор випадкових чисел повинен давати результат, розподілений відповідно до деякого розподілу знань, з яким потім можна порівняти результат за допомогою тестованого генератора.

EDIT

Я маю це оновити, оскільки я не мав правильного права: Діярд все ще може бути використаний багато, але він більше не підтримується і не є найсучаснішим. З того часу компанія NIST створила набір вдосконалених тестів .


9

Тільки щоб додати трохи до відповіді на розслаблення, тестовий набір Diehard (розроблений Джорджем Марсалья) є стандартними тестами для PRNG.

Є чудова бібліотека Diehard C, яка дає вам доступ до цих тестів. Окрім стандартних тестів Diehard, він також надає функції для кількох інших тестів PRNG, що включають (серед іншого) перевірку порядку біт. Існує також можливість тестування швидкості RNG та написання власних тестів.

Існує інтерфейс R для бібліотеки Dieharder, який називається RDieHarder :

library(RDieHarder)
dhtest = dieharder(rng="randu", test=10, psamples=100, seed=12345)
print(dhtest)

Diehard Count the 1s Test (byte)

       data:  Created by RNG `randu' with seed=12345, 
              sample of size 100 p-value < 2.2e-16

Це показує , що Randu генератор ГСЧ зазнає невдачі / 2dsphere тест мінімальної відстані.


8

Для тестування чисел, вироблених генераторами випадкових чисел, тести Діярда є практичним підходом. Але ці тести видаються довільними, і можна не замислюватися, чи потрібно включити більше, чи є спосіб перевірити випадковість.

Найкращим кандидатом для визначення випадкової послідовності видається випадковість Мартіна-Лефа . Основна ідея цього виду випадковості, прекрасно розроблена в розділі 3.5 Кнут, - це перевірка на однаковість для всіх типів підрядів послідовності випадкових чисел. Отримання , що весь тип підпослідовність визначення права виявився дійсно важко навіть випадку при використанні поняття обчислюваності.

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


4

Ви не можете довести, тому що це неможливо; ви можете перевірити, чи немає ніяких бентежних автокореляцій або порушень розповсюдження, і Діярд - це стандарт для цього. Це стосується статистики / фізики, криптографи також в основному перевірять (серед іншого), наскільки важко встановити генератор до даних, щоб отримати майбутні значення.


4

Невелика поправка до посади Коліна: пакет CRAN RDieHarder - це інтерфейс для DieHarder , переписання / розширення / капітальний ремонт Diehard , зроблений Робертом Г. Брауном (який люб'язно перераховує мене як співавтора на основі моїх обгортків RDieHarder) з останнім внеском Девіда Бауера.

Крім усього іншого, DieHarder включає батарею тестів NIST, згаданих у публікації Марка, а також деякі нові. Це дослідження, що тривають і тривалий час. Я говорив на useR! 2007 про RDieHarder, який ви можете отримати тут .


3

Рідко доцільно зробити висновок, що щось абстрактне є "випадковим". Частіше хочеться перевірити, чи має вона певний вид випадкової структури. Наприклад, ви можете перевірити, чи має щось рівномірне розподіл, і всі значення в певному діапазоні однаково вірогідні. Або, можливо, ви хочете перевірити, чи є в нормальному розповсюдженні і т.д.


3

Існує дві частини для тестування генератора випадкових чисел. Якщо ви займаєтесь лише тестуванням рівномірного генератора, то так, щось на зразок тестового набору DIEHARD - це гарна ідея.

Але часто потрібно перевірити трансформацію рівномірного генератора. Наприклад, ви можете використовувати рівномірний генератор для створення експоненціально або нормально розподілених значень. У вас може бути високоякісний рівномірний генератор - скажімо, у вас є надійна реалізація відомого алгоритму, такого як Mersenne Twister - але вам потрібно перевірити, чи має трансформований вихід правильний розподіл. У такому випадку вам потрібно зробити якийсь тест на придатність, такий як Колмогоров-Смірнов. Але для початку ви можете переконатися, що середнє значення та дисперсія вибірки мають очікувані значення.

Більшість людей не - і не повинні - писати власний рівномірний генератор випадкових чисел з нуля. Важко написати хороший генератор і легко обдурити себе, думаючи, що ти написав хороший, коли цього не зробив. Наприклад, Дональд Кнут розповідає історію в томі 2 TAOCP про генератор випадкових чисел, який він написав, що виявилося жахливим. Але людям властиво писати власний код для отримання випадкових значень з нового розподілу.


2

NIST публікує перелік статистичних випробувань з еталонною реалізацією в C.

Також є TestU01 деяких розумних людей, серед яких шановний дослідник PRNG П'єр Л'Екуер. Знову ж таки, є посилання на впровадження у C.

Як вказують інші коментатори, вони призначені для тестування генерації псевдовипадкових бітів. Якщо ви перетворите ці біти в іншу випадкову змінну (наприклад, перетворення Box-Мюллера з однорідної в Нормальну), вам знадобляться додаткові тести для підтвердження правильності алгоритму перетворення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.