Zeitsprung vorab simulieren

Hier werden Wünsche für zukünftige neue Funktionen der Software gesammelt.
Antworten
Nachricht
Autor
simons
Beiträge: 4
Registriert: 21.01.2022 16:48:34

Zeitsprung vorab simulieren

#1 Beitrag von simons »

Es wird Zeit für mich vom stillen Mitleser zum Schreiber zu wechseln, denn:

Mir ist neulich aufgefallen, dass die aktuelle Implementierung des Zeitsprunges ziemlich ineffizient ist, weil doch eine nicht geringe Anzahl Computer jeden Tag annähernd die gleichen Berechnungen ausführen. Als (angehender) Physiker, also jemand der tagtäglich mit Simulationen zu tun hat, kam mir also die Idee, dass es wohl besser wäre den Zeitsprung (zumindest für noch nicht aufgegleiste Züge) vorab zu simulieren und zu speichern, oder wenigstens einen Cache von bereits ausgeführten Zeitsprüngen anzulegen. Dieses Vorgehen würde dann auch sicherlich die schon existierenden Performance-Probleme, wenn auch nicht lösen, dann aber geschickt umgehen (*hüstel* Maschen *hüstel*). Auf jeden Fall wäre es eine Entlastung für etwas schwächere Computer.

Folgende drei Gegenargumente sind mir schon eingefallen:

1. Das macht doch bestimmt viel zu große Dateien!
Ich habe mal anhand des TCP-Protokolls überschlagen, wie viel Speicherplatz die Daten eines Zuges benötigen (ich verbitte mir an dieser Stelle jeglichen Kommentar zu meiner Freizeitgestaltung :rolleyes: ), das Ergebnis sind ca. 3 KB. Wenn man davon ausgeht das ein Fahrplan 100 Züge enthält und der Fahrplan 12 Stunden Lang ist (=720 min), dann gibt das eine Dateigröße von (nur) 216 MB. Ich habe auch mal grob für den gesamten Bestand überschlagen und komme (nach oben hin geschätzt) auf 13 GB. Das ist zwar fast doppelt so viel wie Zusi jetzt einnimmt, aber für ein Spiel heutzutage (wo AAA-Titel jenseits der 100 GB liegen) immer noch ein Witz.

2. Dann bringt aber der Chaos-Wert nichts mehr und der Fahrplan verhält sich immer gleich!
Das stimmt natürlich, wobei man da ein bisschen Nachhelfen kann indem man die Position der KI-Züge (darf man die so nennen? NPC-Züge vielleicht?) mit einer Normalverteilung variiert, deren Standardabweichung vom Chaos-Wert abhängt (im übrigen eine Methode die ich auch für andere Dinge vorschlagen würde, wie zum Beispiel die Dauer des Fahrgastwechsels oder eine zufällige Fahrstraßenverzögerung um einen etwas umnachteten Fdl nachzustellen, aber das ist ein anderes Thema). Man kann außerdem auch die aktuelle Funktion des Zeitsprungs behalten, sodass Puristen ("Ich will aber das MEIN Computer das simuliert") so verfahren können wie bisher. Allerdings glaube ich nicht, dass es davon noch viele geben würde, denn

3. Bringt das überhaupt zeitliche Vorteile, wenn man so große Dateien lesen muss?
Ja! Ich habe mal Python drangesetzt eine 216 MB große Datei zu lesen (und mir sogar einen bestimmten Satz von 100 x 3 KB herauszusuchen) und das ganze hat ca. 1s gedauert. Also wenn Python das so schnell auf die Reihe kriegt, dann kann das jede kompilierte Sprache auf jeden Fall.

Ich habe im übrigen schon mal nach einem ähnlichen Vorschlag im Forum gesucht und bin nicht fündig geworden. Sollte ich also etwas übersehen haben bitte ich um Nachsicht.

Dann bleibt mir nur noch denen zu danken, die sich diese Textwand wirklich durchgelesen haben, ich bin gespannt auf eure Reaktionen.

Beste Grüße,
Simon

