Thursday, February 5, 2015

Повышаем интуицию с Python

Наткнулся в сети на интересную задачку:
Предположим, вы являетесь участником "Поля чудес". Выпал приз, Якубович предлагает выбрать один из трех ящиков, в одном из которых деньги. Предположим, вы выбрали первый ящик. Ведущий открывает один из ящиков, пусть третий — он пустой. Ведущий предлагает передумать и выбрать второй ящик. Измените ли вы свое решение?
Предлагаю поразмыслить над ответом, а потом будет немного кода на Python.

Для решения воспользуемся методом "Монте-Карло". Прогоним симуляцию достаточно большое количество раз, чтобы получить примерные вероятности выйгрыша в обоих случаях.
import random
 
be_cool = be_smart = 0
 
for i in range(100000):
    boxes = random.sample([0, 0, 1], 3)
 
    # первоначальный выбор игрока
    initial_choice = random.choice(range(3))
 
    # Якубович выбирает пустой ящик..
    yakubovichs_choice = next(b for b, p in enumerate(boxes)
                              if b != initial_choice and not p)
 
    # приз в ящике, выбранном первым
    if boxes[initial_choice]:
        be_cool += 1
    # приз в другом ящике
    elif boxes[next(i for i in range(3) if i not in
               [initial_choice, yakubovichs_choice])]:
        be_smart += 1
 
print(be_cool, be_smart, "{:.1f}".format(be_smart/be_cool))
Скармливаем сей код интерпретатору, и получаем примерную разброску по результатам:
33435 66565 2.0
Очевидно, при выборе второго ящика вероятность выйгрыша увеличивается в 2 раза.

No comments:

Post a Comment