Про парадокс Монти Холла | Блог python программиста
Изображение гика

Блог питониста

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

25 апреля 2019 г.

В теории вероятностей есть забавный парадокс - парадокс Монти Холла. В этом посте хочу немного с ним разобраться, потому что с первого взгляда он кажется странным и контринтуитивным, поэтому и считается парадоксом. Хотя, по сути, эта задача - не парадокс, потому что не имеет противоречия.

Проблема описывается так: есть три двери, за одной из них автомобиль, за двумя другими - козлы. И мы не знаем где что находится, нам надо угадать, где автомобиль:

18_1.jpeg

И мы случайным образом выбираем какую-то дверь в первый раз, например первую:

18_2.jpeg

После этого ведущий, который в отличие от нас знает где что расположено, открывает какую-нибудь из невыбранных нами дверей с козлом (в данном случае ему остаётся открыть вторую дверь):

18_3.jpeg

И затем ведущий нас спрашивает о том, будем ли мы менять свой выбор. То есть в данном случае спрашивает о том, оставляем ли мы выбранной первую дверь или меняем решение, выбирая третью. Чтобы ответить на этот вопрос, надо понять в каком случае вероятность выиграть больше. Есть два варианта развития событий:

  1. Не меням первоначальный выбор
  2. Меняем первоначальный выбор

Очевидно, что если не менять свое решение, то вероятность выиграть - это вероятность выбрать один автомобиль из трех вариантов:

$$P\left\{ выиграть,\spaceне\spaceменяя\spaceвыбор\right\} = \frac{1}{3}$$

Если же мы меняем свой выбор, то мы выиграем только в том случае, если с первой попытки выбрали козла. Выбрать козла можно двумя способами из трех. То есть в этом случае мы выиграем с вероятностью:

$$P\left\{ выиграть,\spaceменяя\spaceвыбор\right\} = \frac{2}{3}$$

Теперь проверим это, используя python:

 1 # -*- coding: utf-8 -*-
 2 import random
 3 
 4 
 5 def monty_hall_without_change(choices):
 6     # в начале каждой попытки случайно перемешаем массив
 7     random.shuffle(choices)
 8     return choices[random.randrange(len(choices))]
 9 
10 
11 def monty_hall_with_change(choices):
12     # в начале каждой попытки случайно перемешаем массив
13     random.shuffle(choices)
14     # первый выбор
15     first_choice = random.randrange(len(choices))
16     # ведущий открывает дверь с козлом
17     for i in range(len(choices)):
18         if i != first_choice and choices[i] == 'к':
19             host_choice = i
20             break
21     # делаем второй выбор, меняя первое решение
22     for i in range(len(choices)):
23         if i != first_choice and i != host_choice:
24             return choices[i]
25 
26 
27 # к - козел, а - автомобиль
28 choices = ['к', 'к', 'а']
29 # просто калое-либо большое число (количество опытов)
30 N = 100000
31 
32 # проверяем вариант с неизменным выбором
33 win_count = 0
34 for _ in range(N):
35     result = monty_hall_without_change(choices)
36     if result == 'а':
37         win_count += 1
38 # вероятность выиграть - частота выигранных опытов
39 print(win_count/N)
40 
41 # проверяем вариант с изменением выбора
42 win_count = 0
43 for _ in range(N):
44     result = monty_hall_with_change(choices)
45     if result == 'а':
46         win_count += 1
47 # вероятность выиграть - частота выигранных опытов
48 print(win_count/N)

И этот скрипт даст следующий результат:

alexey@vostro:~/projects/blog_materials$ python3 monty_hall.py 
0.33136
0.6671

Что совпадает с теоретическими соображениями. Если вам когда-либо доведется участвовать в подобной викторине, то меняйте свой выбор, ведь вы тогда в 2 раза увеличите вероятность выиграть приз.

Если вам понравился пост, можете поделиться им в соцсетях: