EINFÜHRUNG |
In der Forschung und Industrie, aber auch in der Finanzwelt spielen Computersimulationen eine wichtige Rolle. Dabei wird das Verhalten eines realen Systems mit Hilfe eines Computers nachgebildet. Computersimulationen haben gegenüber realen Experimenten und Untersuchungen den Vorteil, dass sie kostengünstig und umweltschonend durchführbar, sowie ungefährlich sind. Allerdings können sie die Wirklichkeit meist nie exakt wiedergeben. Die Gründe dafür sind vielfältig:
Immerhin werden Computersimulationen mit steigender Rechenleistung der Computer immer präziser, man denke etwa an die Wetterprognosen für die nächsten Tage. Der Zufall spielt in unserem Leben eine ausserordentlich grosse Rolle, denn viele Entscheide fällen wir nicht auf Grund rein logischer Argumente, sondern durch eine intuitive Abschätzung von Wahrscheinlichkeiten. Die Verwendung des Zufalls kann aber auch Probleme mit exakten Lösungen stark vereinfachen. So ist es beispielsweise sehr zeitaufwendig, auf einer Strassenkarte mit vielen Verbindungsmöglichkeiten den kürzesten Weg von A nach B mit einem Algorithmus exakt zu bestimmen; für die Praxis genügend ist es, den mit grosser Wahrscheinlichkeit kürzesten Weg zu finden [mehr... Es handelt sich um randomisierte Algorithmen, ein aktuelles Forschungsgebiet von grosser Bedeutung] |
DER COMPUTER ALS SPIELPARTNER |
Mit dem Computer und deinen Programmierkenntnissen kannst du diese Überlegung nachprüfen. Dabei gehst du davon aus, dass es gleichgültig ist, ob du die 3 Würfe hintereinander oder miteinander machst oder anders gesagt, dass die Wahrscheinlichkeit, mit einem Würfel eine bestimmte Zahl zu erhalten, unabhängig von den anderen Würfeln immer 1/6 ist. Es gibt zwei Möglichkeiten das Problem anzupacken, entweder statistisch oder kombinatorisch. Die statistische Lösung entspricht dem realen Spiel. Du simulierst das Werfen der Würfel, indem du im Programm oftmals 3 Zufallszahlen zwischen 1 und 6 erzeugst und die Gewinnfälle zählst. from random import randint n = 1000 # number of games won = 0 repeat n: a = randint(1, 6) b = randint(1, 6) c = randint(1, 6) if a == 6 or b == 6 or c == 6: won += 1 print("Won:", won, " of ", n, "games") print("My winning percentage:", won / n) Es ergibt sich eine Gewinnwahrscheinlichkeit von ungefähr 0.42 und nicht 0.5, wie du vermutet hast. Der Wert ändert aber von Simulation zu Simulation leicht, denn er ist statistischen Schwankungen unterworfen. Wie du intuitiv vermutest, ist das Resultat umso genauer, je mehr Versuche du machst. Die statistischen Schwankungen sind bei Computersimulationen von grosser Wichtigkeit.
from gpanel import * from random import randint z = 10000 n = 100 def sim(): won = 0 repeat n: a = randint(1, 6) b = randint(1, 6) c = randint(1, 6) if a == 6 or b == 6 or c == 6: won += 1 return won makeGPanel(-10, 110, -100, 1100) drawGrid(0, 100, 0, 1000) h = [0] * (n + 1) title("Simulation started. Please wait...") repeat z: x = sim() h[x] += 1 title("Simulation ended") lineWidth(2) setColor("blue") for x in range(n + 1): line(x, 0, x, h[x])
|
MEMO |
Das Maximum der Verteilung liegt bei etwa 42, da ja die Wahrscheinlichkeit zu gewinnen etwa 0.42 ist und man 100 Spiele macht. Spielst du mit Nora 100 Mal, so kann es trotz deiner Gewinnchance von nur 0.42 durchaus sein, dass du in über 50 Fällen das Spiel gewinnst. Die Wahrscheinlichkeit dafür ist aber gering (ca. 5 %) und darum ist das Spiel nicht fair. Computerexperimente mit Zufallszahlen unterliegen statistischen Schwankungen, die umso kleiner werden, je grösser die Anzahl der Versuche ist. |
Für die kombinatorische Lösung lässt du den Computer alle möglichen Würfe mit 3 Würfeln ausführen. Der erste Wurf kann die Zahlen 1 bis 6 ergeben, ebenfalls der zweite und der dritte. In der geschachtelten for-Schleife bildest du also alle Zahlentripel und zählst mit der Variablen moegliche alle Möglichkeiten und mit der Variablen guenstige solche, die mindestens eine 6 enthalten, bei denen du also gewinnst. possible = 0 favorable = 0 for i in range(1, 7): for j in range(1, 7): for k in range(1, 7): possible += 1 if i == 6 or j == 6 or k == 6: favorable += 1 print("favorable:", favorable, "possible:", possible) print("My winning percentage:", favorable / possible) Es ergeben sich 91 günstige von 216 möglichen Fällen und damt eine Gewinnwahrscheinlichkeit w = guenstige / moegliche von 91/216 = 0.42. Diesen Wert hast du auch mit der Computersimulation erhalten.
ZUSATZSTOFFDu kannst natürlich die Aufgabe auch ganz ohne Computer lösen. Dazu überlegst du Folgendes: Es gibt für den Gewinn drei Ereignisse E1, E2, E3:
Da E1, E2 und E3 unabhängig sind, ist die Wahrscheinlichkeit die Summe, also 1 /6 + 5 /36 + 25 /216 = 91/216 = 0.421296. Du kannst den Prozess baumartig darstellen: Für die Lösung gibt es auch noch einen Königsweg: Die Wahrscheinlichkeit, in den drei Würfen keine 6 zu werfen ist p = 5/6 * 5/6 * 5/6 = 125/216. Die gesuchte Wahrscheinlichkeit also w = 1 - p = 91/216. |
AUFGABEN |
|