Benutzeravatar
Johannes
Beiträge: 3195
Registriert: 14.03.2009 22:36:06
Aktuelle Projekte: Zusitools (http://git.io/zusitools)

Re: Zeitsprung vorab simulieren

#2 Beitrag von Johannes »

simons hat geschrieben: 03.02.2022 10:38:44indem man die Position der KI-Züge (darf man die so nennen? NPC-Züge vielleicht?) mit einer Normalverteilung variiert
"Zugpositionen variieren" klingt gänzlich nichttrivial, wenn man den Zug nicht einfach auf einer freien Fahrstraße ein paar Meter hin oder zurück schieben will. Bedenke auch den Schmetterlingseffekt, der in einer echten Simulation durch den Zufall entsteht. Den kannst du mit so was nicht abdecken.
simons hat geschrieben: 03.02.2022 10:38:44Ich habe im übrigen schon mal nach einem ähnlichen Vorschlag im Forum gesucht und bin nicht fündig geworden.
Es gibt den langjährigen Programmwunsch "Simulationsstand speichern und laden". Der wäre quasi eine Voraussetzung für deine Idee.

Flo Zille
Beiträge: 201
Registriert: 15.05.2018 09:06:32

Re: Zeitsprung vorab simulieren

#3 Beitrag von Flo Zille »

Ich finde, dass der Aufwand, der in so ein Unternehmen mutmaßlich gesteckt werden müsste, besser an anderer Stelle investiert wäre. Zum Beispiel in die Beschleunigung des Zeitsprungs, da wurden ja glaube ich Optimierungspotentiale ausgemacht (die Zeitsprunggeschwindigkeit hängt davon ab, wo in der Zusi-Welt sich die DirectX-Kamera gerade befindet – und während des Zeitsprungs betreibt Zusi einen gewissen Aufwand für die Erzeugung der 3D-Soundeffekte, was wohl unter Windows irgendwie stummgeschaltet ist, unter wine fällt es aber auf – beides deutet darauf hin, dass während des Zeitsprungs Audio- und Grafik-Dinge berechnet/simuliert werden, die eigentlich mangels Sicht-/Hörbarkeit gar nicht nötig wären und vielleicht eine Beschleunigung schon durch relativ simples "Kamera während des Zeitsprungs irgendwo in die Einöde teleportieren, weit weg von jeglichen Schienen, Zügen, Gebäuden etc.").

Sebastian Leonow
Beiträge: 375
Registriert: 13.06.2003 00:27:25
Wohnort: Bochum

Re: Zeitsprung vorab simulieren

#4 Beitrag von Sebastian Leonow »

Auch die Reduzierung der Sichtweite auf 0 (bzw. 3 Meter) bringt deutliche Verbesserung, das stelle ich mir relativ einfach zu Implementieren vor. Sichtweite runter, animierte Uhr, Screenshots oder einen Ladebalken einblenden, fertig (so sieht es in meinem Kopf aus, kann natürlich deutlich aufwendiger sein).

Bei dem vorgeschlagenen Konzept des Vorab-Durchrechnens müsste dann aber auch bei jeder Fahrplanänderung diese Berechnung wieder gestartet werden, bzw. müssten die Daten mit dem Fahrplan auf Übereinstimmung geprüft werden. Stelle ich mir nicht trivial vor. Außerdem kommen dann für jeden Fahrplan nochmal ca.100 MB hinzu, im Vergleich zur Größe der schlanken Fahrplan-Textdateien schon gewaltig...

Benutzeravatar
F. Schn.
Beiträge: 6607
Registriert: 24.10.2011 18:58:26

Re: Zeitsprung vorab simulieren

#5 Beitrag von F. Schn. »

Besagte Bugmeldung ist hier: viewtopic.php?f=55&t=16846

Ganz generell ist die Frage, wie man die Wartung der Speicherstände und die Abhängigkeiten zu eventuell modifizierten Fahrplänen oder gar Streckenmodulen sicherstellt. Rein technisch dürfte es vermutlich recht gut gehen, Speicherzustände der Sim zu erzeugen, wenn man in Kauf nimmt, die PZB nach dem Laden nur in Grunstellung zu haben, weil dann vermutlich der Hauptanteil "nur" noch beim ZusiFdl liegen würde. Aber Implementierungsaufwand ist es trotzdem einiger. Und bei den Abhängigkeiten zu Modifikationen fällt mir gerade noch nicht mal eine Idee ein... Puh... Ich würde raten, dass es einfacher ist, den oben genannten Bug zu fixen. ;) (Aber ich weiß es natürlich nicht.)
Diese Signatur möchte folgendes bekannter machen: ZusiWiki · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat

