Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
intelligentere Signale
#1
Hi Community,
Ich habe hier im Forum bereits ein wenig gesucht und auch etwas ähnliches wie meinen ersten Vorschlag gefunden.

Ich stoße besonders in der frühen und späten Spielphase immer wieder an die Grenzen des aktuellen Signalsystems.
Eines der Probleme sind stark befahrene Hauptstrecken, auf denen Züge durch andere von Nebenstrecken kommende Züge immer wieder ausgebremst werden.
Hier wäre es nütlzich ein leicht verändertes 2-Block-Signal bzw. n-Block-Signal zu haben.
Sei n eine natürliche Zahl, so sollte dieses die nächsten n Blöcke reservieren, falls diese frei sind. Wenn nicht, sollte es die maximal mögliche Anzahl Blöcke im vorraus reservieren. Auf rot schalten sollte es genau wie ein "normales" Simutrans Signal nur dann, wenn der nächste Block belegt ist.


Da ich besonders in den ersten Jahren häufig eingleisige Streckenabschnitte baue, stoße ich auch hier immer wieder auf die Grenzen des aktuellen Signalsystems. Aber auch bei späteren größeren Netzen sin im Bahnhof wendende Linien an Knotenpukten immer wieder ein Problem und können deadlocks erzeugen.


Die Situation im ersten Fall sieht meistens wie folgt aus, wobei H für Halt steht, Punkte nur Platzhalter sind und der Rest glaube ich selbsterkläerend ist.

1.................2...................3..............4
HHHH------HHHH----\____HHHH____/HHHH
........\-----HHHH----/.....................\HHHH

Jetzt hat man mehrere Möglichkeiten Signale zu setzen:
1. keine Signale bzw. nur je ein Richtungssignal an der Ausfahrt des Bahnhofs
Es wird irgendwann dazu kommen, dass im Bahnhof in der Mitte ein Zug in die linke Fahrtrichtung steht und alle Bahnsteige der Bahnhöfe links davon ebenfalls blockiert sind.
2 Block Signale bringen hier auch nichts, da in diesem Fall durch den Wegpunkt trotzdem nur ein Block weiter gesehen wird.

Long-Block Signale an den Ausfahrten in Richtung des eingleisigen Bahnhofs in der Mitte sind also der einzige Weg der ein deadlock vermeiden kann (oder ich habe etwas übersehen)
Das Problem ist dabei ist aber, dass der Durchsatz stark leidet, da immer der gesamte Block "gesperrt" wird.

Annahme: Es kommen von Rechts 5 Züge an, alle Bahnsteige sind bisher frei.
Dann fährt der erste in Bahnhof 4 ein, fährt danach zu Bahnhof 3 und nach Bahnhof 2. Der 2. Zug fährt in der Zwischenzeit in Bahnhof 4 ein und wartet dort.
Dieser fährt erst dann wieder los, wenn der 1. Zug Bahnhof 2 verlassen hat. Er könnte aber ohne Probleme schon los fahren, wenn der 1. Zug Bahnhof 3 verlassen hat.
Danach fährt der 1. Zug weiter zu Bahnhof 1 und zurück zu Bahnhof 2, der 2. Zug tut das was Zug 1 vorher getan hat und Zug 3 rückt an Stelle von Zug 2.
Jetzt haben wir den Engpass zwischen Bahnhof 2 und 4, da beide Richtungen dort durch wollen und logischerweise nur eine Richtung gleichzeitig geht. Zug 1 ist aus Halt 2 ausgefahren, Zug 2 wartet noch in Bahnhof 2, Zug 3 steht schon davor bereit und Zug 4 steht wartend in Bahnhof 4.

Das ist die (recht häufig auftretende) Situation, die zu sehr schleppendem Verkehr führt.

Zug 1 wird irgendwann den Bereich verlassen haben, dann wird Zug 4 von Rechts einfahren, dann fährt Zug 2 durch, dann Zug 5 von Rechts, danach Zug 3 und danach Fahren die Züge 4 und 5 wieder nach Rechts raus.
Es dauert also 5 Durchfahrtszyklen, bis Die Züge 1, 2 und 3 rechts raus sind und die Züge 4 und 5 sich im linken Teil befinden.



