[PYTHON] Schreiben wir ein einfaches Simulationsprogramm für das "Monty Hall Problem"

[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

Schreiben wir ein einfaches Simulationsprogramm für das "Monty Hall Problem"
Lösen Sie das Monty Hall-Problem
Schreiben Sie ein Programm, um den 4x4x4 Rubik Cube zu lösen! 2. Algorithmus
Schreiben Sie ein Programm, um den 4x4x4 Rubik Cube zu lösen! 3. Implementierung
Verstehst du das Problem mit Monty Hall?
Schreiben wir einen einfachen Gleichstromlöser
Schreiben wir ein Programm zur Lösung des Rubik-Würfels (Teil 2: IDA * -Suche)
Programm zur Suche nach demselben Bild
Schreiben wir ein Python-Programm und führen es aus
Lassen Sie uns eine einfache Vorlage anzeigen, die ideal für den ersten Django ist
Intuitive Erklärung, die nicht auf der Formel des Monty Hall-Problems und der Simulation mit Python beruht
Schreiben Sie ein super einfaches molekulardynamisches Programm in Python
Eine Geschichte, von der ich sehr überzeugt war, als ich den Code für das Monty Hall-Problem schrieb und die Gewinnrate berechnete
Schreiben Sie ein Python-Programm, um die Bearbeitungsentfernung [Python] [Levenshtein-Entfernung] zu ermitteln.
Schreiben Sie ein Programm, um den 4x4x4 Rubik Cube zu lösen! 1. Übersicht
Ändern Sie die Bash-Eingabeaufforderung zur einfachen Anzeige in eine einfache Farbe
Schreiben Sie ein Programm, das das Programm missbraucht und 100 E-Mails sendet
Schreiben Sie einen supereinfachen TCP-Server
Die Geschichte des Exportierens eines Programms
Latein lernen zum Schreiben eines lateinischen Satzanalyseprogramms (Teil 1)