From #openttdcoop wiki
Penalties are used by YAPF (Yet Another PathFinder) to determine which route a train should take between its current position and its destination. Penalties can be pretty much everything; the amount of trains driving the same route, a road crossing, a red two-way signal, a slope, a short curve... It's worth noting that trains ignore penalties if they don't have orders. The reason for this is pretty simple; if trains don't have a destination there is no reason to determine the cost of the route. For you this means that you should always give trains an order, even if the order is to go to a dummy station and can't actually be reached. This may be relevant for dummy trains or trains on timers.Below is a list of the penalties and their respective values used in r17814. NOTE: These values tend to change quite often, so don't rely on them being up-to-date.
yapf.rail_firstred_twoway_eol = true yapf.rail_firstred_penalty = 1000 yapf.rail_firstred_exit_penalty = 10000 yapf.rail_lastred_penalty = 1000 yapf.rail_lastred_exit_penalty = 10000 yapf.rail_station_penalty = 1000 yapf.rail_slope_penalty = 200 yapf.rail_curve45_penalty = 300 yapf.rail_curve90_penalty = 600 yapf.rail_depot_reverse_penalty = 5000 yapf.rail_crossing_penalty = 300 yapf.rail_look_ahead_max_signals = 10 yapf.rail_look_ahead_signal_p0 = 500 yapf.rail_look_ahead_signal_p1 = -100 yapf.rail_look_ahead_signal_p2 = 5 yapf.rail_doubleslip_penalty = 100 yapf.rail_longer_platform_penalty = 800 yapf.rail_longer_platform_per_tile_penalty = 0 yapf.rail_shorter_platform_penalty = 4000 yapf.rail_shorter_platform_per_tile_penalty = 0
In regular games, you usually don't have to worry about penalties. The only thing you may want to keep in mind is that you'll want to keep mainlines pretty much equally long. It's not that important that they are exactly level and exactly equally long (I doubt this is even possible), but make sure that you don't have one mainline that is going over massive hills all the time while another stays at the same level or there is one taking huge detours all the time and a parallel one is perfectly straight. Especially with long distances this may make a tiny difference when balancing but you probably won't notice.
yapf.rail_firstred_twoway_eol = true
This setting is always on in our games. eol stands for end-of-line, this means that a red two-way is actually an infinite penalty, a train will do pretty much everything to avoid running into a red two-way. This goes for regular two-way signals and pre-signals, two-way pbs are a different case we'll talk about later. To see the power of a red two-way have a look at the image below:
The same situation but with a one-way red signal:
This behavior is quite useful using advanced techniques such as SML or SRNW. You can find more information in the article about two-way signals. You should be careful not to force trains to take a huge loop by accident, though it's unlikely you'll manage to do so.
Fine tuning using penalties
Penalties can be used if you want to discourage trains from taking a certain route. Before PBS was introduced we used single tile stations for this, now we usually use two-way PBS signals facing backwards. In SML-games we sometimes increase the penalty for yapf.rail_pbs_signal_back_penalty to 10,000, to match up with the penalty for stations that was used when SML was invented.
YAPP (Yet Another PBS Patch) introduced the following new penalties:
yapf.rail_pbs_cross_penalty = 300 yapf.rail_pbs_station_penalty = 800 yapf.rail_pbs_signal_back_penalty = 1500
These penalties mostly make sure trains prefer to take a slightly longer path to a destination rather than crossing an existing one, they should not be changed.
Additionally, YAPF uses the following penalties and respective values for road vehicle path finding:
yapf.road_slope_penalty = 200 yapf.road_curve_penalty = 100 yapf.road_crossing_penalty = 300 yapf.road_stop_penalty = 800
These are provided mainly for completeness sake and should not be changed.