Würde es möglich sein mit mehreren Zügen den einglesigen Bereich zu befahren, so lange all diese Züge die selbe Fahrtrichtung haben, würde sich das ganze auf 2 < Durchfahrtszyklen < 5 verkürzen. Praktisch wird es so um die 3 Zyklen dauern, stark abhängig davon wie viele Züge gleichzeitig im (Long-)Block sein können (Signalabstand) und wie lange diese im Bahnhof in der Mitte zum be/entladen benötigen.



Nach diesen Überlegungen mein Vorschlag, wie man so etwas so umsetzen kann, dass es einerseits einen deutlichen Vorteil gegenüber dem aktuellen Long-Block System gibt und andererseits einfach zu handhaben und für den Spieler verständlich ist:
Dazu bräuchte man Signale, die ähnlich dem aktuellen Long-Blocksignal einen großen Block definieren und man bräuchte dazu passende Block Ende Signale.
Innerhalb eines Blockes kann man frei normale Signale und Richtungswechsel-Signale stellen.
Wenn auf der einen Seite ein Zug einfährt, werden alle Wechsel-Signale, die dieser Zug von der Einfahrt bis zur Ausfahrt überfahren würde als Einweg-Signale geschaltet.
kommt hinter diesem Zug ein weiterer Zug in die selbe Fahrtrichtung, wird dieser bereits richtig geschaltete Signale vorfinden und nach der normalen Regel der aktuellen Pfadsignale hinter dem vorherfahrenden Zug her fahren. Im Beispiel wären jetzt 3 Züge von 2 nach 4 fahrend im Block, vorrausgesetzt dazwischen stehen genügend dieser Wechselsignale.
Die Züge die von 4 nach 2 wollen müssten warten.

Dadurch entsteht allerdings ein Problem. Es kann wieder zu deadlocks kommen, wenn der eingleisige Bereich in Richtung 4->2 geschaltet ist und fröhlich neue Züge von 4 ankommen.
Das Problem könnte man aber sehr einfach lösen, indem ein solcher Block die Anzahl der Fahrzeuge im block zählt und der Spieler selbst entscheiden kann wie viele Fahrzeuge sich gleichzeitig im Block befinden dürfen.

Dieses Problem kann übrigends auch bei den aktuellen Long Block Signalen auftreten, wenn man kurz unachtsam ist und zu lange Züge auf die Strecke schickt.

Zu beachten ist, dass die Signale dazu etwas anders zu stellen sind als man es von aktuellen Long-Blocks gewohnt ist. Bahnhof 1 und 2 müssten noch zum Block gehören, damit das Problem durch "zählen" gelöst werden kann. Ich habe das nochmal kurz skizziert.


Beschriftung wie Oben, zusätzlich E als Einfahrtssignal, A als Ausfahrtssignal und W als Wechselsignal.
1.................2...................3....................4
HHHH------HHHH----\____WHHHHW____/EHHHH
........\-----HHHH----/...........................\AHHHH


Ein weiteres (bei mir häufig auftretendes Problem) Sind viel befahrene Bahnhöfe in denen gewendet wird.

----HHHH------+----+-HHHH----
.....HHHH-+---/./---+-HHHH
----HHHH-+----+------HHHH----
Auf dem mittleren Gleis wird nur gewendet, auf den anderen im rechtsverkehr durchgefahren.
Jetzt kann es passieren, dass zwischen den Bahnhöfen die Gleise voller wartender Züge sind und schon hat man einen deadlock (der noch dazu unheimlich lästig zu entknoten ist)
Lösungsmöglichkeiten aktuell:mit Brücken und Tunneln arbeiten und so dafür sorgen, dass NIEMALs 2 in unterschiedlichen Bahnhöfen in entgegengesetzter Richtung wendend Züge die gleiche Strecke zwischen diesen Bahnhöfen nutzen oder alternativ einen Long-Block nutzen.

Die 2. Lösung sorgt dafür, dass die Kapazität gegen 0 läuft, ist also keine Option.
Die Skizze ist auch nur schematisch zu betrachten. Ingame sind das zwei unterschiedliche, weit von einander entfernte Bahnhöfe mit ggf. noch einigen anderen Bahnhöfen dazwischen.

