Pull to refresh

Comments 31

О, Монти Холл снова… ждём в комментариях самоуверенных непониманцев математики)
Набегут, потому что в данной задаче критична точность формулировки (см. «Другое поведение ведущего» в соотв. разделе википедии). Там далеко не всегда смена двери дает выигрыш.
Как-то построил дерево всех вариантов:
Слой 1: где приз
Слой 2: что выбрал игрок в первый раз
Слой 3: какую дверь открыл ведущий
Слой 4: что выбрал игрок во второй раз
У меня получилось, что суммарное количество призов по веткам «игрок не меняет дверь» оказалось равным суммарному количеству призов по веткам «игрок меняет дверь».
Что-то я в этом парадоксе не понимаю…

Ну и первое объяснение.
В первом раунде я с вероятностью 2/3 выбираю "дверь без приза" (таких дверей две из трех по условию задачи). После того как ведущий открывает одну "дверь без приза", передо мной остается две двери, одну из которых я выбрал, и она с вероятностью 2/3 "дверь без приза", и соответственно вторая, которая с вероятностью 2/3 "дверь с призом". Соответственно шансов выиграть при смене двери больше.

Самое простое объяснение парадокса — это увеличение дверей до 100 (1000 и т.д.), где после после вашего выбора открывают 98 дверей без приза и у вас остаётся две двери — выбранная вами изначально и ещё одна закрытая.

Какова вероятность того, что человек с первого раз верно угадал дверь?
Значит, что-то неправильно построили. Можете поискать 100500 топиков здесь же, где в комментариях 1001 способом объясняется, почему смена двери повышает шансы.
Покажите дерево ваше?
Это было несколько HDD назад…

Если заново рисовать, то примерно так:
https://app.mindmup.com/map/_free/5f6790a00d3511e783074174897cf52a

Итого:
с настойчивостью выигрышей — 6
с переменой выигрышей — 6
с настойчивостью проигрышей — 6
с переменой проигрышей — 6

Так что как бы не дёргался ведомый, настойчиво или переменчиво, на победу это тут не влияет.

Теперь по-другому.
Если игрок сразу угадал, то настойчивость не роялит — 6 выигрышей, 6 проигрышей
Если игрок сразу промахнулся, то настойчивость опять не роялит — 6 выигрышей, 6 проигрышей.

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

Интереснее посмотреть зависимость «с переменой» и отдельно «с настойчивостью»
А вы на рисунке не смогли пальцем посчитать?
Я ровно это и написал выше.
Настойчивость — 6 выигрышей и 6 проигрышей.
Переменчивость — 6 выигрышей и 6 проигрышей.

Посчитал перед тем как написать комментарий.


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


Наример

image


Здесь "Ведущий оставил АБ" и "Ведущий оставил БВ" имеют один и тот же исход, нельзя делить эту ветку на два события, как у Вас.

Спасибо что постарались нарисовать)
Хм, над графиком придётся подумать — что в нём не так. Вернее, понятно в целом что там не так — общая вероятность отвязана от предыдущего выбора (в комментариях к прошлой статье, которая про голубей, это много раз на примерах поясняли; ну то есть это как бы ты взял и забыл какая дверь была у тебя до этого и очнулся когда ведущий открыл свою дверь и перед тобой снова две неизвестные двери). Но как это на графике отразиться должно было, не соображу пока.

upd по сути надо расписать на каждой плашке просто удельную вероятность и посмотреть как перенесётся она в конечные плашки и потом уже суммировать*, у меня нет технической возможности пока просто.
* (т.к. вероятности этих плашек неравны, конечно, в этом главная суть парадокса)
На этом сайте берёте и меняете текст — документ анонимный и открыт для редактирования.

(Хотя точнее оказывается, что редакция становится новым документом с совсем новым URL, и я не знаю как долго там могут храниться анонимные доки. Но это мелочи).
Вероятности единичных плашек как раз все равны внутри своего уровня. Она станет разная, если посчитать типы плашек в пределах одного уровня (например, 50 плашек «синий» и 200 «чёрный» дадут 20% и 80% соответственно).
Да у меня с устройства были проблемы с редактированием) Сейчас в общем лучше растром тоже решил нарисовать и пояснить (остальные заретушированные деревья ниже «Приз за Б» и «Приз за В» совершенно аналогичные, только буквы меняются):

Картинка



Вот смотрите, ваш график как раз прекрасно иллюстрирует объяснение парадокса. Ваша ошибка в том, что вы считаете только конечные точки, но вы не оцениваете относительную вероятность их наступления. Вы заметили же сами, что некоторые ветки делятся на две части в момент выбора ведущего, а некоторые нет? А делятся они у вас только в том случае, когда человек сразу выбрал правильную дверь, т.е. верхний прямоугольник (сразу выбрал правильную он с вероятностью 1/3, это очевидно всем). И ведущий открывает любую случайную, ни там ни там нет приза (начальная вероятность угадать от этого же не изменилась, это понятно). А в случае если игрок выбрал неправильную (Б — 1/3 + В — 1/3) ведущий тоже имеет две двери и две как бы ветки, НО он не может открыть одну, у него нет выбора и он открывает определённую. Но изначальная вероятность угадать (при первом выборе) тоже конечно от этого не изменилась.

В итоге вероятности 1/3 имеют весь каждый прямоугольник целиком, но не каждые ваши пары угадал — не угадал.

Другими словами: мы на картинке отчётливо видим, что ТОЛЬКО ЕСЛИ он сразу угадал (верхняя ветка), то стратегия «сменить дверь» приводит к проигрышу. В двух остальных случаях из трёх смена двери приводит к гарантированному выигрышу. Это происходит благодаря подсказке ведущего, который вынужден убрать НЕПРАВИЛЬНЫЙ выбор в этих двух случаях из трёх.

