[Monty Hall-Problem](https://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%B3%E3%83%86%E3%82%A3%E3%83%BB% E3% 83% 9B% E3% 83% BC% E3% 83% AB% E5% 95% 8F% E9% A1% 8C) ist eine mysteriöse "subjektive Antwort und probabilistische Antwort stimmen nicht überein". Es ist ein Problem. Diesmal habe ich ein einfaches Simulationsprogramm für dieses "Monty Hall-Problem" geschrieben. Hurra empirisch!
import random
def monty_hall():
# 0,1,Die richtige Antwort wird zufällig aus der Tür von 2 ausgewählt
answer = random.randrange(3)
#Der Antwortende ist 0,1,Wählen Sie Ihre Lieblingstür aus 2
first_choice = random.randrange(3)
#Der Moderator Monty öffnet eine Tür am Stadtrand
monty_choice = random.choice(tuple({0, 1, 2} - {answer, first_choice}))
#Als zweite Wahl wählt der Antwortende eine andere Tür als die, die er zuerst gewählt hat.
second_choice = ({0, 1, 2} - {first_choice, monty_choice}).pop()
#Ist die Tür, die Sie beim zweiten Mal gewählt haben, die richtige Antwort??
return answer == second_choice
if __name__ == '__main__':
for x in (10, 100, 1000, 100000):
#Während x Versuchen monty_hall()Zeichnet auf, wie oft True zurückgegeben wurde.
win = sum(1 for _ in range(x) if monty_hall())
print("Anzahl von Versuchen{0}Wahrscheinlichkeit manchmal: {1}".format(x, win / x))
#Wahrscheinlichkeit bei einer Anzahl von 10 Versuchen: 0.7
#Wahrscheinlichkeit, wenn die Anzahl der Versuche 100 beträgt: 0.58
#Wahrscheinlichkeit, wenn die Anzahl der Versuche 1000 beträgt: 0.673
#Wahrscheinlichkeit, wenn die Anzahl der Versuche 100.000 beträgt: 0.66657
Das größte Problem des "Monty Hall-Problems" ist "Sollte der Herausforderer die erste Wahl ändern, nachdem der Moderator die Tür geöffnet hat?", Aber "Es ist wahrscheinlicher, dass die Antwort richtig ist." Es wurde das bestätigt.
Übrigens ist der obige Code aus Gründen der Übersichtlichkeit leicht redundant geschrieben, kann aber auch wie folgt überarbeitet werden.
def refactoring_month_hall():
# 0,1,Die richtige Antwort wird zufällig aus der Tür von 2 ausgewählt
answer = random.randrange(3)
#Der Antwortende ist 0,1,Wählen Sie Ihren Favoriten aus den 2 Türen
first_choice = random.randrange(3)
#Die erste Tür, die Sie gewählt haben, ist nicht die richtige Antwort=>Eine andere Tür ist richtig
return answer != first_choice
if __name__ == '__main__':
for x in (10, 100, 1000, 10000, 100000):
win = sum(1 for _ in range(x) if refactoring_month_hall())
print("Anzahl von Versuchen{0}Wahrscheinlichkeit manchmal: {1}".format(x, win / x))
#Wahrscheinlichkeit bei einer Anzahl von 10 Versuchen: 0.8
#Wahrscheinlichkeit, wenn die Anzahl der Versuche 100 beträgt: 0.65
#Wahrscheinlichkeit, wenn die Anzahl der Versuche 1000 beträgt: 0.678
#Wahrscheinlichkeit, wenn die Anzahl der Versuche 10.000 beträgt: 0.6676
#Wahrscheinlichkeit, wenn die Anzahl der Versuche 100.000 beträgt: 0.66585
Auch hier können Sie deutlich sehen, dass es besser ist, eine Tür zu wählen, die nicht die erste Wahl ist. Es ist seltsam (´ ・ ω ・ `)
Recommended Posts