Excel VBA: метод Rnd () не является достаточно случайным

1458
tkulogo

Я использую Excel и VBA для имитации большого количества бросков костей.

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

Я использую INT = RND() * 6 +.5для каждой кости.
Есть ли способ сделать это на пару порядков более случайным?
Я использую Randomizeперед рукой, чтобы предотвратить запуск одинаковым образом каждый раз.

0
Какие исследования вы уже провели? Как вы установили, что последовательность повторяется? Какой код вы используете? James Snell 10 лет назад 1
Люди не чувствуют истинной случайности. Я написал скрипт для выбора и воспроизведения случайного эпизода startrek, но заметил, что он воспроизводит несколько eps слишком часто. Я решил проверить это, сгенерировав партию из 200 eps, и проанализировал статистику. мой алгоритм был на самом деле «лучше», чем случайный, потому что он выбрал 77% возможных eps, и никогда не повторял больше одного раза. действительно случайный алгоритм будет охватывать около 67% диапазона. в конце я определил, что я на самом деле не хочу случайных, и добавил функцию истории / внесения в черный список, чтобы предотвратить повторы. надеюсь, что анекдот поможет. Frank Thomas 10 лет назад 0
Как вы определили выход "не достаточно случайно"? Вы сделали тест хи-квадрат? Мне просто интересно. Кроме того, это поможет увидеть ваш код. Excellll 10 лет назад 0
Используете ли вы «Randomize» или «Randomize Timer» [как это объясняется в SO] (http://stackoverflow.com/questions/1174246/vba-more-realistic-random-number-generator)? nixda 10 лет назад 0

1 ответ на вопрос

1
LawrenceC

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

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

Вы также можете использовать веб-сервис и скачать большое количество случайных чисел. random.irb.hr и random.org - это два таких сервиса.

На сайте random.irb.hr есть несколько библиотек, которые позволяют программно получить доступ к сервису после создания учетной записи.

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