Итого ещё раз: имея стратегию «сменить дверь» в двух случаях из трёх, изначально равнозначных, мы получаем выигрыш. И только в одном случае из трёх мы проигрываем — если мы изначально угадали.
Спасибо barker, zelenin!
До меня дошло в такой формулировке:
«В 66.7% случаев игрок в первый раз не угадает, поэтому в 66.7% случаев стратегия смены двери даст победу.
В 33.3% случаев игрок в первый раз угадает, поэтому в 33.3% случаев стратегия настоять на первой двери даст победу»
И Varim брутфорснул статистику к моменту.
Приятно, когда собеседник дискутирует не ради спора, а ради истины)
(Извиняюсь за долгий ответ)

правки к карте:


  • три ветви не имеют смысла, т.к. А, Б и В — это просто условные обозначения. Можно (и в дальнейших комментариях и буду) рассмотреть только первую ветвь (приз за А), а остальные ветви просто ее дублируют со сменой порядка букв.
  • т.к. вы в карте описали все возможные ветви, то вы свели результат к паре последних решений (либо сменит либо не сменит дверь). При таком подходе конечно будет 50/50, но ведь в этом и есть парадокс — большинство людей при расчете вероятности рассматривает только второй раунд выбора, не учитывая выбор первого раунда.
  • правильная версия карты https://app.mindmup.com/map/_free/51eacb900d7b11e7b5572126c8e936a2
    как видим тут дерево делится на две ветви (выбор правильной двери и выбор неправильной двери), во втором раунде у нас те же 50/50 выиграть или проиграть, но (!) в верхней ветви мы при смене двери проигрываем (!), а в нижней ветви при смене двери выигрываем (!). Но шансов попасть в нижнюю ветвь у нас больше (2/3), а значит и вероятность при смене двери выиграть тоже 2/3.
У вас исходы не равновероятностные. Настаивать надо, когда игрок выбрал правильную дверь (1/3), а менять когда неправильную (2/3). Ваша визуализация отлично это показывает.

image
>> Если заново рисовать, то примерно так:
>> https://app.mindmup.com/map/_free/5f6790a00d3511e783074174897cf52a
вы там правильно нарисовали пространство событий, но неправильно посчитали вероятности.
Смотрите:
путь к узлу «старт» -> «приз за А» -> «игрок выбрал А» -> «ведущий оставил АБ» имеет вероятность 1/3 * 1/3 * 1/2 А путь к узлу «старт» -> «приз за А» -> «игрок выбрал Б» -> «ведущий оставил АБ» имеет вероятность 1/3 * 1/3 — в два раза выше!

У вас в по путях через «игрок выбрал» содержится больше ветвлений (ибо ведущий может оставить как АБ, так и АВ), в итоге получившиеся листья — последние узлы будут входить с меньшим весом нежели листья от путей через «игрок Б» и «игрок выбрал В» — там нет ветвления в момент выбора ведущего — все однозначно

Вспомните анекдот про блондинку: «Какова вероятность того, что вы на улице встретите динозавра? Блондинка отвечает: 50/50. Почему? Ну либо встречу, либо не встречу».
Все равно эту задача сводится к одному выбору: игроку все равно покажут дверь без выигрыша. Поэтому задача сводится к выбору, за какой из двух дверей остался выигрыш? И вероятность все равно стремится к 0,5. Да, как написали до меня, если увеличить количество дверей до 100, 100 и т.д. то выбор очевиден, попасть сразу в верный вариант крайне маловероятно, но в варианте с 3 дверьми все равно итог сводится к варианту с 2 дверьми(какая, однако, тавтология)
С изначальной сотней дверей тоже сводится к двум. Фокус в чём-то другом.
Фокус в том, что надо вовремя переходить от статистике к логике. После того, как одно из событий «приз за дверью» произошло, открывание/закрывание дверей на его вероятность уже не влияет Поэтому вероятность, что приз не за выбранной дверью, а за другой не зависит от того, открыта ли одна из этих дверей, и равна 2/3.
Но и системе 1 большое количество испытаний позволяет принимать правильные решения.

Вообще-то, не всегда. Статья уже была здесь на эту тему: https://habrahabr.ru/post/313452/ В том числе там сказано, что немного людей за 30 дней заметили закономерность, сильно меньше, чем число голубей, заметивших закономерность за те же 30 дней.
циклов 1000000
случайно переключился раз: 499840
случайно не переключился раз 500160
Удачных случайных переключений 334295
Удачных случайных не пеерключений 167353
Удачно настойчиво удержался от смены 332898
Удачно настойчиво менял дверь 667102

C# code, console application
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.


А хохма, которую мало кто осознаёт — в том, что ведущий своими действиями изменяет ситуацию, передавая вам один бит информации — открывая дверь, он передаёт вам информацию о том, что "за конкретно этой дверью приза нет".

«А шанс изначально выбрать проигрышную дверь — 2/3». Почему? Вероятность угадать, где приз равна произведению вероятности, что игрок выберет одну из дверей, на вероятность, что приз за этой дверью. Вторая из них по условию равна 1/3. Следовательно, если произведение равно 2/3, то первая из них равна 2/9. Ниоткуда не следует, что игрок выбирает дверь именно с этой вероятностью.
Вероятность угадать, где приз равна произведению вероятности, что игрок выберет одну из дверей, на вероятность, что приз за этой дверью.

"Ладно, раз не хотите по-плохому — помните: по-хорошему будет хуже."


Если Вы стали разбирать условные вероятности ("если приз за дверью Х И игрок выбрал дверь 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.

Sign up to leave a comment.

Articles