Я записал программу в Java, который прокручивает умирание и записывает общее количество раз, каждое значение 1-6 прокручивается. Я прокрутил 6 Миллионов раз. Вот распределение:
#of 0's: 0
#of 1's: 1000068
#of 2's: 999375
#of 3's: 999525
#of 4's: 1001486
#of 5's: 1000059
#of 6's: 999487
(0 не была опция.)
Действительно ли это распределение согласовывается со случайными бросками костей? Какие объективные статистические тесты могли бы подтвердить, что броски костей действительно достаточно случайны?
Править: вопросы были подняты по приложению: игра, что я хочу быть столь справедливым, как может быть обоснованно достигнут.
Чтобы проверить, согласуется ли это конкретное распределение с ожидаемым распределением чисел, выпавших с "правильным" прыжком, вам необходимо выполнить Ци Пирсона -квадратный тест .
Обратите внимание, что это все равно не докажет, что ваш алгоритм «справедливый», а только то, что эти конкретные результаты выглядят «справедливо».
Чтобы проверить, является ли ваш алгоритм «честным» в целом, используйте тесты Дихарда , как уже упоминалось другими.
Вероятность того, что 6'000'000 бросков кубиков приведут к точно 1'000'000 исходам каждого, близка к 0. Пока sum, если результаты верны и дисперсия (ошибка) отличия от ожидаемого результата приближается к 0 (относительно) при увеличении количества испытаний, то ваша случайная функция не ошибочна.
Вы можете доказать это математически или протестировав случайную функцию с все более и более крупными пробными последовательностями, чтобы увидеть, что она сходится.
Для повторяющегося количества тестов сумма для каждого результата должна приблизительно соответствовать распределению Гаусса. Например. каждый исход 1–6 должен попадать в нормальное распределение с центром около 1 000 000 с дисперсией, обратно пропорциональной количеству бросков кубиков.
Другие тесты, тесты Дихарда, проверяют, что фактическая последовательность бросков кубиков случайна сама по себе, а не то, что результатом 6'000'000 бросков, например, будет 100'000 последовательных единиц, затем 100000 двоек и так далее и, наконец, несколько случайных последовательностей.
Если ваш генератор случайных чисел проходит тесты Diehard, это лучшее, что вы можете сделать.
Даже физический кубик не будет идеальным с 1/6 на каждую грань.
Увеличьте количество испытаний на порядок, затем повторите. Если вы получите 1/6 для каждого испытания, то все будет в порядке.
Одного этого теста недостаточно для определения случайности. Не то чтобы это было совершенно бесполезно, но «случайный» ролик игральных костей, который выводит 1,2,3,4,5,6 и повторяется, будет совершенно случайным в соответствии с этим тестом.
Другой рекомендуемый тест: выберите число x и каждый раз, когда оно выпадает, записывайте статистику того, какое число будет следующим; вы должны снова увидеть равномерное распределение. Повторите для всех шести значений x. Если он проходит этот тест, он, вероятно, достаточно случайный, чтобы его можно было использовать в качестве ролика для игры в кости.