моделирование вероятности и программирования - PullRequest
1 голос
/ 23 марта 2011

У меня возникли проблемы с пониманием следующего результата.

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

Код должен говорить сам за себя, но для прояснения симуляции «реального мира» необходимо 2 человека, подбрасывающих монету. Когда вы проигрываете, вы платите 1 доллар, когда вы выигрываете, вы выигрываете доллар. Четная игра!

private static Random rnd = new Random();
public static void main(String[] args) {
   int i=0;
   for (int x = 0; x<1000000; x++) {
      if (rnd.nextBoolean())  i+=1; 
      else  i-=1; 
    }
    System.out.println(i);
 }

Когда я запускаю это, я получаю огромные колебания! Хотя я ожидаю, что большая выборка, подобная этой, будет сходиться к 0, я вижу + -4000

Мало того, что увеличение размера выборки, кажется, только увеличивает колебания.

Я неправильно использую случайную функцию? : P

Ответы [ 3 ]

3 голосов
/ 23 марта 2011

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

4000 из 1000000, например, составляет 0,4%

Если вы увеличите размер выборки, вы должны ожидать, что это соотношение уменьшится.

1 голос
/ 23 марта 2011

Вы симулируете одномерное случайное блуждание . По сути, представьте, что вы стоите на линии целых чисел. Вы начинаете в точке i=0. С равной вероятностью вы делаете шаг вправо или влево.

У случайной прогулки есть несколько интересных свойств, и вы затронули мою любимую:

  • Начиная с точки i=0, когда N становится больше, вероятность того, что вы вернетесь к этой точке, приближается к 1. Как вы отметили - игра с нулевой суммой.
  • Однако ожидаемое время, которое потребуется вам, чтобы вернуться туда, стремится к бесконечности. Как вы заметили, вы получаете очень большие колебания.

Так как среднее значение должно быть 0, а дисперсия N ходов равна N , тогда вы ожидаете, что 95% ваших симуляций до end в регион: (- 1,96, 1,96) * N ^ (0,5).

1 голос
/ 23 марта 2011

Результаты вашего эксперимента должны соответствовать биномиальному распределению .Если количество испытаний равно N, а вероятность успеха p = 1/2, то число успехов N_success (для достаточно большого N) должно иметь среднее значение приблизительно Np и стандартное отклонение sqrt (N * p * (1-p)).

На самом деле вы отслеживаете K = (N_success - N_fail).Так что N_success = N / 2 + K / 2.С 1 000 000 испытаний и K = 4000 мы получаем N_success = 502000. Ожидаемое значение составляет 500000, а стандартное отклонение sqrt (250000) = 500. Разница между наблюдаемым и ожидаемым значениями N_success составляет 2000, или около 4 сигм.Это достаточно важно, чтобы подвергнуть сомнению смещение генератора случайных чисел.С другой стороны, если вы выполняете этот тест тысячи раз, вы ожидаете нескольких выбросов этой величины, и вы, похоже, видите как положительные, так и отрицательные значения, поэтому в долгосрочной перспективе, возможно, все в порядке в конце концов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...