Главная > Мысли, Наука > Парадокс Монти Холла (еще раз)

Парадокс Монти Холла (еще раз)

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

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

Вопрос: нужно ли менять выбор для того, что бы возросла вероятность выигрыша или же вероятность будет одинакова 50/50 – хоть меняй, хоть нет?

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

Конечно, таким товарищам хочется сказать: а что, если игрок выберет дверь и зажмурится, не видя, какую дверь открывает ведущий, или вообще уйдет с игры (ведь он не собирается менять решение!). Неужели вероятность его выигрыша в этом случае будет больше 1/3?
Или если дверей не три, а тысяча, и ведущий после Вашего выбора открывает 998 дверей, неужели не поменяете решение?

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

<?

$n = 100; // число опытов

$win_select = 0; // число выигрышей если менять выбор
$win_nonselect = 0; // число выигрышей если НЕ менять выбор

mt_srand(time()+(double)microtime()*1000000); // инициализируем датчик случайных чисел

for ($i=1; $i<=$n; $i++) // Повторяем в цикле опыт n раз
{
$prize = mt_rand(1,3); // Номер двери за которой машина - случайное число от 1 до 3
$first_select = mt_rand(1,3); // Выбираем дверь. Тоже случайно

// *** место для строчки

if ($prize == $first_select) // если мы угадали с первого раза
{
$open_door = mt_rand(1,2); // случайно выбираем одну из двух не выбранных дверей
// т.к. оставшихся дверей две, а номера дверей могут быть от 1 до 3, то случайное число сгенерируем
// 1 или 2, а если оно совпадет с дверью, за которой приз - то тогда выберем дверь номер 3
if (($open_door == 1) and ($open_door==$prize)) {$open_door=3;}
if (($open_door == 2) and ($open_door==$prize)) {$open_door=3;}
}
if ($prize != $first_select) // если мы НЕ угадали с первого раза
{
for ($j=1; $j<=3; $j++) // ведущий выбирает для открытия дверь
{
$open_door = $j;
if ( ($open_door != $prize) and ($open_door != $first_select) ) {break;} // которая одновременно и не с призом, и не первая выбранная
}
}

for ($j=1; $j<=3; $j++) // Если мы меняем выбор
{
$second_select = $j; // То мы выбираем дверь с условием
if ( ($second_select != $first_select) and ($second_select != $open_door) ) {break;} // что она одновременно и не открытая ведущим и не первая нами выбранная
}

if ($second_select==$prize) {$win_select++;} // Если мы угадали сменив выбор

if ($first_select==$prize) {$win_nonselect++;} // Если мы угадали не меняя выбор
// но посмотрите! ведь эту строку, мы можем поместить на место *** с неизменным результатом!
// возня с открыванием двери ничего не решает для случая, если мы не меняем решение!

}

echo "Total wins select: $win_select
Total wins NONselect: $win_nonselect"; // выводим результаты

?>

В этой программе честно моделируется вся ситуация:

  • 1. За выбранную случайным образом дверь прячем машину (дверь номер prize)
  • 2. Случайно выбираем дверь в роли игрока (дверь номер first_select)
  • 3. Ведущий, зная эти два номера, открывает дверь, номер которой не совпадает ни с номером prize ни с номером first_select. Номер этой открытой двери open_door.
  • 4. Если игрок меняет дверь, то номер новой выбранной двери должен быть не равен ни first_select – первому выбору, ни номеру открытой двери open_door. Номер двери, которую выбрал игрок – second_select
  • 5. Если second_select = prize – значит игрок правильно поменял дверь
  • 6. Если first_seslect = prize – значит игрок бы выиграл, если бы дверь не менял

И вот сейчас главная фишка для понимания парадокса:
Условие проверки в пункте 6 мы можем осуществить сразу после пункта 2!!! Ведь в пунктах 3,4,5 с переменными first_select и prize ничего не происходит! То есть действительно получается, что если мы не меняем выбор, то факты открывания двери – совершенно никак не влияют на вероятность. А она, очевидно, при данном подходе будет равна 1/3.

Запустить скрипт можно кликнув тут.

Очисти свою карму - поделись с друзьями ссылкой на эту страницу в соц. сетях!
  • Добавить ВКонтакте заметку об этой странице
  • Мой Мир
  • Facebook
  • Twitter
  • LiveJournal
  • Одноклассники



Также Вас может заинтересовать:


  1. rotozeev
    18 Ноябрь 2010 в 12:51 | #1

    Извините, но у Вас ошибка:

    “При этом вероятность того, что приз у ведущего будет равна 1/n+(n-2)” – непонятна во первых запись. Неужели, n-2 просто прибавляется? Но ведь тогда вероятность может получиться больше 1, или под символом (n-2) имелось ввиду не число ящиков минус 2, а что то другое?

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

    [Ответить]

  2. Евгений Леонидович
    18 Ноябрь 2010 в 12:26 | #2

    Здравствуйте! Простите, не силён в PHP, но математическое решение есть.
    Вопрос стоит в том, есть ли необходимость сменить выбор после предложения ведущего. Очевидно, речь идёт о разнице коэффициента вероятности нахождения приза за дверью ведущего и за Вашей. Если она положительна – ответ ДА, если отрицательна – НЕТ, если =0 – безразлично.
    Рассмотрим вероятность первоначального выбора.
    Пусть n – количество элементов в массиве. Тогда вероятность при первичном предположении выбора Вами «правильного» элемента равна 1/n. По условию задачи ведущий ОБЯЗАН открыть ПУСТЫЕ элементы в количестве n-2 (константой является сумма Вашего и оставшегося у ведущего ящика). При этом вероятность того, что приз у ведущего будет равна 1/n+(n-2). Учитывая, что по условию n-2 ОБЯЗАТЕЛЬНО ПУСТЫЕ элементы, то вероятность нахождения в них приза равна 0. Из этого следует, что вероятность того, что приз у ведущего – 1/n+(n-2)=1/n+0=1/n.
    Результат: вероятность нахождения приза как за Вашей, так и за дверью ведущего равны.
    Вывод – от обмена с ведущим вероятность не вырастет – что и требовалось доказать!
    P.S. Суть заблуждений кроется в предположении возможности выбора из более, чем двух элементов. Условие задачи (об открытии ведущим обязательно пустых дверей в количестве n-2) отрицает такую возможность. То есть какую бы дверь ни выбрали Вы, какую бы дверь ни открывал ведущий (при соблюдении вышеописанного условия) вероятность окончательного выбора всегда будет сведена к одному из двух элементов и будет равна 0.5.

    [Ответить]

  3. Денис
    14 Апрель 2011 в 12:52 | #3

    Имеется в виду (1/n)+(1/(n-2)), насколько понял я

    [Ответить]




Антиспам: если Вы - человек, то скопируйте и вставьте.

* Скопируйте это:

* И вставьте сюда:

Switch to our mobile site

Protected by Copyscape Online Plagiarism Detection Рейтинг блогов

| MySQL: 57запросов / 0.560 Потребление памяти: 29.32MB