Как протестировать случайный генератор

Я должен протестировать генератор случайных чисел, который производит числа случайным образом. Как удостовериться, что сгенерированные числа случайны.

30
задан Pascal Thivent 25 January 2010 в 10:05
поделиться

10 ответов

Это зависит от того, насколько серьезно ваше требование к случайности. Если это не слишком серьезное, то, что я делаю, это генерировать большое количество случайных чисел, найдите их частоты, а затем используйте частоты, чтобы построить график, используя электронный список, как в открытом офисе. Если распределение выглядит хорошо, то я приятно идти.

1
ответ дан 28 November 2019 в 00:10
поделиться

Как убедиться, что сгенерированные числа являются случайными.

Вы не можете Убедитесь, что , нет способа различить уверенностью любую функцию из генератора случайных чисел, используя конечное количество тестов. Но вы можете сделать статистический анализ :

Итак, если невозможно окончательно доказать случайность, что мы можем вместо этого? Прагматичный подход состоит в том, чтобы взять много разных случаев случайных чисел из данного генератора и подвергайте их аккумуляторам статистических испытаний. Поскольку последовательности проходят больше тестов, доверие к случайности чисел увеличивается и так и уверенность в генераторе. Однако, поскольку мы ожидаем, что некоторые последовательности появляются нерандомом (например, десять рулонов шести на наших уменьшении), мы должны ожидать, что некоторые из последовательностей потерпят неудачу, по крайней мере, некоторые из тестов. Однако, если многие последовательности терпят неудачу тесты, мы должны быть подозрительными. Это также способ, которым вы будете интуитивно проверить уменьшению, чтобы посмотреть, будет ли он загружен: катить много раз, и если вы видите слишком много последовательностей того же значения, вы должны быть подозрительными.

См. Раздел Charmaine Kenny исследование для более подробной информации о тестах, которые вы могли бы запустить.

4
ответ дан 28 November 2019 в 00:10
поделиться

Это очень сложная вещь.

Вы можете попробовать INT из FourMilab и сравните его с результатами против их RNG, Hotbits . Вы также можете понравиться просмотреть Random.org .

Это также выглядит интересно: тесты Диехарда (я не работал с этим, хотя и).

3
ответ дан 28 November 2019 в 00:10
поделиться

Используйте тестирование Chi-Square. Какой язык вы используете? Я могу предложить пример C ++. В основном

  • место случайных чисел в ведрах (много раз).
  • Количество ведров минус один - это степень свободы .
  • Сравните ковшные подсветки против «ожидаемых» подсвечений, уступая результатом хи-квадрата.
  • Используйте Chi-квадратный калькулятор , чтобы увидеть вероятность получения этих результатов.
11
ответ дан 28 November 2019 в 00:10
поделиться

Зачастую, если у вас есть ваши генераторные точки в случайных местах в растровом изображении, любая нераженность будет легко наглядно на глаз в виде комки, полоса или линий.

1
ответ дан 28 November 2019 в 00:10
поделиться

показывают это комнату, полную разработчиков.

2
ответ дан 28 November 2019 в 00:10
поделиться

Если у вас нет доступа к генератору случайного номера и может использовать его для генерации чисел по желанию, вы не могут тест, если это случай случайных Отказ Подумайте об этом: у вас есть генератор случайных номеров. Скажем, это однородный генератор случайных чисел, генерируя случайные целые числа в диапазоне [0,9]. Учитывая последовательность:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Можете ли вы сказать, является ли случайным? Существует конечная вероятность 10 -10 , что наш единый генератор случайных номеров будет генерировать эту точную последовательность. Фактически, учитывая любой последовательности длины-10, у нас такая же вероятность нашего униформного генератора случайных чисел, генерирующих эту последовательность. Следовательно, по определению вы не можете определить, является ли данная последовательность случайной.

Если у вас есть доступ к самому генератору, и можете использовать его для генерации нескольких последовательностей, то имеет смысл «проверять случайность». Для этого я бы посмотрел на тесты . Существуют различные реализации.

0
ответ дан 28 November 2019 в 00:10
поделиться

Вы не можете убедиться, что номера случайные просто потому, что случайные номера являются, ну, Случайный .

Шансы на получение строки одного миллиона последовательных 9-х годов такими же, как получить любую другую конкретную одномиллионовую последовательность. Одна вещь, которую вы могут Проверьте правильное распределение по большому набору образца. Запустите значительный тест и разрабатывайте относительные вхождения каждого возможного результата.

Над достаточно большой образец, они должны быть примерно одинаковыми.

Еще одна возможность - проверять на не повторяемость. В идеале случайные числа не должны зависеть от чисел, которые пришли ранее. Очень простые (линейные конгруэнтровые) PRONG, скорее всего, дадут вам ту же последовательность чисел в конце концов, но в течение достаточно большого количества набора, которые вы, вероятно, не будете заботиться (если вы серьезно о случайности).

2
ответ дан 28 November 2019 в 00:10
поделиться

Создайте файл журнала, который будет содержит случайное число для не менее 500 экземпляров и аудит его для случайности. Также взглянуть на ссылку ниже,

http://burtleburtle.net/bob/rand/testsfor.html

1
ответ дан 28 November 2019 в 00:10
поделиться

Вы не можете генерировать истинную случайность по любому алгоритму, Таким образом, попытайтесь визуализировать ваши выходы и проверьте шаблоны своими глазами. Нет случайных генератора (по алгоритму) создаст некоторые шаблоны, которые вы можете судить их самостоятельно. Вот один из демонстрации этой идеи: http://www.alife.co.uk/nonrandom/

-1
ответ дан 28 November 2019 в 00:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: