We are preventing deadlocks in the following ways:
...
Inputs:
position and train_on_track
pre_next_segment
moving
track_speeds
Features:
- Take an alternative route (route == 1): on full station (KH, KH_REV, IC, OC) or other special for deadlocks prevention
- e.g. if KH_ST is full and the KIO_LN are occupied by incoming (into KH) trains a train leaving KH should always leave through KH
- lock Lock the entrance to KH_LN and KH_LN_REV and the corresponding exit of the turnout track if : more than two trains travel in the opposite direction of KH
- Assign a train that is currently random destination to trains: that are in a station, have no destination and is are blocking an other train is given a "random" destination (this is calculated deterministic) to drive to a new station. This other trains
random_destination
is calculated deterministically- can be disabled
- for each train by
- setting
no_forced_direction
- it is possible to set a random destination for each train if a train currently doesn't have one, by setting random_mode to true
- if the KH_ST is full in one direction and the KIO_LN in the opposite direction or the / exit of the turnout track are locked. What is locked : depends on how full busy KH_LN is and if someone wants to enter from KH_LN (same for REV)
- Lock opposite direction in KH: a train in the KH pass may have to wait for a long time if trains are looping in the opposite direction, so wait for two trains (
waiting_bound_KH
inKH_Deadlock_Prevention
) and then enable its movement - Set a random destination for each train (random_mode == true): sets destination if train doesn't have one