Wie sieht man etwas? (Sofern man will...)
Ein Java 1.1 fähiger Browser ist für die Darstellung des
Bernoulli-Bretts notwendig, denn das Applet benutzt ausschließlich
das ActionEvent-Schema von 1.1. HotJava1.0 oder jeder appletviewer eines
1.1.* JDK sollte funktionieren.
Was sieht man? (Falls man etwas sieht...)
Das Bernoulli-Brett ist ein Experiment zur Simulation einer diskreten,
binominalen Verteilung. Es besteht aus einem Satz (hölzerner) Rollen,
auf die Glasmurmeln fallengelassen werden. Eine Murmel fällt mit
einer spezifischen Wahrscheinlichkeit nach links oder rechts. Normalerweise
sind die Rollen kaskadiert, und für jede Rolle wird die gleiche
Wahrscheinlichkeit angenommen. Mit mehr als zwei Fächer am unteren
Ende sollte nach einer großen Menge von Murmeln sich eine symmetrische,
diskrete binominale Verteilung der Kugeln ausbilden, ähnlich der
Gaußschen Glockenfunktion. Bei einer Wahrscheinlichkeit ungleich 0,5
für den Fall nach links oder rechts wird diese Verteilung zur einen
oder anderen Seite hin verschoben.
Wozu ist das gut?
Mit dieser Anwendung kann ein interner oder selbstprogrammierter
Zufallsgenerator auf Verteilungsfehler getestet werden. Das einfachste
Experiment ist dabei eine Rolle und zwei Bahnen, in die die Murmeln
fallen können. Bei p=0,5 sollte sich nach vielen Murmeln etwa
in jeder Bahn gleichviel Murmeln gesammelt haben. Wenn nicht, so
besitzt der Zufallsgenerator einen systematischen Fehler.
Woher kommt das Bernoulli-Brett?
Im 17. Jahrhundert entwickelte Jakob Bernoulli (1654-1705)
die Bernoulli-Zahlen und arbeitete an Verteilungsproblemen. Sir Francis Galton
erfand das Brett zur Visualisierung der Binomialverteilung, weshalb das Brett
auch Galtonbrett genannt wird.
Nach einer etwas interessanteren Mathematik-Stunde hatte ich einmal
ein Bernoulli-Brett aus einem schweren Holzbrett, einem 4cm dicken, in
kurze Zylinder geschnittenen Rundholz und einigen zurechtgeschnittenen
Leisten für die einzelnen Fächer und den oberen Einlauf
gebastelt. Das praktische Problem dabei ist, daß die Murmeln
nie genau gleich dick sind, aber die Zylinder bzw. Rollen sehr genau
positioniert und geklebt werden müssen, damit die Murmel tatsächlich
mit etwa gleicher Wahrscheinlichkeit nach links oder rechts fällt. In
der Realität muß also der Zwischenraum zwischen den Rollen immer
etwas größer als in der Theorie vertretbar ausfallen (damit die
Murmeln nicht hängenbleiben), und deshalb fallen die Kugeln eher in
die mittleren Bahnen als von der Theorie her "gewünscht".
Das erste Programm zu diesem Experiment kam auf einem AtariST in alten
Zeiten (1987) mittels LineA-Routinen zustande und war hauptsächlich
zum Test von Zufallsgeneratoren gedacht, denn auf dem Atari war es keine
triviale Aufgabe, für Spiele einen guten nichtkorrelierenden
Zufallsgenerator zu schreiben. Das Atari-Programm war beileibe nicht so
schnell wie das Java-Applet, aber es besaß einige Zwischenschritte
in der Animation und man konnte mehrere Kugeln gleichzeitig fallen lassen.
(Andererseits war die Anzahl der Fächer limitiert, die Größe
der Objekte fix und der Bildschirm nur monochrom.)
Wozu sind die Knöpfe?
Der erste Knopf "Start!" startet einen neuen Lauf und setzt die Zähler auf
null.
Der zweite Knopf "Stop!" hält den aktuellen Lauf an und zeigt einige
Statistiken. Diese werden beim nächsten Start oder Weiterlaufen wieder
gelöscht.
Der dritte Knopf "Continue!" läßt den aktuellen Lauf weiterlaufen,
ohne die Zähler zu löschen. Für ein "Refresh" der Darstellung
kann man diesen Knopf ebenfalls benutzen.
Die Auswahl ("p=0.x") setzt die Wahrscheinlichkeit, mit der die Kugeln nach
rechts fallen. Diese zu verändern ist prinzipiell nur vor einem neuen
"Start!" sinnvoll, (da die Statistiken sich nur auf diese Wahrscheinlichkeit
und nicht auf die vorher gefallenen Kugeln beziehen,) aber man kann den Wert
auch nur so aus Spaß jederzeit ändern.
Mit dem Verschieberegler rechts läßt sich die Geschwindigkeit der fallenden Murmeln regulieren.
Was kann man sonst noch damit machen?
Im Quellcode sind drei "finals" enthalten, mit denen das Gesamtlayout
des Bretts verändert werden kann: "walzend" bestimmt die Dicke der
Rollen, "kugeld" die Dicke der Murmeln und "lanes" die Anzahl der Bahnen.
Die Anzahl der Bahnen sollte mehr als 1 und weniger als 21 betragen - mehr
als 1 aus logischen Gründen und weniger als 21, weil mit 64bit-Longs
in Java nur die Fakultät aus 19 noch berechnet werden kann und die
Statistiken nicht so "sophisticated" programmiert sind, daß
"n über k" vor der Berechnung optimiert wird. Die Breite der Rollen
und Kugeln sollte eine gerade Pixelzahl sein. Zum Übersetzen des
virtuellen Bernoulli-Bretts wird ein Java-1.1-fähiger Compiler
benötigt. Aber eigentlich... kann man mit dem Quellcode machen,
was man will...
-- jd --