Alwin Meschede
Beiträge: 8920
Registriert: 04.11.2001 19:57:46
Aktuelle Projekte: Zusi3 Objektbau
Kontaktdaten:

Re: Zeitsprung vorab simulieren

#6 Beitrag von Alwin Meschede »

Ich würde im Rahmen eines "Abspeichern"-Features nicht versuchen wollen, den ganzen Simulationszustand abzuspeichern, sondern für jeden Zug nur die aktuell belegte Fahrstraße und den Stand des Fahrplanzeigers. Dann Anfahren aller Züge aus dem Stand. Dadurch vereinfacht sich die Sache ganz erheblich.
Mein Youtube-Kanal: youtube.com/echoray1

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33375
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

Re: Zeitsprung vorab simulieren

#7 Beitrag von Carsten Hölscher »

Aber das wird halt auch zu Fehlern führen, die dann deutlichen EInfluss auf die Simulation haben können, mal ein Beispiel: Ein ETCS-Zug geht dann in SR neu ins Rennen und schleicht bis auf weiteres mit 40 km/h. Läßt sich beliebig auf ganz viele Fragestellungen erweitern.

Carsten

Nachzugler
Beiträge: 172
Registriert: 12.12.2019 19:42:27

Re: Zeitsprung vorab simulieren

#8 Beitrag von Nachzugler »

Ich dachte, das Thema wäre älter. Da ich es gerade gefunden habe, gebe ich auch mal meine Meinung dazu ab.
Alwin Meschede hat geschrieben: 03.02.2022 22:39:53 Ich würde im Rahmen eines "Abspeichern"-Features nicht versuchen wollen, den ganzen Simulationszustand abzuspeichern, sondern für jeden Zug nur die aktuell belegte Fahrstraße und den Stand des Fahrplanzeigers. Dann Anfahren aller Züge aus dem Stand. Dadurch vereinfacht sich die Sache ganz erheblich.
Warum (nicht)?
Nehmen wir an, ein (zukünftiger großer) Fahrplan hätte zu einem bestimmten Zeitpunkt 1000 geladene Züge mit jeweils 50 Wagen (inklusive Lok), und jede(r) Wagen/Lok hätte 100 Werte (x,y,z-Position, drei Drehwinkel, Geschwindigkeit, Bremsdruck, bei Loks noch PZB- und LZB-Zustand, Brems- und Leistungshebelstellung, Türwahlschalter...) mit jeweils acht Byte (Datentyp double bzw. long), dann wären das pro Speicherzeitpunkt ca. 40 MB. Verdoppelt man den Wert noch, weil die Zustände der Streckenelemente (Weichen, Signale, Bahnübergänge, Fahrstraßen...) noch gespeichert werden müssen, sind es etwa 80 MB. Das mal 12, um an einem Tag alle zwei Stunden einen Zwischenstand zu haben, wären weniger als ein Gigabyte (also pro 24 Stunden, nicht pro Zwischenspeicherstand).

