[PYTHON] Verstehst du das Problem mit Monty Hall?

Ich weiß nicht, ob es zu meiner Intuition passt oder nicht, daher ist das Monty Hall-Problem zu einem Grundnahrungsmittel für Wahrscheinlichkeitsquizprobleme geworden. Aber verstehst du das wirklich?

Monty Hall Problem

Es gibt drei Türen, A, B und C. Nur eine der drei Türen ist ein Treffer und die anderen beiden sind ausgeschaltet. Das Spiel wird wie folgt gespielt.

  1. Der Spieler wählt eine von drei Türen
  2. Der Moderator Monty öffnet eine Tür, die der Spieler nicht gewählt hat, um das Spiel zu beleben. Monty kennt die Antwort im Voraus und öffnet immer die Tür
  3. Moderator Monty fragt den Spieler: "Jetzt können Sie zur verbleibenden Tür wechseln. Möchten Sie sie ändern? Möchten Sie sie ändern?"

Frage: Sollte der Spieler die Tür wechseln oder nicht? Insbesondere werden durch Ändern der Tür die Gewinnchancen erhöht, verringert oder nicht geändert.

Antwort: Spieler sollten die Tür wechseln. Da der Spieler eine der drei Türen gewählt hat, beträgt die Gewinnchance für die gewählte Tür 1/3. Die Wahrscheinlichkeit, dass eine der nicht ausgewählten Türen getroffen wird, beträgt 2/3. Und Monty öffnete eine der Türen, die er nicht gewählt hatte. Daher beträgt die Wahrscheinlichkeit, dass die verbleibende Tür getroffen wird, 2/3. Mit anderen Worten, durch Ändern der Tür wird die Gewinnchance von 1/3 auf 2/3 erhöht.

Monty Hall Problem, wenn ein Windstoß weht

Aber was ist, wenn Monty es nicht öffnete, sondern ein Windstoß die Tür öffnete? Die Böe ist ein Unfall, nicht der Zweck, das Spiel zu erregen. Es ist also möglich, die Tür Ihrer Wahl oder die Tür, die Sie getroffen haben, zu öffnen. Wir gehen auch davon aus, dass die Wahrscheinlichkeit einer Türöffnung gleich ist.

  1. Der Spieler wählt eine von drei Türen
  2. Als der Moderator Monty versuchte, das Spiel zu beleben, wehte ein Windstoß und eine der Türen öffnete sich.
  3. Wenn sich die vom Spieler in 1 ausgewählte Tür öffnet oder wenn sich die Gewinnertür öffnet, wird dieses Spiel abgebrochen, da es nicht fortgesetzt werden kann.
  4. Wenn sich die Tür, die der Spieler nicht gewählt hat, öffnet und sie aus ist, wird das Spiel fortgesetzt und Monty findet seinen Verstand wieder und fragt den Spieler: "Jetzt kann ich zur verbleibenden Tür wechseln. Sie können. Möchten Sie es ändern? Möchten Sie es ändern? "

Frage: Sollte der Spieler die Tür wechseln oder nicht? Insbesondere werden durch Ändern der Tür die Gewinnchancen erhöht, verringert oder nicht geändert.

Antwort: Die Gewinnchancen sind gleich, unabhängig davon, ob Sie die Tür wechseln oder nicht. e? Wenn Sie es ändern, ist die Wahrscheinlichkeit 2/3? Was zum Teufel redest du?

Hast du verstanden

Jemand, der das Monty Hall-Problem irgendwie versteht, ist möglicherweise nicht von den Folgen eines Windstoßes überzeugt. Ob es Monty war, der es öffnete, oder ein Windstoß, die Schlussfolgerung war dieselbe, weil sich die Tür am Stadtrand, die der Spieler nicht gewählt hatte, öffnete. Hast du das nicht gedacht?

Fliegender Monty Python

