Ein Bernoulli-Brett

Ein Bernoulli-Brett



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...

(Die Quelle)


-- jd --