Die 1. Lösung ist nett und kommt bei mir auch recht häufig zum Einsatz, ist aber manchmal nicht gut machbar, da nicht genügend Platz vorhanden ist oder man einen ganzen Block hoch und wieder runter fahren müsste, was deutlich ausbremst.
Besonders wenn nur einige wenige Züge dort wenden, ist es häufig eher seine Notfalllösung.

Auch hier wäre es super einfach sagen zu können, dass sich im Bereich zwischen den beiden Bahnhöfen maximal eine bestimmte Anzahl Züge befinden darf.
Zitieren
#2
Herzlich Willkommen im Forum!

Das von Dir als n-Block Signal beschriebene Signal würde aber die Kapazität der Strecke deutlich heruntersetzen. Wenn n=5 wäre, würde der Zug die nächsten 5 Blocks reservieren, aber die kann er nur alleine benutzen. Ist bereits 1 Zug eingefahren, muß der nachfolgende warten, bis der Zug die 5 Blocks verlassen hat, erst danach kann er in den 5er Block einfahren. Dadurch sind immer 4 Blocks unbenutzbar für andere Züge. Dadurch verringert sich die Kapazität der Streck auf ein 1/5 der max Kapazität.

Eingleisige Strecken sind immer dann kritisch, wenn mehrere Züge verkehren sollen. Sind mehr Züge auf der Strecke, als Ausweichstellen vorhanden, ist der Deadlock unausweichlich. Das ist bei großen Kreuz und Quer verbundenen Netzen ganz schnell passiert. Da Züge bei Blockaden, oder ungeplanten Querverbindungen gerne mal einen Umweg fahren. Und dann in Streckenabschnitten landen, können wo sie garnicht vorgesehen waren.

Hast Du schon mal mit Ausweichstellen in den eingleisigen Strecken gearbeitet?

Ich fände eine Priorisierung der Züge viel interessanter, als eine Änderung am Signalsystem.
Mag daran liegen das ich es recht gut kenne, und damit keine Problem habe.
Mein Wunsch wär da eine Unterteilung und damit eine Priorisierung der Züge. Vorrang für Express Passagierzüge, dann normale Passagierzüge, und am Schluß die Frachtzüge. Wobei die Einstellung bei den Passagierzügen jederzeit im Zugfenster geändert werden könnte. Also dort einfach einen Schalter für Expresszug einbauen. Ist der geschaltet erhält der Zug Vorrang vor normalen Passagierzügen bzw. vor der Fracht. Treffen 2 Expresszüge an einer Weiche aufeinander, sollte die bisherige Regel gelten. Wer zuerst kommt, darf auch zuerst fahren.
Zitieren
#3
In Prinzip ist beides möglich.

Steht ein Vorsignal vor einem Vorsignal, wird auch der nächste Vorangehende Block reserviert. Stehen also vier Vorsignale voreinander, wirkt das wie ein Block.

