Interessanter Beitrag, weil sich anhand der Zugnummern und Positionen die Situation genau nachstellen lässt. Ich habe mal versucht, das aufzuzeichnen:Josch hat geschrieben:Ich teste gerade in mehreren Durchläufen die Chaosfunktion mit der Einstellung 80. Ich habe dafür den Gag 57566 (BR 120 Himmighausen > Altenbeken) bis Langeland gefahren und stehe dort nun auf dem rechten Gleis am Hp0. Links neben mir steht der Dg 53842 (BR 216 Bad Driburg > Altenbeken). Links neben diesem ist kurz darauf auch noch der E 5912 (BR 216 Bad Driburg > Altenbeken) eingefahren und außen auf der Umfahrung stand der Dstg 80248 (BR 260 Himmighausen > Altenbeken).
All diesen Zügen standen am Langelander Ende des Rehbergtunnels aus Altenbeken kommend entgegen: auf dem rechten Gleis der N7910 (BR 110 Altenbeken > Himmighausen) und daneben der E 3541 (BR 216 Altenbeken > Bad Driburg).
Die blauen Quadrate sollen (fiktive) Fahrstraßenregister darstellen. Ich frage mich nun, ob man einen solchen Deadlock, wenn nicht vermeiden, dann doch erkennen kann. (In komplexeren Netzen kann so etwas sicher auch ohne 80% Chaosregler auftreten.) Der Benutzer könnte dann (falls sein Zug von dem Deadlock betroffen ist) eine gut verständliche Meldung erhalten. Man könnte dann in einem weiteren Schritt eine Empfehlung abgeben, welcher Zug aus der Simulation entfernt werden muss, damit der Betrieb wieder zum Laufen kommt.
Für einen Deadlock müssen vier Bedingungen erfüllt sein. Drei davon sind in einer Eisenbahnsimulation immer erfüllt (1. ein Gleis kann immer nur durch einen Zug belegt sein (Mutual Exclusion), 2. ein Zug belegt ein Gleis und will weitere Gleise belegen (Hold and wait), 3. man kann einem Zug sein belegtes Gleis nicht wegnehmen (No preemption)). Die vierte ist eine Anforderung an die aktuelle Situation und besagt, dass eine zyklische Abhängigkeit zwischen den Zügen bestehen muss (Circular Wait).
Diese zyklische Abhängigkeit kann man mit Hilfe des sogenannten Resource Allocation Graph finden. Die Fahrstraßenregister sind hier durch graue Quadrate dargestellt. Eine dicke Linie Fahrstraßenregister → Zug bedeutet, dass der Zug dieses Register belegt hält. Eine Linie Zug → Fahrstraßenregister bedeutet, dass der Zug dieses Register für seine nächste Fahrstraße belegen möchte (anfordert). Außerdem muss noch berücksichtigt werden, dass ein Zug mehrere alternative Fahrwege haben kann. Diese werden jeweils durch nummerierte Rauten dargestellt und haben eigene Registeranforderungen.
Die vierte Deadlock-Bedingung besagt nun, dass man in diesem Graphen einen gerichteten Kreis finden muss (also einen Pfad, der den Pfeilen folgt und wieder zum Ausgangspunkt zurückkehrt). Außerdem müssen wieder die alternativen Fahrwege berücksichtigt werden: Es sollte die Bedingung genügen, dass für jeden Zug, der im Kreis auftaucht, jeder seiner möglichen Fahrwege in einem Kreis liegen muss.
Tatsächlich finden wir in diesem Graphen einen solchen gerichteten Kreis (wegen der Fahrwegalternativen ist es eher ein „zyklischer Subgraph“):
Damit ist klar, dass ein Deadlock existiert, der nicht ohne Löschen eines Zuges aufgelöst werden kann. Hier würde das Löschen von Dg 53842 den Deadlock auflösen (wobei dann E 3541 das durch diesen Zug belegte Register zugesprochen bekommen sollte). Der Deadlock würde übrigens sogar ohne die Züge Gag 57566 und E 5912 auftreten.
Was bringen diese theoretischen Überlegungen? In Zusi selbst wäre solch eine Spezialfunktion sicher falsch aufgehoben. Was man sich aber durchaus vorstellen könnte, ist, ein Plugin für so etwas zu entwickeln. Es bräuchte Zugriff auf sämtliche Stellwerksdaten (Züge, Register, Fahrstraßen) sowie die Fahrpläne der Züge. Man könnte periodisch nach Deadlocks suchen oder wenn ein Zug außergewöhnlich lange steht. Natürlich wären optimierte Algorithmen nötig, um auch bei dutzenden von Zügen und hunderten von Registern in vernünftiger Zeit die Berechnung zu Ende zu führen. Hilfreich könnte das auch für Fahrplanbastler sein, die wissen wollen, wann und wo sich ihr Fahrplan zufährt.
Warten wir also mal die Plugin-Schnittstelle von Zusi ab . Oder ist es eventuell sogar geplant, solch eine Funktionalität in Zusi zu integrieren? Oder hat es jemand sogar schon versucht und ist gescheitert? Bestünde denn generell Interesse an solch einer Funktion?
Grüße
Johannes