[PYTHON] Lösen Sie das Monty Hall-Problem

Monty Hall Problem

Jeder ist berühmt [Monty Hall Problem](http://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%B3%E3%83%86%E3%82%A3%E3% Kennen Sie 83% BB% E3% 83% 9B% E3% 83% BC% E3% 83% AB% E5% 95% 8F% E9% A1% 8C)?

Ich werde die ausführliche Erklärung dem obigen Link überlassen, aber hier ist eine Übersicht über das Problem.

Ist es zu diesem Zeitpunkt übrigens wahrscheinlicher, dass das Auto gewinnt, wenn die Tür wieder ausgewählt wird? Oder ist die Wahrscheinlichkeit gleich, ohne erneut auswählen zu müssen?

Zuerst wissen Sie nicht, in welcher der drei Türen sich das Auto befindet.

250px-Monty_closed_doors.svg.png

Von den nicht ausgewählten Türen ist der Verlust offen.

250px-Monty_open_door_chances.svg.png

In diesem Zustand können Sie die Tür erneut auswählen oder nicht.

(Das Bild ist [Wikipedia](http://en.wikipedia.org/wiki/%E3%83%A2%E3%83%B3%E3%83%86%E3%82%A3%E3%83%BB% Nachdruck aus E3% 83% 9B% E3% 83% BC% E3% 83% AB% E5% 95% 8F% E9% A1% 8C))

Bitte denken Sie vorerst darüber nach.

Kontroverse Themen

Das Guinness-Buch hat den höchsten IQ der Welt [Marilyn Boss Savant](http://en.wikipedia.org/wiki/%E3%83%9E%E3%83%AA%E3%83%AA] % E3% 83% B3% E3% 83% BB% E3% 83% 9C% E3% 82% B9% E3% 83% BB% E3% 82% B5% E3% 83% 90% E3% 83% B3% E3 % 83% 88) war 1990 umstritten und sagte, dass eine erneute Auswahl die Gewinnchancen eines Autos verdoppeln würde, als eine erneute Auswahl nicht.

Als Reaktion darauf wurden die Leser mit 10.000 Kommentaren überflutet, in denen sie sagten, "ihre Antwort ist falsch", von denen 1000 Doktoranden sind, und "selbst wenn Sie die Tür wechseln, beträgt die Wahrscheinlichkeit fünfzig-fünfzig (1/5). Da es 2) ist, kann es nicht auf 2/3 verdoppelt werden. "

Ein Mathematiker, der in seinem Leben 1500 Artikel veröffentlicht hat [Paul Erdesh](http://en.wikipedia.org/wiki/%E3%83%9D%E3%83%BC%E3%83%AB%E3 % 83% BB% E3% 82% A8% E3% 83% AB% E3% 83% 87% E3% 82% B7% E3% 83% A5) ist "unmöglich", Robert von der George Mason University "Als professioneller Mathematiker mache ich mir Sorgen über den Mangel an mathematischen Kenntnissen der Öffentlichkeit. Das Eingestehen meiner Fehler wird die Situation verbessern", sagte Dr. Scott Smith von der University of Florida. Der weltbeste Geheimdienstindexinhaber selbst sollte die Torheit, mathematische Ignoranz sofort in der Welt zu verbreiten, stoppen und die Schande kennen! ", Von anderen prominenten Ärzten nacheinander kritisiert. Umstritten.

Was ist mit der richtigen Antwort?

Simulieren Sie das Problem

Dieses Problem wird durch die Monte-Carlo-Methode auf einem Computer simuliert, was beweist, dass Savantos Antwort richtig war. Mit anderen Worten, wenn Sie die Tür erneut auswählen, nachdem der Außenbereich aufgedeckt wurde, verdoppeln sich die Chancen.

Simulieren wir es mit Python.

import sys
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import font_manager
from random import choice

def montyhall(N, doors):
    """Gibt einen Vektor zurück, der angibt, ob Sie das Monty Hall-Problem gelöst und gewonnen haben"""
    #Bereiten Sie einen Vektor mit der gleichen Länge wie die Anzahl der Versuche vor
    arr_picked = np.zeros(N)
    arr_switch = np.zeros(N)

    for i in range(N):
        car = choice(doors) #Entscheide nach dem Zufallsprinzip für die Tür, in der sich das Auto befindet
        picked = choice(doors) #Wählen Sie die Tür, die Ihrer Meinung nach die richtige Antwort ist

        #Der Moderator öffnet die Tür mit der Ziege
        goat = choice(list(set(doors) - set([picked, car])))

        #Neu auswählen
        switch = choice(list(set(doors) - set([picked, goat])))

        #Speichern Sie das Ergebnis der richtigen Antwort an der entsprechenden Position jedes Vektors
        if picked == car:
            arr_picked[i] = 1 #1, wenn die Antwort korrekt ist, wenn sie nicht erneut ausgewählt wurde
        if switch == car:
            arr_switch[i] = 1 #1, wenn die Antwort bei erneuter Auswahl korrekt ist

    #Geben Sie zwei Vektoren zurück
    return (arr_picked, arr_switch)

def plot(N, arr_picked, arr_switch):
    """Zeichnen Sie die Ergebnisse"""
    #Es ist praktisch, die Schriftart entsprechend der Umgebung anzugeben
    if sys.platform == "darwin":
        font_path = "/Library/Fonts/Osaka.ttf"
    else:
        font_path = "/usr/share/fonts/truetype/fonts-japanese-gothic.ttf"
    prop = font_manager.FontProperties(fname=font_path)

    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)

    X = np.arange(N) + 1 #Bringen Sie die Anzahl der Versuche auf die X-Achse
    picked_car = arr_picked.cumsum() #Finden Sie die kumulierte Anzahl der richtigen Antworten
    switch_car = arr_switch.cumsum()

    ax.plot(X, picked_car, label='picked up')
    ax.plot(X, switch_car, label='switched car')
    ax.set_title('Gesamtzahl der Montyhall-Probleme', fontproperties=prop)
    ax.legend(loc='best')
    plt.savefig('image.png')

def main(args):
    N = 10000 #10000 mal simulieren
    doors = np.array([1, 2, 3])

    #Lösen Sie das Montyhall-Problem
    (arr_picked, arr_switch) = montyhall(N, doors)
    #Zeichnen Sie die Ergebnisse
    plot(N, arr_picked, arr_switch)

    #Berechnen Sie die kumulierte Anzahl der Gewinne
    win_picked = arr_picked.sum()
    win_switch = arr_switch.sum()

    print("Wenn Sie die Tür nicht gewechselt haben: %f %% (%d)" %
          (100.0 * win_picked / N, win_picked))
    print("Wenn Sie die Tür wechseln:      %f %% (%d)" %
          (100.0 * win_switch / N, win_switch))

#=>Während 10000 Spielen
#Wenn Sie die Tür nicht gewechselt haben: 33.060000 % (3306)
#Wenn Sie die Tür wechseln:      66.940000 % (6694)

image.png

↑ Die korrekte Antwortrate des geschalteten Fahrzeugs (bei erneuter Auswahl) wird deutlich verdoppelt.

Zusammenfassung

Dieses Problem ist die Grundlage der Bayes'schen Statistik hintere Wahrscheinlichkeit Wird oft verwendet, um% 87) zu erklären. Mit anderen Worten, die Wahrscheinlichkeit, dass drei Türen vorhanden sind und sich ein Auto in einer davon befindet, ist die "Vorwahrscheinlichkeit", und die Wahrscheinlichkeit, dass der Moderator die Tür öffnet und die Ziege sieht, ist die "Nachwahrscheinlichkeit". Lassen Sie uns zu einem anderen Zeitpunkt über die Bayes'sche Statistik sprechen.

Sogar Probleme, die vor 20 Jahren von einem bekannten Mathematiker verwechselt wurden, können jetzt mit dem Computer einfach mit freier Software demonstriert werden. Im Extremfall können wir sagen, dass wir Datenanalysefunktionen erworben haben, die selbst Mathematiker vor 20 Jahren noch übertroffen haben. Dies ist natürlich übertrieben, aber es ist sicher, dass die Wahrheit der Dinge enthüllt werden kann, indem man die Hände auf diese Weise bewegt, den Computer bewegt und die Daten tatsächlich analysiert. Erwerben Sie die Fähigkeit zur wissenschaftlichen Überprüfung mit einem Computer, selbst wenn Sie mit echten Problemen konfrontiert sind.

Recommended Posts

Lösen Sie das Monty Hall-Problem
Verstehst du das Problem mit Monty Hall?
Schreiben wir ein einfaches Simulationsprogramm für das "Monty Hall Problem"
So lösen Sie das Problem beim Verpacken des Behälters
Lösen Sie das Problem des Handlungsreisenden mit OR-Tools
Lösen Sie das maximale Subarray-Problem in Python
Versuchen Sie, das Fizzbuzz-Problem mit Keras zu lösen
Versuchen Sie, das Problem der Python-Klassenvererbung zu lösen
Lösen Sie Rucksackprobleme mit pyomo und glpk
[Bei Coder] Lösen Sie das Problem der Dichotomie
Untersuchen Sie das doppelte Problem
Lösen Sie die Maskenberechnung
Versuchen Sie, das Problem der Zuweisung von Schulungsärzten mit Python zu lösen
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Über das Problem der reisenden Verkäufer
Lösen Sie das japanische Problem, wenn Sie das CSV-Modul in Python verwenden.
Das Problem wird je nach Formulierungsmethode leichter zu lösen
Lösen Sie das Problem der fehlenden libcudart in Ubuntu 16.04 + CUDA 8.0 + Tensorflow-Umgebung
Versuchen Sie, das N Queen-Problem mit SA von PyQUBO zu lösen
Ich wollte das ABC164 A ~ D-Problem mit Python lösen
Lösung des Anfangswertproblems gewöhnlicher Differentialgleichungen mit JModelica
Lösen Sie das Python-Rucksackproblem mit der Branch-and-Bound-Methode
Ich habe versucht, das Schichtplanungsproblem mit verschiedenen Methoden zu lösen
Lösen Sie Teilsummenprobleme mit der vollständigen Suche in Python
Versuchen Sie, das Problem der Funktionsminimierung mithilfe der Partikelgruppenoptimierung zu lösen
Denken Sie an das Problem der minimalen Änderung
Über das bestellte Patrouillenverkäuferproblem
Lösen Sie die Verzögerung der Interferometerbeobachtung
Illustration der Ergebnisse des Rucksackproblems
Verwenden Sie Rasppie, um das Problem einer unzureichenden mobilen Wi-Fi-Verbindung zu lösen
Das 16. Offline-Echtzeit-Schreiben eines Referenzproblems zur Lösung mit Python
Versuchen Sie, das Problem des Handlungsreisenden mit einem genetischen Algorithmus zu lösen (Theorie)
Das 19. Offline-Echtzeit-Schreiben eines Referenzproblems zur Lösung mit Python
Intuitive Erklärung, die nicht auf der Formel des Monty Hall-Problems und der Simulation mit Python beruht