Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:snr:informatik:glf22:python:simulationen:ziegenproblem [2023/01/24 11:06] – [Weiteres] Olaf Schnürer | lehrkraefte:snr:informatik:glf22:python:simulationen:ziegenproblem [2023/01/24 14:12] (current) – [Weiteres] Olaf Schnürer | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ~~NOTOC~~ | ||
| + | ====== Simulation des Ziegenproblems ====== | ||
| + | |||
| + | Das folgende Programm simuliert das Ziegenproblem bzw. genauer das " | ||
| + | |||
| + | <hidden Ziegenproblem-Simulationsprogramm (relativ kurze Version)> | ||
| + | <code python simulation-ziegenproblem-kurz.py> | ||
| + | from random import * | ||
| + | ANZAHL_SIMULATIONEN = 1000000 | ||
| + | anzahl_gewinne_bei_wechselstrategie = 0 | ||
| + | anzahl_gewinne_bei_verbleibstrategie = 0 | ||
| + | for simulationsnummer in range(ANZAHL_SIMULATIONEN): | ||
| + | auto = randrange(1, | ||
| + | kandidat = randrange(1, | ||
| + | if kandidat == auto: | ||
| + | anzahl_gewinne_bei_verbleibstrategie = anzahl_gewinne_bei_verbleibstrategie + 1 | ||
| + | else: | ||
| + | anzahl_gewinne_bei_wechselstrategie = anzahl_gewinne_bei_wechselstrategie + 1 | ||
| + | print(f' | ||
| + | print(f' | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <hidden Noch weiter verkürzte Version> | ||
| + | Wenn man zum Beispiel nur die Verbleibstrategie betrachtet, spart man 3 Codezeilen. Dann braucht man die Variablen '' | ||
| + | <code python simulation-ziegenproblem-sehr-kurz.py> | ||
| + | from random import * | ||
| + | ANZAHL_SIMULATIONEN = 1000000 | ||
| + | anzahl_gewinne_bei_verbleibstrategie = 0 | ||
| + | for simulationsnummer in range(ANZAHL_SIMULATIONEN): | ||
| + | if randrange(1, | ||
| + | anzahl_gewinne_bei_verbleibstrategie = anzahl_gewinne_bei_verbleibstrategie + 1 | ||
| + | print(f' | ||
| + | print(f' | ||
| + | </ | ||
| + | |||
| + | |||
| + | <hidden Ziegenproblem-Simulationsprogramm mit Kommentaren und ausführlicher Ausgabe> | ||
| + | <code python simulation-ziegenproblem.py> | ||
| + | from random import * | ||
| + | ANZAHL_SIMULATIONEN = 1000000 | ||
| + | # Man mag sich vorstellen, dass zwei Personen spielen. | ||
| + | # Die eine Person spielt mit der Wechselstrategie, | ||
| + | # d.h. sie wechselt stets zur anderen Tür, nachdem der | ||
| + | # Showmaster eine Tür geöffnet hat. Sie zählt die Anzahl ihrer | ||
| + | # Gewinne in der folgenden Variablen. | ||
| + | anzahl_gewinne_bei_wechselstrategie = 0 | ||
| + | # Die andere Person bleibt stets bei der Tür, die sie | ||
| + | # zuerst gewählt hat. Sie zählt die Anzahl ihrer Gewinne | ||
| + | # in der folgenden Variablen. | ||
| + | # | ||
| + | # Falls sich jemand wundert, warum wir diese beiden Strategien in | ||
| + | # derselben Simulation gleichzeitig testen können: | ||
| + | # Da die Wahl der ersten Tür zufällig geschieht, können wir einfach annehmen, | ||
| + | # dass beide Personen dieselbe Tür wählen. | ||
| + | |||
| + | anzahl_gewinne_bei_verbleibstrategie = 0 | ||
| + | for simulationsnummer in range(ANZAHL_SIMULATIONEN): | ||
| + | if simulationsnummer % 100000 == 0: | ||
| + | print(f' | ||
| + | # Ermittle die Nummer der Tür, hinter der das Auto steht, | ||
| + | # also 1, 2 oder 3, jeweils mit Wahrscheinlichkeit 1/3. | ||
| + | auto = randrange(1, | ||
| + | # Zufällige Wahl der Türnummer durch den Kandidaten. | ||
| + | # (Wer mag, kann auch den Kandidaten stets Tür Nummer 3 wählen lassen.) | ||
| + | kandidat = randrange(1, | ||
| + | if kandidat == auto: | ||
| + | # Das Auto befindet sich hinter der vom Kandidaten gewählten Tür. | ||
| + | # Der Showmaster öffnet zufällig eine der beiden anderen Türen, | ||
| + | # hinter denen sich jeweils eine Ziege befindet. | ||
| + | # Bleiben führt zum Gewinn des Autos, Türwechsel zur Ziege. | ||
| + | anzahl_gewinne_bei_verbleibstrategie = anzahl_gewinne_bei_verbleibstrategie + 1 | ||
| + | else: | ||
| + | # Das Auto befindet sich nicht hinter der vom Kandidaten gewählten Tür. | ||
| + | # Der Showmaster muss die vom Kandidaten nicht gewählte Tür öffnen, | ||
| + | # hinter der sich die Ziege befindet. | ||
| + | # Türwechsel führt zu Auto, Bleiben zu Ziege. | ||
| + | anzahl_gewinne_bei_wechselstrategie = anzahl_gewinne_bei_wechselstrategie + 1 | ||
| + | |||
| + | print(f' | ||
| + | print(f' | ||
| + | print(f' | ||
| + | print(f' | ||
| + | print(f' | ||
| + | |||
| + | # Wer eine im Schweizer Stil formatierte Ausgabe möchte, verwende die folgenden Zeilen: | ||
| + | # print(f' | ||
| + | # print(f' | ||
| + | # print(f' | ||
| + | # print(f' | ||
| + | # print(f' | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Bemerkungen ===== | ||
| + | |||
| + | * Allein aus der Lektüre des obigen Programms wird mir klar, dass die Wechselstrategie doppelt so erfolgreich ist wie die Verbleibstrategie (denn der '' | ||
| + | * Der Ablauf des Programms bestätigt dies. | ||
| + | * Als ich anfing, das Programm zu schreiben, dachte ich, ich müsse genau ermitteln, welche Tür der Moderator öffnet etc. Diese Zusatzarbeit ist aber vollkommen unnötig, wie hoffentlich aus den Kommentaren im Programm deutlich wird. | ||
| + | |||
| + | Zusammengefasst führt das Schreiben des Programms (d.h. ein genaues Überlegen der Abläufe) sofort zur Lösung des Problems. | ||
| + | |||
| + | ===== Weiteres ===== | ||
| + | |||
| + | Laut https:// | ||
| + | |||
| + | Übrigens gibt es auf Wikipedia noch zwei weitere Ziegenprobleme: | ||
| + | |||