про задачу Монти Холла и плохой код

Всем привет.

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

Задача состоит в том, что перед вам три двери, за одной скрыт приз. Вы выбираете открыть одну из дверей. Далее ведущий открывает какую-то другую дверь, за которой пустота. Далее вы можете выбрать другую дверь или остаться.

Переметнувшиеся удивительным образом имеют большие шансы на успех.

Честно скажу я сегодня туплю по полной программе, во-первых, я не совсем понял почему у переметнувшихся шанс больше, наилучшее объяснение, что если бы дверей была 1000 и ведущий убрал бы 900 дверей, дальше там пошла более сложная стратегия, когда ведущий пытается запутать, а игрок обязательно выиграть, в эту часть я уже не стал погружаться, но она нам не нужна. Во-вторых, и в симуляции, что-то получилось не совсем правильно, т.е. вероятность должна быть 33,3% у стойких и 66,6% у переметнувшихся, и я пока не разобрался, поэтому публикую код, если кто-то заметит ошибку, буду очень признателен. У меня же получается 38% и 62%. Ссылка на симуляцию.

nmb += 1;

door_chk = Math.round(2*Math.random(), 0); //Закладываем приз
door[door_chk] = 1; //массив просто так создал в итоге не использовал

door_wish = Math.round(2*Math.random(), 0); //Выбираем случайным образом какую дверь открыть

while (bln==false) { //цикл пока условия не выполнится

    door_host = Math.round(2*Math.random(), 0); //случайным образом ведущий открывает дверь 
    if ((door_host!=door_chk)&&(door_host!=door_wish)) bln = true; //Проверяем, что это не которую пожелали и не которая где лежит приз

    } // А это вообще зачем мне надо???

if (door_wish==door_chk) win_stay += 1; else win_change += 1; //если дверь совпала с изначальным желанием значит выиграл который стоит на своем, в обратном случае выиграл переменивший желание

document.all.txt1.innerText = 'Prize in - ' + (door_chk+1) + ', DOORS Massive - ' + door;
document.all.txt2.innerText = 'Door wish to open - ' + (door_wish+1);
document.all.txt3.innerText = 'Door host open - ' + (door_host+1);

document.all.txt4.innerText = "WIN stay - " + win_stay + ", WIN change - " + win_change + ", games total - " + nmb + ", the stay won " + (door_wish==door_chk);

document.all.txt5.innerText = "WIN stay rate - " + win_stay/nmb + ", win change rate - " + win_change/nmb;

bln = false;
door[door_chk]=0;

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *