JavaScriptsMathematik

Monty-Hall-Simulator

Das Ziegenproblem zum Selberspielen — und als Simulation über zehntausend Runden, die zeigt, dass Wechseln wirklich doppelt so oft gewinnt.

Drei Tore. Hinter einem steht ein Auto, hinter den beiden anderen je eine Ziege. Ihr wählt ein Tor. Der Moderator, der weiß, wo das Auto steht, öffnet daraufhin eines der beiden anderen Tore — immer eines mit einer Ziege. Nun fragt er: Bleibt ihr bei eurer Wahl, oder wechselt ihr zum letzten geschlossenen Tor?

Die Antwort lautet: Wechseln. Wer wechselt, gewinnt in zwei von drei Fällen; wer bleibt, nur in einem von dreien. Das widerspricht dem Gefühl so heftig, dass die Aufgabe 1990 einen der größten Streits der populären Mathematikgeschichte auslöste — tausende Leserbriefe, darunter von Hochschullehrern, die der Kolumnistin Marilyn vos Savant vorwarfen, sie könne nicht rechnen. Sie hatte recht.

Der Grund ist der Moderator: Er wählt sein Tor nicht zufällig, sondern öffnet immer eine Ziege. Damit fließt Wissen in das Spiel ein. Eure erste Wahl trifft mit einer Wahrscheinlichkeit von einem Drittel das Auto — daran ändert sich nichts. Mit zwei Dritteln steht das Auto hinter einem der beiden anderen Tore, und der Moderator zeigt euch dann verlässlich, hinter welchem der beiden es nicht steht. Die zwei Drittel bündeln sich also auf dem einen verbliebenen Tor.

Unten könnt ihr beides tun: einzelne Runden von Hand spielen und die Statistik mitlaufen lassen — oder zehntausend Runden auf einen Schlag simulieren. Erfahrungsgemäß überzeugt die Simulation schneller als jede Erklärung.

Verwandtes im Archiv: Binomialverteilung für Wahrscheinlichkeiten allgemein, Pi schätzen als weiteres Beispiel für Simulation statt Rechnung und Zahlenraten für ein Ratespiel mit anderer Wendung.

Mathematik Baujahr 2026 läuft in deinem Browser
Script von kostenlose-javascripts.de

So funktioniert das Script

Das Script hat zwei Teile: das Spiel für Menschen und die Simulation für die Statistik. Der spannendste Code steht in der Simulation — und er ist kürzer, als man erwartet.

const moeglich = [];
for (let i = 0; i < 3; i++) {
  if (i !== gewaehlt && i !== auto) moeglich.push(i);
}
geoeffnet = moeglich[zufall(moeglich.length)];

Hier steckt die ganze Aufgabe. Der Moderator darf weder das gewählte Tor noch das Auto zeigen. Hat der Spieler auf eine Ziege getippt — in zwei von drei Fällen —, bleibt ihm genau ein Tor zum Öffnen; er hat keine Wahl. Nur wenn der Spieler zufällig richtig lag, kann er zwischen zwei Ziegen wählen.

Genau darin liegt die Information, die das Wechseln lohnend macht. Öffnete der Moderator ein zufälliges Tor und stünde manchmal das Auto dahinter, wäre der Vorteil weg — dann wären beide Strategien gleich gut. Wer die Aufgabe „unlogisch" findet, hat meist diese Bedingung überlesen.

if (ersteWahl !== autoTor) zaehler.gewechseltGewonnen++;

Diese eine Zeile ist die vollständige Simulation der Wechsel-Strategie, und sie kommt ohne Moderator aus. Der Gedanke: Wer immer wechselt, gewinnt genau dann, wenn seine erste Wahl falsch war. Denn dann bleibt nach dem Öffnen der Ziege nur noch das Auto übrig. Und die erste Wahl ist in zwei von drei Fällen falsch — daher die zwei Drittel.

Umgekehrt gewinnt die Bleiben-Strategie genau dann, wenn die erste Wahl richtig war, also in einem von drei Fällen. Was der Moderator dazwischen tut, ist für das Ergebnis vollkommen gleichgültig. Diese Umformung von einer komplizierten Handlungsfolge in eine einzige Bedingung ist der eigentliche Erkenntnisgewinn.

const autoTor2 = zufall(3);
const ersteWahl2 = zufall(3);

Für die zweite Strategie werden bewusst neue Zufallszahlen gezogen statt dieselben wiederzuverwenden. So sind die beiden Reihen voneinander unabhängig, und man sieht an den leicht unterschiedlichen Werten, wie stark der Zufall streut — bei zehntausend Runden landen beide Quoten meist im Bereich von einem halben Prozentpunkt um ihren theoretischen Wert.

tor.addEventListener("click", function () { klick(i); });

Die drei Tore werden im Script erzeugt, nicht im HTML. Jedes bekommt seinen eigenen Ereignis-Empfänger, der sich die Nummer aus der Schleife merkt — dasselbe Muster wie beim Klickzähler. Weil die Schleife let benutzt, hat jeder Durchlauf sein eigenes i; mit var zeigten am Ende alle drei Knöpfe auf dieselbe Zahl.

let phase = "wahl";   // wahl → entscheidung → ende

Das Spiel hat drei Zustände, und dieselbe Klickfunktion verhält sich in jedem anders. Diese Art, den Ablauf über eine Zustandsvariable zu steuern, heißt Zustandsautomat und ist bei jedem mehrstufigen Vorgang die übersichtlichste Lösung — vom Spiel bis zum mehrseitigen Formular.

Zum Anpassen: Mit hundert Toren wird die Sache anschaulicher. Der Moderator öffnet 98 Ziegen, und die Frage ist plötzlich leicht: Wechseln gewinnt in 99 von 100 Fällen. Dafür ersetzt ihr die 3 in zufall(3) durch die gewünschte Torzahl — die Simulation stimmt dann sofort, denn ihre Logik hängt nicht an der Zahl drei.

Script für die eigene Homepage

Kopiert euch den kompletten Code und fügt ihn an der Stelle eurer Seite ein, an der das Script erscheinen soll. Er läuft ohne weitere Dateien und ohne fremde Server.

Mehr aus der Kategorie Mathematik