Priorisierung hieße vermutlich ab wieviel Kästchen im voraus ein Zug das nächste Signal sucht. Im Moment sind es vier; man könnte das aber von der zulässigen Höchstgeschwindigkeit abhängig machen, ein Kästchen pro 50 km/h. Das würde automatisch alle schnelleren Züge priorisieren.
Zitieren
#4
Als ich angefangen habe Simutrans zu spielen hatte ich auch eine Idee, von der ich mir Besserung für solche kombinierten ein-und zweigleisigen Abschnitte versprach.
Ein Zweiblocksignal. das nur in einer Richtung funktioniert ohne die Gegenrichtung zu sperren.
Und obwohl ich das Signal nach wie vor reizvoll finde, merkte ich danach schnell, dass die Bauweise, für die ich mir das Signal vor allem wünschte, ohnehin kritisch war.
Man kann das meist nur an abgelegenen Stellen in der Anfangsphase eines Spieles gebrauchen und wenn man da wirklich Geld für Infrastruktur sparen möchte. kommt man mit dem Langblocksignal aus.
Sobald das Aufkommen größer wird, braucht man meist klar strukturierte Netze. Die von The Transporter erwähnten Ausweichweichstellen sind da eine Möglichkeit im Bahnhofsbereich.
Zitieren
#5
Vielen Dank Transporter
In der Tat würde die Kapazität drunter leiden, wenn man diesen Wert zu groß wählt, da Züge es dann kaum noch schaffen von der Nebenstecke auf die Hauptsrecke zu wechseln. In der Praxis würde man deshalb vermutlich auch nur einen Wert von 2 oder 3 wählen.
Dafür sind die Züge die auf der Hauptstrecke fahren aber auch fast immer mit voller Geschwindigkeit unterwegs und geben somit auch schneller das Gleis wieder für Züge die auf der Nebenstrecke warten frei, was bei schnellen Strecken (280 km/h+) Durchaus dafür sorgen kann, dass zwar zwischen den Zügen im Schnitt größere Lücken sind, die Kapazität aber trotzdem höher ist.
Zitat: Ist bereits 1 Zug eingefahren, muß der nachfolgende warten, bis der Zug die 5 Blocks verlassen hat
Dann hast du mich falsch verstanden. Ein Zug reserviert nur dann, wenn n Blöcke frei sind diese im Vorraus. Wenn dies nicht möglich ist, reserviert er eben nur n-1, n-2, ... ,1 Blöcke.
Sobald der Zug also an einem Abzweig vorbei ist, kann der andere Zug auf die Hauptstrecke auffahren. Vorrausgesetzt es kommt nicht schon der nächste Zug auf der Hauptstrecke, denn dieser soll eben nicht ausgebremst werden.

Klar habe ich schon mit Ausweichstellen gearbeitet. Ich kann dir aber trotzdem in fast jedem beliebigen Streckennetz mit eingelsigen Abschnitten einen deadlock konstruieren, den man durch die aktuellen Signale nicht (sinnvoll) verhindern kann. Auch in Fällen in denen deutlich mehr Ausweichstellen als Züge existieren.

Eine Priorisierung der Züge (bzw. einfacherweise wohl eher der Linien) fände ich auch toll. Die Idee ist aber genauer betrachtet schon ziemlich eng mit meiner verbunden.
Da (fast) nie zwei Züge gleichzeitig so an einem Signal ankommen, dass sie die gleiche Strecke reservieren wollen, müssten auch hier erstmal mehrere Blöcke im Vorraus reserviert werden.
Kommt nun ein Zug höherer Priorität an und befindet sich 3 Blöcke vor dem bereits von einem niedrigeren Zug reservierten Zug, so überschreibt er diese Reservierung einfach.

Im Endeffekt ist es also fast die selbe Idee wie ein n-block Signal. Der kleine Unterschied ist nur, dass im Falle des n-block Signals der Strecke mit diesen Signalen die Priorität gegenüber der Strecke mit dem normalen Signal gegeben wird. In deinem Falle wird die Priorität einem Zug bzw. der Linie die Priorität gegeben.

Mir fallen Spontan Pros und Contras für beide Ansätze ein:

Priorisierte Strecken:
+Es wird sichergestellt, dass der Verkehr auf der Hauptstrecke nicht zum stocken kommt.
-Es kann sein, dass ein schneller Zug der von einer Nebenstrecke kommt auf einen langsameren Zug der sich auf der Haupstrecke befindet warten muss und danach hinter diesem herschleicht.

Priorisierte Züge/Linien:
+schnelle Züge müssen an Abzweigen nicht auf langsamere warten. Es wird unwahrscheinlicher, dass ein schneller Zug hinter einem langsamen her fährt.
-Wenn häufig höherwertige Züge von den Nebenstrecken auf die Haupstrecke wollen, werden die Züge auf der Haupstrecke häufig runter gebremst. Dadurch wird der Vorteil dieser Variante wieder deutlich abgeschwächt, da Züge niedrigerer Priorität häufig warten müssen und sich dahinter die schnelleren Züge stauen werden

