Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
[Problem - 120.1.3] Änderung Linienfahrplan
#9
Für das finden dieses Wegpunktes hätte ich auch schon eine Idee wie das halbwegs performant ablaufen könnte.

Fahrplan der Linie wird geändert:
1. erstelle eine Kopie des "alten Fahrplans der Linie"
2. bestimme veränderte Blöcke im Fahrplan. (relativ aufwändig aber nur einmal für die gesamte Linie notwendig)
3. signalisiere allen Fahrzeugen die sich in einem veränderten Block befinden, dass sich ihr Fahrplan geändert hat.


Mit einem Block meine ich den Teil des neuen Fahrplans, der zwischen zwei Wegpunkten liegt die im alten und im neuen Fahrplan existieren, wobei der Wegpunkt am Ende des Blockes eingeschlossen wird, der Wegpunkt am Anfang nicht.
Bestimme blöcke im Fahrplan:
1. Suche einen Halt der im alten und im neuen Fahrplan existiert.
-Gibt es keinen solchen Punkt, wurde der gesamte Fahrplan verändert. (Sonderfall: Fahrplan ist leer)
-Gibt es einen solchen Punkt, merke diesen als Block Start.
2. Vergleiche auf den im alten Fahrplan auf den Startpunkt folgenden Punkt mit dem Wegpunkt der im neuen Fahrplan auf den Startpunkt folgt.
-Sind diese identisch, existiert an dieser Stelle keine Änderung. Der folgende Punkt wird als neuer Block Start betrachtet und es geht wieder zu Punkt 2.
-sind diese nicht identisch, wissen wir, dass es eine Änderung an dieser Stelle gab. Markiere den im alten Plan folgenden Punkt als Block Ende un untersuche dies in Punkt 3 genauer.
3. Suche den Block Ende Punkt im neuen Fahrplan
-existiert dieser, markiere den Bereich dazwischen (im neuen Fahrplan) als Block mit Veränderung, setzte Block Anfang=Block Ende und mache mit Punkt 2 weiter.
-existiert dieser nicht, wissen wir, dass der Punkt entfernt wurde. Markiere den im alten Fahrplan auf den Punkt Block Ende folgenden Wegpunkt als neues Block Ende und es geht wieder zu Punkt 3.

In Punkt 2 sollte man natürlich vom letzten Punkt zum ersten gehen und nur so lange weiter machen wie bis man dort angekommen ist wo man angefangen hat.


Fahrzeug Fahrplan erneuern (wird nur für Fahrzeuge aufgerufen, die sich in einem veränderten Block befinden):
1. suche Weg von aktueller Position des Fahrzeugs zu jedem Wegpunkt in dem Block in dem sich das Fahrzeug befindet.
2. wähle den "besten" Weg davon als Ziel aus.

Mir ist völlig klar, dass dies zwar einfach aussieht aber vermutlich der schwierigste Teil davon ist. Ich weiß allerdings nicht wie die Wegsuche für Fahrzeuge intern aussieht und habe da deshalb nur sehr grob beschrieben.
Punkt 1 dürfte größtenteils die Wegsuche für einen erledigen.
Punkt 2 hängt stark davon ab in welcher Form die Wegsuche die Route zurückgibt.
Der "beste" Weg ist in diesem Fall vermutlich der kürzeste Weg.

Durch das Vorgehen dürfte das ganze, verglichen mit der Variante, dass man für alle Fahrzeuge das aufruft was beim schließen des Fahrplanfensters passiert, für größere Linien meistens performanter ablaufen.
Ich muss echt mal C++ lernen... Irgendwie habe ich das Gefühlt immer wenn man meint die eine Sprache halbwegs verstanden zu haben, kommt etwas um die Ecke wofür man die nächste Sprache können muss...
Zitieren


Nachrichten in diesem Thema
[Problem - 120.1.3] Änderung Linienfahrplan - von Wurzelgnom - 03-11-2016, Thursday-15:24:03
[Kein Betreff] - von prissi - 04-11-2016, Friday-00:07:57
[Kein Betreff] - von Wurzelgnom - 04-11-2016, Friday-12:11:39
[Kein Betreff] - von Wurzelgnom - 09-11-2016, Wednesday-22:35:10
[Kein Betreff] - von partyschreck - 09-11-2016, Wednesday-23:29:12
[Kein Betreff] - von Wurzelgnom - 10-11-2016, Thursday-17:06:32
[Kein Betreff] - von Freahk - 10-11-2016, Thursday-23:42:12
[Kein Betreff] - von prissi - 11-11-2016, Friday-00:34:55
[Kein Betreff] - von Freahk - 11-11-2016, Friday-03:18:02
[Kein Betreff] - von prissi - 12-11-2016, Saturday-00:34:25
[Kein Betreff] - von Wurzelgnom - 12-11-2016, Saturday-00:46:40
[Kein Betreff] - von prissi - 12-11-2016, Saturday-02:11:06
[Kein Betreff] - von Freahk - 12-11-2016, Saturday-04:30:38
[Kein Betreff] - von Wurzelgnom - 12-11-2016, Saturday-11:35:47

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste