Nachdem ich das Montyhall-Problem mit Ruby überprüft hatte, war es eine Geschichte, die ich gut verstehen konnte und die ich nicht gut verstand

Was ist das Monty Hall-Problem?

Das Montyhall-Problem ist ein ** Wahrscheinlichkeitsproblem, das nicht intuitiv überzeugt **. Ich fühlte mich nicht erfrischt, als ich es im Internet nachschlug, also beschloss ich, es selbst zu überprüfen.

Sie können sich einen Überblick über [diese Site] verschaffen (https://mathtrain.jp/monty), aber ich werde auch auf dieser Seite ein wenig erklären.

Überblick über das Montyhall-Problem

Wenn Sie ein Feld auswählen, wird einer der Ausreißer geöffnet. Wenn Sie danach das ausgewählte Feld ändern können, stellt sich die Frage, wie Sie die Optionen am besten ändern oder nicht ändern können.

Kasten 1 Kasten 2 Kasten 3
Schlagen aus aus

Angenommen, der Spielorganisator öffnet den Out-of-Box mit Box 2, die aus den drei obigen Boxen ausgewählt wurde (noch nicht geöffnet). Die Situation ist wie unten

Kasten 1 Kasten 2 Kasten 3
Schlagen aus aus
Auswahl OPEN

Wenn die Auswahl geändert werden kann, wenn festgestellt wird, dass Box 3 nicht in Ordnung ist, sollte sie geändert werden? Ist das Problem.

Intuitiv gibt es zwei Möglichkeiten: "Hit or Miss". Es scheint also egal zu sein, welche Sie wählen, aber mathematisch ist es wie folgt.

Wie es ist Auswahl ändern
Gewinnwahrscheinlichkeit 33% 67%

Als ich das zum ersten Mal sah, dachte ich: "Das ist dumm ...". Ich war nicht ganz überzeugt, als ich mir die Erklärung ansah. Als ich sie mithilfe der Programmierung überprüfte, war ich sehr enttäuscht und werde sie erklären. (Aber immerhin haben neue Geheimnisse zugenommen)

Code und sofort überprüfen

Wir werden dies mit Ruby überprüfen. (Obwohl es ein wenig mehr überarbeitet werden kann, gibt es einige Teile, die redundant geschrieben sind, so dass es leicht zu verstehen ist, was Sie tun. Dennoch kann es ein wenig schwierig sein zu verstehen ... lol)

Code

ruby


#Anzahl der Versuche (ungefähr 1 Million Mal ist genug)
number = 1_000_000

#Bereiten Sie Treffer und Fehlschläge vor
win = 1
lose = 0

#Bereiten Sie eine Box vor
boxes = [win, lose, lose]

#Fall 1 (wenn die Optionen nicht geändert werden)
count = 0
number.times do
  #Entscheide zufällig, welches Feld du wählen möchtest
  random_number = [0, 1, 2].sample
  selected_box = boxes[random_number]
  #Öffnen Sie den Out-of-Box (dieser Vorgang macht keinen Sinn, da Sie Ihre Optionen beim nächsten Mal nicht ändern werden).
  random_number != 2 ? boxes.delete_at(2) : boxes.delete_at(1)
  #Beurteilen Sie, ob es sich bei dem ausgewählten Feld um einen Treffer handelt
  count += 1 if selected_box == win
end
#Berechnung der Wahrscheinlichkeit
prob_1 = (count.to_f / number.to_f).round(5) * 100

puts "Wahrscheinlichkeit, dass Optionen nicht geändert werden: #{prob_1}%"

#Fall 2 (beim Ändern von Optionen)
count = 0
number.times do
  #Wählen Sie eine Box aus
  random_number = [0, 1, 2].sample
  selected_box = boxes[random_number]
  #Öffnen Sie das äußere Feld und ändern Sie das ausgewählte Feld
  if random_number == 0
    boxes.delete_at(2)
    selected_box = boxes[1]
  elsif random_number == 1
    boxes.delete_at(2)
    selected_box = boxes[0]
  else
    boxes.delete_at(1)
    selected_box = boxes[0]
  end
  #Beurteilung
  count += 1 if selected_box == win
end
#Berechnung der Wahrscheinlichkeit
prob_2 = (count.to_f / number.to_f).round(5) * 100

puts "Wahrscheinlichkeit, Optionen zu ändern: #{prob_2}%"


Ergebnis

Dies ist das Ergebnis der Ausführung der Datei. Sie können sehen, dass die Intuition definitiv falsch ist 6222a43d3cc8b2ba6e6aba05f660e0b6.png

Ein kleiner Kommentar

Ich werde versuchen, dieses Problem mit Ruby zu lösen und zu erklären, was ich dachte. Der Punkt ist ** Fallklassifizierung nach der ersten Wahl **

Wenn Sie ein Feld auswählen, wird Ihnen angezeigt, dass ein Feld nicht ausgerichtet ist, sodass dieses Problem in die folgenden zwei Muster unterteilt werden kann.

Jede Wahrscheinlichkeit ist natürlich wie folgt

Wahrscheinlichkeit, dass zuerst die Gewinnbox ausgewählt wird Wahrscheinlichkeit, zuerst die falsche Box zu wählen
33% 67%

Als nächstes schauen wir uns die Geschichte an, wie Optionen von hier aus geändert oder nicht geändert werden.

Wenn Sie Ihre Optionen nicht ändern

Wenn Sie Ihre Optionen nicht ändern, müssen Sie zuerst die Gewinnbox auswählen. Ursprünglich beträgt die Gewinnwahrscheinlichkeit 33%, in diesem Fall also 33%.

Beim Ändern von Optionen

Wenn Sie beim Ändern der Optionen zuerst die Gewinnbox auswählen, verlieren Sie, und wenn Sie die falsche Box auswählen, gewinnen Sie. Mit anderen Worten, um endgültig zu gewinnen, müssen Sie zuerst das falsche Kästchen auswählen. Die Wahrscheinlichkeit, eine Abweichung zu wählen, beträgt zunächst 67%. In diesem Fall beträgt die Gewinnwahrscheinlichkeit 67%.

Ein kleiner Zweifel

Ich habe es bisher erklärt, aber während ich schrieb, kamen einige Fragen auf. Angenommen, ein anderer Teilnehmer kommt an, wenn der Out-of-Box geöffnet wird.

`Welche Box ist zu diesem Zeitpunkt aus der Sicht eines anderen Teilnehmers der Gewinner? ``

Es ist in Ordnung, diese Frage zu stellen, aber ich kann sie nicht gut erklären. Wenn Sie also mit Mathematik vertraut sind, kommentieren Sie dies bitte.

Schließlich

Es war ein bisschen launisch, aber es war ein interessantes Problem! Das Montyhall-Problem ist einfach, aber tiefgreifend

Recommended Posts

Nachdem ich das Montyhall-Problem mit Ruby überprüft hatte, war es eine Geschichte, die ich gut verstehen konnte und die ich nicht gut verstand
Die Geschichte, die ich nach der Installation mehrerer Java unter Windows nicht erstellen konnte
Eine Geschichte, die mir sehr gut gefallen hat, als ich mit Ruby Triple DES gemacht habe
Ich hatte das Problem, dass JS nach dem Seitenübergang nicht gelesen wird und JS beim Laden gelesen wird.
Eine Geschichte, die selbst ein Mann, der die C-Sprache nicht versteht, Ruby 2.6 um neue Funktionen erweitern könnte
Ich kann kein SQS verwenden, das den Fragebogen mit einem Scanner lesen kann. → Ich kann es nach dem Ändern der Java-Version verwenden
Ein kurzer Blick auf das Monty Hall-Problem
Das Problem, dass der Test nicht über die Befehlszeile mit Spring-Boot-Starter-Test ausgeführt werden konnte, wurde behoben
[Ruby] Ich habe einen Crawler mit Anemone und Nokogiri gemacht.
[JQuery] Ein Typ, den selbst Anfänger gut verstehen konnten
Die Geschichte, dass das erzwungene Update nicht implementiert werden konnte
Die Geschichte, die zur Lösung des Fehlers führte, weil postgres nicht mit Docker-Compose begann
Die Geschichte, dass der Anforderungsparameter aus der iPhone-Anwendung mit dem Servlet nicht erfolgreich abgerufen werden konnte
Ich habe versucht, ein Programm in Java zu erstellen, das das Problem des Handlungsreisenden mit einem genetischen Algorithmus löst
Eine Geschichte, die ein Ruby-Anfänger gemacht und einen LINE BOT veröffentlicht hat, der die Zugzeit in 2 Monaten erzählt
Die Geschichte, dass die DB-Verbindung und andere Zeitüberschreitungen nicht gemäß dem festgelegten Wert abgelaufen sind
Ich habe versucht, die Ergebnisse vor und nach der Date-Klasse mit einer geraden Zahl auszudrücken
Als ich einen Jersey-API-Test durchführte, stieß ich auf das Phänomen, dass die JSR310-API nicht deserialisiert werden konnte.
[Rails] Eine Geschichte, die weiterhin fälschlicherweise den Grund überprüfte, warum die Aktualisierungsaktion nicht bestanden wurde (Aktualisierung)
Ich habe versucht, das Problem der "mehrstufigen Auswahl" mit Ruby zu lösen
Eine Geschichte, die ich mit Java nur schwer herausfordern konnte
Informationen zum Problem, dass das Image nach der AWS-Bereitstellung nicht angezeigt wird
[Gradle] Die Geschichte, dass die Klassendatei nicht in der JAR-Datei vorhanden war
Es wurde ein Problem behoben, bei dem das Bildlaufereignis in JQuery nicht ausgelöst wurde
Was ich getan habe, als die DB nicht mit Docker-Compose gestartet wurde
Eine Geschichte, die mit der Einführung von Web Apple Pay zu kämpfen hatte
Die Geschichte, dass der Erstellungsfehler bei Verwendung von Eclipse 2020 nicht aufgehört hat
Eine Geschichte, die sich mit dem Problem befasst, dass REMOTE_ADDR nicht in einem mit Docker Swarm + Traefik (1.7) erstellten Cluster erworben werden kann.
Eine Geschichte, der ich mit der automatischen Starteinstellung von Tomcat 8 unter CentOS 8 zweimal verfallen war
Eine Geschichte, die ich mit der Stream-API von Java8 einem Prozess schreiben wollte, der einer while-Anweisung entspricht
Wie man IGV mit Socket-Kommunikation bedient und wie man einen Ruby Gem mit dieser Methode herstellt
Ich möchte eine Datei mit Ruby im Internet herunterladen und lokal speichern (mit Vorsicht).
Die Geschichte der Einführung von Gradle als Nachrüstung eines bestehenden Systems, das keine Pakete verwaltet
Ich habe einen LSP und habe versucht, eine Umgebung zum Schreiben von Java mit Vim (NeoVim) zu erstellen, aber ich konnte die IDE nicht übertreffen ...