Комментарии 31
Слой 1: где приз
Слой 2: что выбрал игрок в первый раз
Слой 3: какую дверь открыл ведущий
Слой 4: что выбрал игрок во второй раз
У меня получилось, что суммарное количество призов по веткам «игрок не меняет дверь» оказалось равным суммарному количеству призов по веткам «игрок меняет дверь».
Что-то я в этом парадоксе не понимаю…
Ну и первое объяснение.
В первом раунде я с вероятностью 2/3 выбираю "дверь без приза" (таких дверей две из трех по условию задачи). После того как ведущий открывает одну "дверь без приза", передо мной остается две двери, одну из которых я выбрал, и она с вероятностью 2/3 "дверь без приза", и соответственно вторая, которая с вероятностью 2/3 "дверь с призом". Соответственно шансов выиграть при смене двери больше.
Если заново рисовать, то примерно так:
https://app.mindmup.com/map/_free/5f6790a00d3511e783074174897cf52a
Итого:
с настойчивостью выигрышей — 6
с переменой выигрышей — 6
с настойчивостью проигрышей — 6
с переменой проигрышей — 6
Так что как бы не дёргался ведомый, настойчиво или переменчиво, на победу это тут не влияет.
Теперь по-другому.
Если игрок сразу угадал, то настойчивость не роялит — 6 выигрышей, 6 проигрышей
Если игрок сразу промахнулся, то настойчивость опять не роялит — 6 выигрышей, 6 проигрышей.
Как ни глянь, на толк от второго выбора не повлияло ни то, что он сначала угадал или промахнулся, ни то, что он настойчив или переменчив.
Интереснее посмотреть зависимость «с переменой» и отдельно «с настойчивостью»
Я ровно это и написал выше.
Настойчивость — 6 выигрышей и 6 проигрышей.
Переменчивость — 6 выигрышей и 6 проигрышей.
Хм, над графиком придётся подумать — что в нём не так. Вернее, понятно в целом что там не так — общая вероятность отвязана от предыдущего выбора (в комментариях к прошлой статье, которая про голубей, это много раз на примерах поясняли; ну то есть это как бы ты взял и забыл какая дверь была у тебя до этого и очнулся когда ведущий открыл свою дверь и перед тобой снова две неизвестные двери). Но как это на графике отразиться должно было, не соображу пока.
upd по сути надо расписать на каждой плашке просто удельную вероятность и посмотреть как перенесётся она в конечные плашки и потом уже суммировать*, у меня нет технической возможности пока просто.
* (т.к. вероятности этих плашек неравны, конечно, в этом главная суть парадокса)
(Хотя точнее оказывается, что редакция становится новым документом с совсем новым URL, и я не знаю как долго там могут храниться анонимные доки. Но это мелочи).
Вот смотрите, ваш график как раз прекрасно иллюстрирует объяснение парадокса. Ваша ошибка в том, что вы считаете только конечные точки, но вы не оцениваете относительную вероятность их наступления. Вы заметили же сами, что некоторые ветки делятся на две части в момент выбора ведущего, а некоторые нет? А делятся они у вас только в том случае, когда человек сразу выбрал правильную дверь, т.е. верхний прямоугольник (сразу выбрал правильную он с вероятностью 1/3, это очевидно всем). И ведущий открывает любую случайную, ни там ни там нет приза (начальная вероятность угадать от этого же не изменилась, это понятно). А в случае если игрок выбрал неправильную (Б — 1/3 + В — 1/3) ведущий тоже имеет две двери и две как бы ветки, НО он не может открыть одну, у него нет выбора и он открывает определённую. Но изначальная вероятность угадать (при первом выборе) тоже конечно от этого не изменилась.
В итоге вероятности 1/3 имеют весь каждый прямоугольник целиком, но не каждые ваши пары угадал — не угадал.
Другими словами: мы на картинке отчётливо видим, что ТОЛЬКО ЕСЛИ он сразу угадал (верхняя ветка), то стратегия «сменить дверь» приводит к проигрышу. В двух остальных случаях из трёх смена двери приводит к гарантированному выигрышу. Это происходит благодаря подсказке ведущего, который вынужден убрать НЕПРАВИЛЬНЫЙ выбор в этих двух случаях из трёх.
Итого ещё раз: имея стратегию «сменить дверь» в двух случаях из трёх, изначально равнозначных, мы получаем выигрыш. И только в одном случае из трёх мы проигрываем — если мы изначально угадали.
До меня дошло в такой формулировке:
«В 66.7% случаев игрок в первый раз не угадает, поэтому в 66.7% случаев стратегия смены двери даст победу.
В 33.3% случаев игрок в первый раз угадает, поэтому в 33.3% случаев стратегия настоять на первой двери даст победу»
И Varim брутфорснул статистику к моменту.
правки к карте:
- три ветви не имеют смысла, т.к. А, Б и В — это просто условные обозначения. Можно (и в дальнейших комментариях и буду) рассмотреть только первую ветвь (приз за А), а остальные ветви просто ее дублируют со сменой порядка букв.
- т.к. вы в карте описали все возможные ветви, то вы свели результат к паре последних решений (либо сменит либо не сменит дверь). При таком подходе конечно будет 50/50, но ведь в этом и есть парадокс — большинство людей при расчете вероятности рассматривает только второй раунд выбора, не учитывая выбор первого раунда.
- правильная версия карты https://app.mindmup.com/map/_free/51eacb900d7b11e7b5572126c8e936a2
как видим тут дерево делится на две ветви (выбор правильной двери и выбор неправильной двери), во втором раунде у нас те же 50/50 выиграть или проиграть, но (!) в верхней ветви мы при смене двери проигрываем (!), а в нижней ветви при смене двери выигрываем (!). Но шансов попасть в нижнюю ветвь у нас больше (2/3), а значит и вероятность при смене двери выиграть тоже 2/3.
>> https://app.mindmup.com/map/_free/5f6790a00d3511e783074174897cf52a
вы там правильно нарисовали пространство событий, но неправильно посчитали вероятности.
Смотрите:
путь к узлу «старт» -> «приз за А» -> «игрок выбрал А» -> «ведущий оставил АБ» имеет вероятность 1/3 * 1/3 * 1/2 А путь к узлу «старт» -> «приз за А» -> «игрок выбрал Б» -> «ведущий оставил АБ» имеет вероятность 1/3 * 1/3 — в два раза выше!
У вас в по путях через «игрок выбрал» содержится больше ветвлений (ибо ведущий может оставить как АБ, так и АВ), в итоге получившиеся листья — последние узлы будут входить с меньшим весом нежели листья от путей через «игрок Б» и «игрок выбрал В» — там нет ветвления в момент выбора ведущего — все однозначно
Все равно эту задача сводится к одному выбору: игроку все равно покажут дверь без выигрыша. Поэтому задача сводится к выбору, за какой из двух дверей остался выигрыш? И вероятность все равно стремится к 0,5. Да, как написали до меня, если увеличить количество дверей до 100, 100 и т.д. то выбор очевиден, попасть сразу в верный вариант крайне маловероятно, но в варианте с 3 дверьми все равно итог сводится к варианту с 2 дверьми(какая, однако, тавтология)
Но и системе 1 большое количество испытаний позволяет принимать правильные решения.
Вообще-то, не всегда. Статья уже была здесь на эту тему: https://habrahabr.ru/post/313452/ В том числе там сказано, что немного людей за 30 дней заметили закономерность, сильно меньше, чем число голубей, заметивших закономерность за те же 30 дней.
случайно переключился раз: 499840
случайно не переключился раз 500160
Удачных случайных переключений 334295
Удачных случайных не пеерключений 167353
Удачно настойчиво удержался от смены 332898
Удачно настойчиво менял дверь 667102
using System;
namespace MontyHallProblem
{
class Doors
{
private readonly Random _hasPrizeRandom = new Random();
private readonly Random _openedByMontyHallRandom = new Random();
public int NumberOfDoorWhichHasPrize { get; private set; }
public int NumberOfDoorWhichChosenByPlayer { get; set; }
public int NumberOfDoorWhichOpenedByMontyHall { get; private set; }
public void Init()
{
NumberOfDoorWhichHasPrize = _hasPrizeRandom.Next(1, 4); // 1 - 3
}
public void MontyHallOpens()
{
int randomShift = _openedByMontyHallRandom.Next(1, 3); // offset 1 or 2
if (NumberOfDoorWhichHasPrize == NumberOfDoorWhichChosenByPlayer)
{
NumberOfDoorWhichOpenedByMontyHall = (NumberOfDoorWhichHasPrize + randomShift + 2) % 3 + 1;
//1 2 3
//2 2 1
//3 2 2
//1 1 2
//2 1 3
//3 1 1
}
else
{
NumberOfDoorWhichOpenedByMontyHall = 6 - NumberOfDoorWhichHasPrize - NumberOfDoorWhichChosenByPlayer; // room 1+2+3 = 6
//1 2 3 = 6
//1 3 2
//2 1 3
//2 3 1
//3 2 1
//3 1 2
}
}
}
class Player
{
private readonly Random _choiceRandom = new Random();
private readonly Random _randomStickOrSwitch = new Random();
int _countRandomStickOrSwitch;
int _countRandomMustSwitch;
int _countRandomMustNotSwitch;
int _sumRandomStickOrSwitchWhenNoSwitch;
int _sumRandomStickOrSwitchWhenYesSwitch;
int _sumStick;
int _sumSwitch;
public void Choice(Doors doors)
{
doors.NumberOfDoorWhichChosenByPlayer = _choiceRandom.Next(1, 4);
}
public void CalculateRandomStickOrSwitch(Doors doors)
{
bool mustRandomSwitch = _randomStickOrSwitch.Next(0, 2) == 1; // 0 or 1
_countRandomStickOrSwitch++;
if (mustRandomSwitch)
{
_countRandomMustSwitch++;
if (doors.NumberOfDoorWhichChosenByPlayer != doors.NumberOfDoorWhichHasPrize)
{
_sumRandomStickOrSwitchWhenYesSwitch++;
}
}
else
{
_countRandomMustNotSwitch++;
if (doors.NumberOfDoorWhichChosenByPlayer == doors.NumberOfDoorWhichHasPrize)
{
_sumRandomStickOrSwitchWhenNoSwitch++;
}
}
}
public void CalculateStick(Doors doors)
{
if (doors.NumberOfDoorWhichChosenByPlayer == doors.NumberOfDoorWhichHasPrize)
{
_sumStick++;
}
}
public void CalculateSwitch(Doors doors)
{
if (doors.NumberOfDoorWhichChosenByPlayer != doors.NumberOfDoorWhichHasPrize)
{
_sumSwitch++;
}
}
public void PrintResult()
{
Console.WriteLine($"циклов {_countRandomStickOrSwitch}");
Console.WriteLine($"случайно переключился раз: {_countRandomMustSwitch}");
Console.WriteLine($"случайно не переключился раз {_countRandomMustNotSwitch}");
Console.WriteLine($"Удачных случайных переключений {_sumRandomStickOrSwitchWhenYesSwitch}");
Console.WriteLine($"Удачных случайных не пеерключений {_sumRandomStickOrSwitchWhenNoSwitch}");
Console.WriteLine($"Удачно настойчиво удержался от смены {_sumStick}");
Console.WriteLine($"Удачно настойчиво менял дверь {_sumSwitch}");
}
}
class Program
{
static void Main()
{
Player player = new Player();
for (int i = 0; i < 1_000_000; i++)
{
Doors doors = new Doors();
doors.Init();
player.Choice(doors);
doors.MontyHallOpens();
player.CalculateRandomStickOrSwitch(doors);
player.CalculateStick(doors);
player.CalculateSwitch(doors);
if (i % 100_000 == 0)
{
Console.WriteLine(i);
}
}
player.PrintResult();
}
}
}
Если вы меняете выбор двери после действий ведущего И если изначально выбрали проигрышную дверь, то вы выигрываете (и наоборот). А шанс изначально выбрать проигрышную дверь — 2/3.
А хохма, которую мало кто осознаёт — в том, что ведущий своими действиями изменяет ситуацию, передавая вам один бит информации — открывая дверь, он передаёт вам информацию о том, что "за конкретно этой дверью приза нет".
Вероятность угадать, где приз равна произведению вероятности, что игрок выберет одну из дверей, на вероятность, что приз за этой дверью.
"Ладно, раз не хотите по-плохому — помните: по-хорошему будет хуже."
Если Вы стали разбирать условные вероятности ("если приз за дверью Х И игрок выбрал дверь Y"), то их просуммировать нужно для всех случаев, а Вы это забыли сделать. Что ожидаемо приводит к тому, что я с самого начала написал.
Если объяснять на пальцах, то мы имеем 9 равновероятных ситуаций (в предположении, что игрок подбрасывает трёхстороннюю монетку):
- Приз за дверью 1, игрок выбрал дверь 1 => выигрыш
- Приз за дверью 1, игрок выбрал дверь 2
- Приз за дверью 1, игрок выбрал дверь 3
- Приз за дверью 1, игрок выбрал дверь 1
- Приз за дверью 2, игрок выбрал дверь 2 => выигрыш
- Приз за дверью 2, игрок выбрал дверь 3
- Приз за дверью 2, игрок выбрал дверь 1
- Приз за дверью 3, игрок выбрал дверь 2
- Приз за дверью 3, игрок выбрал дверь 3 => выигрыш
Итого вероятность "угадать дверь с первого раза" = 1/9 + 1/9 + 1/9 = 1/3, а не угадать — соответственно 2/3.
Снова про Монти Холла или статистика как коллективная интуиция