Genauso ist es auch bei BAHN. Beim Programmstart erfolgt eine Initialisierung des Zufallsgenerators mit der aktuellen Zeit.Philipp K. hat geschrieben:Normalerweise arbeiten Zufallszahlengeneratoren so, dass sie mit einem bestimmten "seed" gefüttert werden (damit die Zahlenfolge möglichst bei jedem Programmaufruf anders ist, wird dann gerne die aktuelle Systemzeit in Sekunden als Seed genutzt)...Das wäre mal einen interessanter Experiment für Programierer. Wenn man zum Beispiel 1000 mal einen RNG 100 Nummer drehen lässt auf niedriger und auf höhe Geschwindigkeit. Die durchschnittswerte sollte gleich bleiben, aber wird das wirklich so ?
Der Zufallsgenerator wird in BAHN an vielen Stellen genutzt. Dabei sind welche, die zur Simulation gehören und damit immer in der selben Reihenfolge gerufen werden sollten, z.B. zur Bestimmung der Wartezeit an Haltestellen, zur Entscheidung an Zufallsweichen und zur Entscheidung über Linienlisten mit Einträgen "p=..%". Alle diese wirken sich auch auf den weiteren Ablauf aus und damit auch auf die weitere Reihenfolge der Aufrufe.Philipp K. hat geschrieben: ...und dann eine immer gleiche Sequenz von Zufallszahlen erzeugen, unabhängig vom Timing der Aufrufe. Einzig der Zugriff auf den gleichen Zufallszahlengenerator durch zwei Threads oder anderweitig getauschte Reihenfolge der Berechnung der Zufallswerte kann die Folge beeinflussen.
Dazu kommen aber auch Aufrufe, die gar nicht zur Simulation gehören. Diese werden von der Simu also nicht beeinflußt, aber beeinflussen ggf. die Simulation. Der Zufallsgenerator wird von den meisten Animationen genutzt, also solche Dinge wie die Windräder, Schornsteine und Tiere. Diese werden aber nur berechnet, wenn sie sichtbar sind, also in einem offenen Editfenster oder nahe daneben/darüber/darunter, sofern dieses im Anzeigemaßstab 1:1 oder größer ist. Das heißt, der Aufruf des Zufallsgenerators hängt auch davon ab, wo sich der Betrachter gerade aufhält, wie groß das Fenster ist und welcher Maßstab dort eingestellt ist (und es kann mehrere Fenster geben...). Das Zeitraster für die Animationen basiert auf der Echtzeit, nicht auf der Simulationszeit, d.h. eine Änderung der Simulationsgeschwindigkeit verändert das Verhältnis zwischen beiden auch.
Kurzum: Auch wenn es sich nur um einen Pseudo-Zufallsgenerator handelt - nämlich den random() aus der Standardbibliothek von C - kann man davon ausgehen, daß die Ergebnisse tatsächlich sehr zufällig und nicht wiederholbar sind, weil immer äußere Einflüsse eingehen, z.B. wie der Anwender durch das Netz "wandert".
Grüße,
Jan B.