Eine Mischung aus beiden wäre imho eine gute Idee. Die Umsetzung wird dadurch aber schwieriger und die verständlichkeit des Systems leidet auch darunter.
Dies könnte dann wie folgt aussehen:
Man führt ein "Huaptstreckensignal" ein.
Jeder Linie kann eine Priorität zwischen 1 und 5 zugewiesen werden. Diese gibt an wie viele Blöcke vorbehaltlich reserviert werden sollen.
Kommt jetzt von einer Nebenstrecke mit normalen Signalen ein Zug und möchte einen bereits reservierten Bereich eines Zugs auf der entsprechend signalisierten Hauptstrecke haben, so kann er diesen Bereich ungeachtet der Priorität nicht reservieren und muss warten.

Wenn der Zug von der Nebenstrecke den Bereich bereits reserviert hat bevor der Zug mit niedriger Priorität von der Hauptstrecke diesen haben möchte, so kann dieser die Reservierung nicht überschreiben.

Anders herum, wenn auf der Hauptstrecke ein Zug hoher Priorität fährt und ein Zug niedrigerer Priorität von der Nebenstrecke bereits einen Block reserviert hat, den der höhere Zug haben möchte, so wird die Reservierung einfach überschrieben.

Der 4. Fall ist klar: Vorher gekommen, höhere Priorität, der auf der Nebenstrecke muss warten.

Dadurch kann man zwar die Nachteile nicht komplett entfernen aber vermutlich deutlich abschwächen. Ein Signal bzw. Prioritätssystem das sich immer optimal verhält wird es nicht geben. Dazu müsste man vermutlich das Spiel immer um einige Zeit im Vorraus simmulieren und Simutrans müsste intern jeweils sehr viele Varianten durchtesten, um die beste herauszufinden. Das wäre also theoretisch durchaus machbar, praktisch wird man da aber sehr schnell an die Grenzen heutiger Rechner stoßen.

Für den Fall, dass auf beiden Strecken normale Signale bzw. nur Hauptsreckensignale gesetzt sind, entscheidet nur die Priorität.

Prissis Ansatz die Priorität in Abhängigkeit von der Geschwindigkeit automatisch zu setzen gefällt mir. Nur ist ein Block pro 50km vermutlich zu viel für schnelle Züge (8 Blöcke für die ganz schnellen 400 km/h Teile und schon schafft es niemand mehr auf eine Strecke mit diesen Zügen aufzufahren... Züge mit weniger als 100 km/h dürften zu einem Zeitpunkt wo ein solches System notwendig wird wohl auch eher selten vorkommen.
Es könnte sinnvoll sein das ganze exponenziell wachsen zu lassen. Also z.B. 80, 120, 180, 270, 400+

@Partyschreck Ja genau in diesen Anfangszeiten, aber auch im späteren Spielverlauf in Straßenbahnnetzen und bei besagten 2 Bahnhöfen in denen in entgegengesetzter Richtung gewendet wird würde ich mir ein solches Sytsem wünschen, wobei bei letzterem im Endeffekt nur das "Zählen" Feature benötigt wird.
Das eingleisige Abschnitte alles andere als optimal sind, steht denke ich außer Frage. Aber häufig gibt die Stadt es nicht her die Straßenbahn komplett 2-gleisig auszubauen. Bleibt nur die Möglichkeit die Straßenbahn durch eine U-Bahn oder andere Dinge zu entlasten.
Zitieren
#6
Ein Zug reserviert nur so viele Blöcke wie nötig klingt ziemlich genau nach dem oft angefragten Gedankenlesen-Signal (nur frei, wenn es keinen Deadlock gibt und der richtige Zug nicht warten muss ...) Wenn der Zug nur einen Block fährt und dann anhält, ist ja auch nichts gewonnen.
Zitieren
#7
Ich habe ganz bewußt nicht die globale Einstellung: schnell hat Vorrang, sondern die individuell von Spieler einstellbare gewünscht.
1.) ist es manchmal sinnvoll einem nicht so schnellen Zug den Vorrang geben zu können
2.) egalisiert sich das Ganze, wenn viele schnelle Züge aufeinandertreffen, dann sind alle wieder gleichberechtigt.
3.) wann wird ein Zug als so schnell beurteilt, das er einen Vorrang bekommt? Feste Werte funktionieren nur, wenn man ausgiebige Tabellen für Jahr und Geschwindigkeit anlegt
4.) mit einem Button kann man auch mal bei Bedarf nur kurzfristig eine höhere Priorität zuweisen.
5.) bei festen Geschwindigkeiteswerten ergiebt sich evtl. ein Problem mit der Rückwärtskompatibilität, beim Button eher nicht.
6.) schnell hat Vorrang = starres System
7.) die ButtonVersion ist flexibel, jeder kann das einstellen, was er möchte, oder gerade braucht. Er kann die Priorisierung auch einfach ignorieren.

