Парадокс Монти Холла

Aug 31, 2010 18:07

"Представьте, что вы стали участником игры, в которой вам нужно выбрать одну из трех закрытых дверей. За одной из дверей находится автомобиль (car), за двумя другими дверями - козы (goat A, goat B). Вы выбираете одну из дверей но её не открываете, например, номер 1. После этого модератор, который знает, где находится автомобиль, а где - козы, открывает одну из оставшихся двух невыбранных дверей, например, номер 3, за которой обязательно находится коза (модератор никогда не открывает дверь за которой автомобиль). После этого модератор спрашивает вас, не желаете ли вы изменить свой выбор и выбрать оставшуюся никем невыбранной дверь (в нашем примере, номер 2). Увеличатся ли ваши шансы выиграть автомобиль, если вы примете предложение ведущего и измените свой выбор?"

Чисто интуитивно сложно сразу понять как это так, что смена двери удваивает вероятность на выигрыш, поэтому вот написал простейшую симуляцию, помогающую понять проблему а ниже дано полу-формальное разъяснение сути решения:

from random import shuffle, choice

cars = 0
goats= 0
iters= 100

for i in range(iters):
print '---------------------------------'
doors = ['goat A', 'goat B', 'car']
shuffle(doors)
moderator_door = 'car'
#Turn 1:
selected_door = choice(doors)
print selected_door
doors.remove(selected_door)
print 'You have selected a door with an unknown object'
#Turn 2:
while moderator_door == 'car':
moderator_door = choice(doors)
doors.remove(moderator_door)
print 'Moderator has opened a door with ', moderator_door
#Turn 3:
decision=raw_input('Wanna change your door? [yn]')
if decision=='y':
prise = doors[0]
print 'You have a door with ', prise
elif decision=='n':
prise = selected_door
print 'You have a door with ', prise
else:
prise = 'ERROR'
iters += 1
print 'ERROR:unknown command'
if prise == 'car':
cars += 1
elif prise != 'ERROR':
goats += 1
print '==============================='
print ' RESULTS '
print '==============================='
print 'Goats:', goats
print 'Cars :', cars

Если отвечать всегда согласием:
===============================
RESULTS
===============================
Goats: 35
Cars : 65
Если отвечать всегда отрицанием:
===============================
RESULTS
===============================
Goats: 66
Cars : 34

Как это работает? Ну, проблема легко объясняется байесовской формулой. Сперва обозначения:
x ------- номер двери (от 1 до 3)
M(x) ---- модератор открыл дверь x
G(x) ---- приз за дверью x

Изначально, мы считаем, что вероятность того, что приз за дверью x для всех дверей одинакова:
P(G(1))= 1/3
P(G(2))= 1/3
P(G(3))= 1/3
поэтому мы выбираем любую из дверей, например 1. Теперь модератор, зная, за какой из трёх дверей находится автомобиль, открывает одну из оставшихся дверей с козой, например это дверь 2.

За дверью 2 нет автомобиля, следовательно вероятность того, что модератор открыл дверь 2 если известно что за ней автомобиль, равна 0. (i)

Вероятность того, что модератор открыл дверь 2 если известно что за дверью 1 автомобиль, равна 1/2, т.к. модератор мог бы одинаково равновероятно открыть дверь 3 вместо двери 2. (j)

Вероятность того, что модератор открыл дверь 2 если известно что за дверью 3 автомобиль, равна 1, т.к. модератор не может открыть дверь за которой автомобиль. (k)

То есть, имеем:
P( M(2) | G(1) ) = 1/2 ...............(j)
P( M(2) | G(2) ) = 0..................(i)
P( M(2) | G(3) ) = 1..................(k)

Стоит ли нам поменять свой выбор и открыть дверь 3 вместо изначально выбранной двери 1? Т.е. мы хотим найти вероятность того, что приз за дверью 3 если модератор открыл дверь 2:
P( G(3) | M(2) )

Посчитаем эту вероятность П. Мы ищем вероятность того, что: модератор открыл дверь 2 если известно что за дверью 3 автомобиль И приз находится за дверью 3. Союз И подсказывает нам, что необходимо воспользоваться умножением. Поэтому, мы умножим вероятность того, что модератор открыл дверь 2 если известно что за дверью 3 автомобиль на изначальную вероятность того, что приз за дверью 3. Вероятность того, что модератор открыл дверь 2 если известно что за дверью 3 автомобиль равна 1, т.е. P(M(2)|G(3))=1. Изначальная вероятность того, что приз за дверью 3 равна 1/3, т.е. P(G(3))=1/3. Умножим их:
П = P(M(2)|G(3)) * P(G(3)) = 1 * 1/3 = 1/3

Полученное значение однако необходимо разделить на математическое ожидание, т.е. на среднее значение вероятности, с которой модератор открывает дверь 2. Среднее значение вычисляется просто. Для этого мы суммируем три вероятности i, j и k и делим их на 3, т.е.:

E[P(M(2)] = (P(M(2)|G(1)) + P(M(2)|G(2)) + P(M(2)|G(3))) / 3 = (1/2 + 0 + 1) / 3 = 1/2
Таким образом, модератор открывает дверь 2 со средней вероятностью 1/2.

Поэтому, вероятность того, что приз за дверью 3 если модератор открыл дверь 2 равна:
П/E[P(M(2)] = (1/3)/(1/2), то есть 2/3.

При этом, если мы решимся не менять наш выбор, автомобиль за дверью 1 будет стоять лишь с вероятностью 1/3 - проверяется это заменой P(M(2)|G(3)) на P(M(2)|G(1)) при вычислении П.

Таким образом, более рациональным будет ход по смене изначально выбранной двери.

math, python

Previous post Next post
Up