Hier kann gesagt werden, dass die Wahrscheinlichkeitstheorie chaotisch ist. Wie Sie alle wissen, ist [Monty ist Python](https://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%B3%E3%83%86%E3%82%A3 % E3% 83% BB% E3% 83% 91% E3% 82% A4% E3% 82% BD% E3% 83% B3). Hier möchte ich, dass Sie sich gewaltsam davon überzeugen, indem Sie das Monty Hall-Problem und das Windstoß-Monty Hall-Problem mit Python simulieren.

Gewöhnliches Monty Hall-Problem


import random

N = 100000
first_choice_is_atari = 0
second_choice_is_atari = 0
for _ in range(N):
    #Jeder ist richtig
    atari = random.choice(["A", "B", "C"])

    #Wählen Sie zuerst eine aus
    first_choice = random.choice(["A", "B", "C"])

    #Monty öffnet etwas, das weder ein Treffer noch ein Auserwählter ist
    monty_opened = random.choice(list({"A", "B", "C"}.difference(atari).difference(first_choice)))                  
                                                                                                                    
    #Dann gibt es nur eine Sache, die Sie noch nicht geöffnet und nicht ausgewählt haben.?                                                  
    second_choice_candidates = list({"A", "B", "C"}.difference(first_choice).difference(monty_opened))              
    assert len(second_choice_candidates) == 1                                                                       
    #Wenn Sie ändern möchten, können Sie ändern
    second_choice = second_choice_candidates[0]                                                                     
                                                                                                                    
    if first_choice == atari:                                                                                       
        first_choice_is_atari += 1
    elif second_choice == atari:
        second_choice_is_atari += 1
    else:
        raise ValueError("Unreachable")
#Gewinnwahrscheinlichkeit, wenn nicht geändert,Gewinnwahrscheinlichkeit bei Änderung
print(first_choice_is_atari / N, second_choice_is_atari / N)

Ich habe es auf einfache und leicht verständliche Weise geschrieben, ohne auf Effizienz zu achten. Es ist nicht genau, weil es Zufallszahlen verwendet, aber egal wie oft Sie es ausführen, es sollte ungefähr 1/3 sein, wenn Sie es nicht ändern, und 2/3, wenn Sie es ändern.

Gale Monty Hall Problem


import random

N = 100000
first_choice_is_atari = 0
second_choice_is_atari = 0
game_canceled = 0
for _ in range(N):
    #Jeder ist richtig
    atari = random.choice(["A", "B", "C"])

    #Wähle ein
    first_choice = random.choice(["A", "B", "C"])

    #Ein Windstoß weht und einer öffnet sich
    wind_opened = random.choice(["A", "B", "C"])

    #Wenn die richtige Antwort oder die erste Wahl geöffnet wird, wird das Spiel abgebrochen.
    if wind_opened == atari or wind_opened == first_choice:
        game_canceled += 1
        continue

    #Wenn Sie das Spiel fortsetzen, gibt es nur eine Sache, die Sie noch nicht geöffnet und nicht ausgewählt haben.?
    second_choice_candidates = list({"A", "B", "C"}.difference(first_choice).difference(wind_opened))
    assert len(second_choice_candidates) == 1
    #Wenn Sie ändern möchten, können Sie ändern
    second_choice = second_choice_candidates[0]

    if first_choice == atari:
        first_choice_is_atari += 1
    elif second_choice == atari:
        second_choice_is_atari += 1
    else:
        raise ValueError("Unreachable")
#Gewinnwahrscheinlichkeit, wenn nicht geändert,Gewinnwahrscheinlichkeit bei Änderung,Wahrscheinlichkeit, dass das Spiel nicht fortgesetzt werden kann
print(first_choice_is_atari / N, second_choice_is_atari / N, game_canceled / N)

Dies ist auch eine Zufallszahl, daher ist sie nicht genau, aber diesmal sollte sie mit oder ohne Änderung bei 22% liegen.

Lassen wir Python unser Bestes geben. Dieses Mal werde ich versuchen herauszufinden, woher diese 22% stammen, indem ich alle Muster anstelle von Zufallszahlen aufführe.

Löse das Geheimnis der Böe


from itertools import product

first_choice_is_atari = 0
second_choice_is_atari = 0
game_canceled = 0

print("|Schlagen|Erste Wahl|Böe|Ergebnis|")
print("|------|----------|----|--------|")
for atari, first_choice, wind_opened in product("ABC", repeat=3):
    if atari == wind_opened or first_choice == wind_opened:
        result = "Stornieren"
        game_canceled += 1
    elif atari == first_choice:
        result = "Verändere dich nicht"
        first_choice_is_atari += 1
    else:
        result = "Veränderung"
        second_choice_is_atari += 1
    print("|     {}|         {}|   {}|{}|".format(atari, first_choice, wind_opened, result))

print("")
total = first_choice_is_atari + second_choice_is_atari + game_canceled
print(first_choice_is_atari / total, second_choice_is_atari / total, game_canceled / total)

Eine Markdown-Formattabelle wird ausgegeben. Wenn Sie den Fall zählen, in dem die Person, die sich nicht ändert, ein Treffer ist ("nicht ändern"), und den Fall, in dem die Person, die sich ändert, ein Treffer ist ("ändern"), können Sie sehen, dass es jeweils 6 gibt. Mit oder ohne Änderung gibt es insgesamt 6 von 27 Möglichkeiten, also 6/27 = 2/9 = 22,2222 ...%.

Schlagen Erste Wahl Böe Ergebnis
A A A Stornieren
A A B Verändere dich nicht
A A C Verändere dich nicht
A B A Stornieren
A B B Stornieren
A B C Veränderung
A C A Stornieren
A C B Veränderung
A C C Stornieren
B A A Stornieren
B A B Stornieren
B A C Veränderung
B B A Verändere dich nicht
B B B Stornieren
B B C Verändere dich nicht
B C A Veränderung
B C B Stornieren
B C C Stornieren
C A A Stornieren
C A B Veränderung
C A C Stornieren
C B A Veränderung
C B B Stornieren
C B C Stornieren
C C A Verändere dich nicht
C C B Verändere dich nicht
C C C Stornieren

Die Wahrscheinlichkeit ist schwierig. Bewegen wir also unsere Hände

Das Problem der Wahrscheinlichkeit ist schwierig. Und es ist noch schwieriger, eine Bestätigung zu erhalten, dass die Antwort auf das Wahrscheinlichkeitsproblem wirklich richtig oder falsch ist. Aber dann werden Programmiersprachen zu einem beruhigenden Partner.

Eigentlich ist es eine ziemlich schwierige Aufgabe, eine Tür und Mr. Monty vorzubereiten und einen Windstoß zu blasen, bis sich die Tür öffnet, aber es ist zu groß, um Zufallszahlen auf einem Computer zuzuweisen und eine entsprechende Simulation durchzuführen. Wenn Sie kein Problem haben, können Sie es sofort versuchen. Das Aufzählen und Zählen aller Muster ist auch auf kleinere Probleme beschränkt, aber dennoch ist das Monty Hall-Problem überhaupt kein Problem.

Mach es selbst, bevor du dich verwirrt oder getäuscht fühlst. Sie können eine andere Welt sehen.

Übrigens, wenn Sie über die freie Kapazität verfügen, versuchen Sie, alle Muster aufzuzählen, um zu sehen, warum das Ändern der Tür die Wahrscheinlichkeit beim Monty Hall-Problem, bei dem der Wind nicht weht, auf 2/3 verringert.

Recommended Posts

Verstehst du das Problem mit Monty Hall?
Lösen Sie das Monty Hall-Problem
Schreiben wir ein einfaches Simulationsprogramm für das "Monty Hall Problem"
Verstehst du das Vertrauensintervall richtig? Was ist der Unterschied zur Verurteilung?
Wie macht man "die ersten drei Wörter, die man gefunden hat"?
An welchem Tag kaufst du Geld?
Wie viel kennen Sie die Grundlagen von Python?
Untersuchen Sie das doppelte Problem
Was können Sie mit den Standardstatistiken der Python-Bibliothek tun?