Zitat:Auch in Fällen in denen deutlich mehr Ausweichstellen als Züge existieren.
Dann hat sich ziemlich sicher ein Fehler beim setzen der Signale eingeschlichen.
Zitieren
#8
Züge priorisieren geht (außer mit mehr Kästchen Vorlauf) nicht; steht ein Zug erst einmal an einem Signal, dann kann wartet er im step und nicht mehr im sync_step. Ersterer ist deutlich seltener (dafür halt verbrauche solche Züge weniger Zeit und man kann mehr fahren lassen ... ). Der Nachteil ist, dass ein wartender Zug immer benachteiligt ist; man müsste dafür für jedes Wegfeld noch einen Prioritätcounter einführen, der dann der Zug setzt und dann anderen Züge evt. am Reservieren hindert.
Zitieren
#9
Schade, wäre eine schöne Sache gewesen.
Zitieren
#10
@prissi
Ich habe mir den Simu Code dazu noch nicht angesehen aber im Endeffekt klingt das was du geschrieben hast in etwa nach dem was ich oben geschrieben habe.
Ein Zug hat eine bestimmte Priorität und blockiert eine bestimmte Anzahl an Blöcken vor sich. Kommt ein Zug mit höherer Priorität angefahren, kann er diese Blöcke für sich reservieren, wenn er eine höhere Priorität hat.
Die reservierten Blöcke müssten dazu vermutlich wissen welche Priorität der Zug hat der diesen Bereich aktuell reserviert.

Klingt für mich durchaus umsetzbar. Ich habe aber wie gesagt auch noch nicht den Code angesehen und kann das deshalb nicht beurteilen. Ein solcher Prioritätscounter ist doch vermutlich nur eine Speicherstelle in der ein integer steht. Das dürfte also machbar sein und nicht all zu viele Ressourcen fressen?
Wie ist das mit dem Felder reservieren denn aktuell geregelt? Hat da jedes Feld ein "ist belegt" Attribut oder wie funktioniert das?

Falls es zu kompliziert ist dieses System umzusetzen, könnte es tatsählich auch schon etwas bringen Signale einzuführen, die alle Blöcke bis zum nächsten normalen Signal reservieren, ich nenne sie sie jetzt einfach Vorsignale.
Diese Vorsignale schalten genau wie normale Signale nur dann auf rot, wenn der nächste Block nicht frei ist, reservieren aber bis zum nächsten normalen Signal so viele Blöcke wie möglich im Vorraus.
Genial wäre natürlich ein dazu passendes Vorsignal für Nebenstrecken, dass ähnlich wie das aktuelle 2-Block Signal rot schaltet, wenn der übernächste Block belegt ist, aber bereits auf grün schaltet, wenn der Zug im übernächsten Block ist und den vorherigen Block komplett verlassen hat, vorrausgesetzt dahinter kommt nicht ein weiterer Zug, der diesen Block bereits vorreserviert hat.
Damit könnte der wartende Zug schonmal etwas vorbeschleunigen und auf die Hauptstrecke auffahren, sobald diese frei wird.
Umsetzbar wäre das, ohne dabei irgendwelche Vorhersagen treffen zu müssen. Die Frage ist nur wie schwer es wäre so etwas umzusetzen.


Und da ich weiß, dass gedankenlesende Signale nicht umsetzbar sind,
versuchen wir uns ja hier ein sinnvolles System zu überlegen, bei dem es
recht wahrscheinlich ist einen intsgesamt etwas besser fließenden
Verkehr in stark befahrenen Streckennetzen zu erhalten, als es beim aktuellen System der Fall ist.
Man kann dabei immer auch Situationen konstruieren in denen genau das Gegenteil der Fall ist, diese sollten nur deutlich seltener auftreten sein, als Situationen in denen das System einen Vorteil bringt.
Zitieren


Gehe zu:


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