Das ist heute nicht mehr besonders viel. Lass es mal 500 Fahrpläne sein, dann sind das 500 GB. Die müsste ja nicht jeder haben, sondern die könnten ja einzeln zum Download angeboten werden.
Dazu muss man bedenken, dass die angenommenen Werte sehr pessimistisch sind. Am Ende dürfte die Dateigröße also noch deutlich darunter liegen.
F. Schn. hat geschrieben: 03.02.2022 22:06:12 Aber Implementierungsaufwand ist es trotzdem einiger.
Ich bin in der Implementierung von Zusi nicht drin, aber grundsätzlich sehe ich nicht so das Problem, die Simulation anzuhalten, für jedes Objekt alle veränderlichen Werte zu speichern und später wieder jedes Objekt mit den gespeicherten Werten zu erzeugen. Beim Starten müssen die einzelnen Objekte (Wagen) sowieso geladen werden. Und ob man das mit Standardwerten oder mit gespeicherten Werten macht, ist ja kein Unterschied. Oder anders gesagt, es gibt Züge, die im Stehen aufgegleist werden und welche, die in Fahrt aufgegleist werden. Es ist also (fast) alles schon da.
simons hat geschrieben: 03.02.2022 10:38:44 2. Dann bringt aber der Chaos-Wert nichts mehr und der Fahrplan verhält sich immer gleich!
Das stimmt natürlich, wobei man da ein bisschen Nachhelfen kann indem man die Position der KI-Züge (darf man die so nennen? NPC-Züge vielleicht?) mit einer Normalverteilung variiert,
Das muss man doch gar nicht. Wenn man in einem Fahrplan von 6-14 Uhr einen Zug um zehn nach zwölf startet, muss man ja nicht den Speicherstand von zwölf Uhr nehmen, sondern kann auch den von zehn Uhr nehmen (nur als Beispiel). In den zwei Stunden kann genug Chaos entstehen. Und wer will, kann immer noch von Anfang an durchsimulieren und muss keinen Zwischenstand laden.
Sebastian Leonow hat geschrieben: 03.02.2022 12:28:33 Bei dem vorgeschlagenen Konzept des Vorab-Durchrechnens müsste dann aber auch bei jeder Fahrplanänderung diese Berechnung wieder gestartet werden,
Das ist ja kein Problem. Aktuell muss diese Berechnung selbst bei unverändertem Fahrplan jedes einzelne Mal bei jedem einzelnen Nutzer gestartet werden. Wenn ein Fahrplan von vier Nutzern durch Zeitsprung jeweils 25 % durchgerechnet wird, wurde (rein rechnerisch) der gesamte Fahrplan durchgerechnet. Da aber ein Fahrplan nicht nur von vier Nutzern gefahren wird (nehme ich an), geht so sehr viel Rechenzeit und Energie verloren, die man eigentlich nur einmal bräuchte.
Oder anders gesagt, man kann es pro Fahrplan einmal durchrechnen oder man kann es pro Fahrplan hunderte Male durchrechnen. Aktuell ist das zweite der Fall.
Sebastian Leonow hat geschrieben: 03.02.2022 12:28:33 bzw. müssten die Daten mit dem Fahrplan auf Übereinstimmung geprüft werden.
Das stimmt allerdings, sollte sich aber zum Beispiel mit Hashes jedes Moduls und jedes Fahrplans leicht kontrollieren lassen.

Ich halte das Aufwand-Gewinn-Verhältnis in dem Fall für sehr positiv in Richtung Gewinn. Wie schon angemerkt, hätte man dann auch das Zwischenspeichern direkt miterledigt, was ja bei durchgehenden Fahrplänen, von zum Beispiel von Hamburg bis Kassel, sicher sinnvoll wäre.

Das sind meine Gedanken und Wünsche zu dem Thema und soll natürlich nicht als Forderung verstanden werden. Ich weiß auch, dass auch einfache Programmieraufgaben nicht mal so eben erledigt sind.

Benutzeravatar
Jens Schubert
Beiträge: 167
Registriert: 05.10.2006 23:54:25
Wohnort: Dorfen

Re: Zeitsprung vorab simulieren

#9 Beitrag von Jens Schubert »

Hallo allerseits,

beim Thema Zeitsprung würde ich mir wünschen, dass bei einem noch nicht aufgegleisten Zug der Zeitsprung nur bis zum Zeitpunkt der Aufgleisung läuft.
Dann kann man in Ruhe alle Vorbereitungen für die Fahrt treffen und ggf. mit erneutem Zeitsprung zur Abfahrtszeit (bzw Zeitpunkt der Zustimmung zur Abfahrt) gelangen.

Grüße
Jens

Antworten