Случайные числа - PullRequest
       27

Случайные числа

3 голосов
/ 23 января 2009

Размышляя над этим вопросом и беседуя с участниками, пришла идея, что перетасовка конечного набора явно смещенных случайных чисел делает их случайными, потому что вы не знаете порядок, в котором они были выбраны , Это правда, и если да, то может ли кто-то указать на некоторые ресурсы?

РЕДАКТИРОВАТЬ: Я думаю, я мог бы быть немного неясным. Предположим, плохой генератор случайных чисел. Возьмите n значений. Это предвзято (плохо). Есть ли способ, позволяющий сделать так, чтобы выходные данные rng в нескольких испытаниях статистически соответствовали выходным данным известного хорошего rng?

Ответы [ 7 ]

8 голосов
/ 23 января 2009

Ложные.

Существует простой тест: предположим, что смещение в исходном алгоритме создания множества «создает множества, среднее арифметическое которых значительно ниже ожидаемого среднего». Очевидно, что перетасовка результатов алгоритма не изменит средних значений и, следовательно, не устранит смещение.

Кроме того, относительно вашего разъяснения: как бы вы перетасовали набор? Используете тот же плохой вывод из плохого ГСЧ, который создал набор в первую очередь? Или используя лучший RNG? В связи с этим возникает вопрос, почему вы не используете это напрямую.

3 голосов
/ 23 января 2009

Это не соответствует действительности . В другом вопросе проблема состоит в том, чтобы выбрать 30 случайных чисел в [1..9] с суммой 200. После случайного выбора в среднем 20 из них вы достигнете точки, в которой вы не сможете больше выбирайте девятки, потому что это приведет к тому, что общая сумма превысит 200. Из оставшихся 10 чисел большинство будут единицами и двойками. Таким образом, в конце концов, единицы и пары очень перепредставлены в выбранных номерах. Тасование не меняет этого. Но не совсем ясно, как на самом деле должно выглядеть случайное распределение, поэтому можно сказать, что это такое же хорошее решение, как и любое.

В общем случае , если ваши «случайные» числа будут смещены, скажем, к низким числам, они будут смещены таким образом, независимо от порядка.

0 голосов
/ 23 июля 2011

Неверно. Рассмотрим плохой генератор случайных чисел, выдающий только нули (я сказал, что это ПЛОХОЙ :-) Никакое количество перемешивающих нулей не изменится любой свойство этой последовательности.

0 голосов
/ 23 января 2009

Совершенно и совершенно не соответствует действительности : перетасовка не устраняет предвзятость, она просто скрывает ее от случайного наблюдателя. Это все равно, что убрать лакомый подарок вашей собаки с ковра, просто толкая его под диван - вы действительно не решили проблему, вы просто сделали ее менее заметной. Любой, у кого есть нос, знает, что есть еще проблема, которую нужно устранить.

Случайность должна применяться равномерно по всему диапазону, так что вот один из способов (вне моей головы, много предположений, Ядда Ядда. Дело в подходе, а не в коде - начните со всего, даже ваша случайность в согласованном порядке, пока вы не закончили. Единственное смещение теперь зависит от значений, выбранных для «target» и «numberofnumbers», что является частью вопроса.)

target = 200
numberofnumbers = 30
numbers = array();
for (i=0; i<numberofnumbers; i++)
  numbers[i] = 9
while (sum(numbers)>target)
  numbers[random(numberofnumbers)]--
0 голосов
/ 23 января 2009

Я бы сказал ложь с оговоркой:

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

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

С другой стороны, если бы я писал видеоигру, которая будет использоваться в Лас-Вегасе, где под рукой были большие суммы денег, я бы определил случайные по-разному (и мне может быть трудно придумать действительно случайные). *

0 голосов
/ 23 января 2009

Простое перетасовывание набора чисел из уже случайных чисел, разумеется, не повлияет на распределение вероятностей. Это будет означать ложь. Возможно, я неправильно понимаю ваш вопрос?

0 голосов
/ 23 января 2009

Ложная

Множество конечно, предположим, состоит из n чисел. Что произойдет, если вы выберете n+1 номера? Давайте также рассмотрим базовую случайную функцию, реализованную во многих языках, которая дает вам случайное число в [0,1). Однако это число ограничено тремя цифрами после десятичной дроби, что дает вам набор из 1000 возможных чисел (0.000 - 0.999). Однако в большинстве случаев вам не нужно будет использовать все эти 1000 чисел, так что этой суммы случайность более чем достаточно.

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


Дополнение после прочтения оригинального вопроса : в случае, если у вас есть какое-то ограничение (например, в исходном вопросе, в котором каждый набор выбранных чисел должен суммировать до определенного N), вы не совсем выбранные случайные числа сами по себе , но вместо этого выбираются числа в случайном порядке из заданного набора (в частности, перестановка чисел, суммирующих до N).


Дополнение для редактирования: Предположим, ваш генератор неверных чисел сгенерировал последовательность (1,1,1,2,2,2). Удовлетворяет ли перестановка (1,2,2,1,1,2) вашему определению random ?
...