Implicit Load Balancing
From #openttdcoop wiki
Contents
Without Load Balancing
Without load balancing, trains tend to jam some lines even when others are empty or nowhere near capacity. This station has no load balancer: track A goes to platforms 1, 3, & 5, which lead to output track A, and B goes to 2, 4, & 6, which go to B.
Explicit Load Balancing
Most large merges and hubs on #openttdcoop are explicitly load balanced. There are signaled junctions where each train entering from any of N tracks can choose to exit on any of M tracks. When N and M are large (especially with exits from large stations), building one of these load balancers becomes very complex.
Implicit Load Balancing
Implicit load balancing uses properties of the stream of incoming trains to ensure balance of the stream of outgoing trains. At a station, the general idea is to use the process of splitting the trains from a single entrance to multiple tracks to also select the output track in a load-balanced way.
Linear Implicit Load Balancing
Split the tracks entering the station, and distribute them, alternating input tracks (for example, with 6 station platforms and 2 input tracks, the platforms should accept trains from track A, B, A, B, A, B). At the exit, simply group adjacent lines to give equivalent output platforms to each line (output track A should take platforms 1-3 and output track B should take platforms 4-6).
Problem
The problem with linearly taking the outputs like this is that the trains will take the first platform they see that is empty. This will likely cause track A to be favored with more traffic in this case.
Cyclic Implicit Load Balancing
Cyclic implicit load balancing helps with this case by making each input line favor differing output lines. The output lines are enumerated, and then the order used is rotated each group. If there are 12 platforms feeding 3 output lines, they should be connected like ABC BCA CAB ABC.
An example is given (as before, with outputs AB BA AB).
Large-scale Example
From PS #75, the north and south primary drops:
Overview
Idea | Player | Draft of idea | Testing | Completed | Remarks |
---|---|---|---|---|---|
Implicit Load Balancing | strstrep | Work-in-progress | class="
checked " | Built in PS #75 |
Waiting for a new implementation (75 failed to fully load-test the LB because of a desync bug with prospecting) |