Действительно ли это - хорошее или плохое 'моделирование' для Monty Hall? Каким образом?

Я предпочитаю использовать регулярные выражения:

Regex.Replace("1112224444", @"(\d{3})(\d{3})(\d{4})", "$1-$2-$3");
17
задан Robert Harvey 17 December 2013 в 18:31
поделиться

4 ответа

Ваше решение в порядке, но если вы хотите более строгое моделирование поставленной проблемы (и несколько более качественный Python ;-), попробуйте:

import random

iterations = 100000

doors = ["goat"] * 2 + ["car"]
change_wins = 0
change_loses = 0

for i in xrange(iterations):
    random.shuffle(doors)
    # you pick door n:
    n = random.randrange(3)
    # monty picks door k, k!=n and doors[k]!="car"
    sequence = range(3)
    random.shuffle(sequence)
    for k in sequence:
        if k == n or doors[k] == "car":
            continue
    # now if you change, you lose iff doors[n]=="car"
    if doors[n] == "car":
        change_loses += 1
    else:
        change_wins += 1

print "Changing has %s wins and %s losses" % (change_wins, change_loses)
perc = (100.0 * change_wins) / (change_wins + change_loses)
print "IOW, by changing you win %.1f%% of the time" % perc

типичный результат:

Changing has 66721 wins and 33279 losses
IOW, by changing you win 66.7% of the time
37
ответ дан 30 November 2019 в 10:39
поделиться

Монти никогда не открывает дверь с машиной - в этом весь смысл шоу (он не ваш друг и знает, что находится за каждой дверью)

0
ответ дан 30 November 2019 в 10:39
поделиться

Вы упомянули, что все варианты выбора жестко запрограммированы. Но если вы присмотритесь, вы заметите, что то, что вы считаете «выбором», на самом деле вовсе не является выбором. Решение Монти не теряет общности, поскольку он всегда выбирает дверь, за которой стоит коза. Ваш обмен всегда определяется тем, что выбирает Монти, и поскольку «выбор» Монти на самом деле не был выбором, то и ваш выбор тоже. Ваше моделирование дает правильные результаты ..

2
ответ дан 30 November 2019 в 10:39
поделиться

Мне нравится что-то в этом роде.


#!/usr/bin/python                                                                                                            
import random
CAR   = 1
GOAT  = 0

def one_trial( doors, switch=False ):
    """One trial of the Monty Hall contest."""

    random.shuffle( doors )
    first_choice = doors.pop( )
    if switch==False:
        return first_choice
    elif doors.__contains__(CAR):
        return CAR
    else:
        return GOAT


def n_trials( switch=False, n=10 ):
    """Play the game N times and return some stats."""
    wins = 0
    for n in xrange(n):
        doors = [CAR, GOAT, GOAT]
        wins += one_trial( doors, switch=switch )

    print "won:", wins, "lost:", (n-wins), "avg:", (float(wins)/float(n))


if __name__=="__main__":
    import sys
    n_trials( switch=eval(sys.argv[1]), n=int(sys.argv[2]) )

$ ./montyhall.py True 10000
won: 6744 lost: 3255 avg: 0.674467446745
2
ответ дан 30 November 2019 в 10:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: