Моделирование парадокса Монти Холла на python
В фильме «21» режисёра Robert Luketic упоминается задача теории вероятности:
Представьте, что вы стали участником игры, в которой вам нужно выбрать одну из трех дверей. За одной из дверей находится автомобиль, за двумя другими дверями — козы. Вы выбираете одну из дверей, например, номер 1, после этого ведущий, который знает, где находится автомобиль, а где — козы, открывает одну из оставшихся дверей, например, номер 3, за которой находится коза. После этого он спрашивает вас, не желаете ли вы изменить свой выбор и выбрать дверь номер 2. Увеличатся ли ваши шансы выиграть автомобиль, если вы примете предложение ведущего и измените свой выбор ?
Правильным решением этой задачи является ответ: да, шансы выиграть автомобиль увеличиваются в два раза, если игрок будет следовать совету ведущего и изменит свой первоначальный выбор.
Парадокс Монти Холла — одна из известных задач теории вероятностей, решение которой, на первый взгляд, противоречит здравому смыслу. Задача формулируется как описание гипотетической игры, основанной на американском телешоу «Let’s Make a Deal», и названа в честь ведущего этой передачи. Варианты решения и ключи к пониманию достаточно подробно описаны в Википедии.
Мы же попробуем написать программу, которая бы загадывала двери с машинами и козами, случайно выбирала бы одну из дверей и подсчитывала проигрыши и выигрыши.
Эту задачу можно свести к более простой задаче, и её моделирование будет очень простым: ведущий случайно загадывает номер двери, которая выигрывает — 1,2 или 3. Мы случайно выбираем дверь, то есть так же загадываем номер 1,2 или 3. Ведущий открывает одну, точно проигрывающую дверь, и у нас остаются две двери и две возможности: менять выбор или не менять:
- если мы не меняем выбор, то не зависимо от того, какую дверь открыл ведущий, мы выигрываем только тогда, когда сразу и точно угадали дверь. Другими словами, мы выиграли — если загаданный номер двери ведущего совпадает с номером двери, которую выбрали мы.
- если же мы меняем выбор, то всё становится наоборот: мы проигрываем, если сразу угадали дверь, но поменяли её. И выигрываем, если сразу не угадали дверь, но изменили её на дверь ведущего.
Получается, что для подсчёта выигрышей по первой стратегии достаточно считать только случаи, когда мы точно угадали, загаданный ведущим, номер двери. А выигрыши по второй стратегии — это проирыши по первой. Вот и реализация этого алгоритма на python:
#!/usr/bin/python -Ou
#
# Written by kocmuk.ru, 2008
#
import random
num = 1000 # количество игр, которое мы хотим сыграть
win = 0 # начальное значение выирышей, которых мы добъёмся, если не будем менять выбор
for i in range(1, num): # играем num игр
if random.randint(1,3) == random.randint(1,3): # в случае, если мы угадали сразу,
win +=1 # увеличиваем количество выигрышей на 1
print "Я не менял выбора и выиграл:", win, "игр" # выигрыши по первой стратегии
print "Я менял выбор и выиграл:", num-win, "игр" # проигрыши по первой стратегии - это выигрыши по второй
Результаты игр у меня получились примерно такие: я не менял решение и выиграл 348 машин из 1000, а если бы я менял решение, выиграл бы 652 машин из 1000. Теория подтверждается экспериментом: шансы выиграть автомобиль увеличиваются в два раза, если игрок будет следовать совету ведущего и изменит свой первоначальный выбор. Попробуйте и вы поиграть и решить для себя: менять или не менять выбор, если у вас будет такая возможность. Удачи! :)









Оставить комментарий