Moving Flatland 2 code to Flatland 3 - Common changes#

1. Line Generators#

schedule_generators are now renamed to line_generators

This is because Flatland 2 had no concept of a timetable for allowed departures of expected arrival times. line_generators now generate the data that schedule_generators used to (start-end station pairs for agents).

If your code used sparse_schedule_generator, replace it with sparse_line_generator, the behaviour slightly varies, but it should be similar for the most high level code.


2. Change from max_rails_in_city to max_rail_pairs_in_city#

sparse_rail_generator has an input parameter max_rails_in_city replaced with max_rail_pairs_in_city. You can replace the original input number that was being used by dividing it by 2. This is to ensure every city has a minimum of 2 rails which we keep as a constraint for balancing inflow and outflow of the trains.


3. Waiting State#

Flatland 3 introduces a WAITING state for every train, in which all actions will be ignored if the elapsed timesteps is less than the train’s earliest departure.


4. Change from RailAgentStatus to TrainState#

The Flatland env.step function has been refactored to include a state machine for better intepretability of the functions for people who like to read and hack the code.

The older RailAgentStatus and the attribute agent.moving is now changed to TrainState.

This can now be accessed as agent.state instead of agent.status.


5. Removal of agent.malfunction_data and agent.speed_data#

Flatland 2 used to represent malfunctions in a dictionary agent.malfunction_data, this is now moved to the class agent.malfucntion_handler which keeps the same behvaior but refactored for better readability.

Train speed and partial fractional position in cells was stored in the dictionary agent.speed_data, this is now moved to the class agent.speed_counter, which keeps the same functionality but refactored as a counter instead of fractional position.


6. Removal of random and complex generator classes#

The genrator classes complex_rail_generator, complex_schedule_genrator, random_rail_generator, random_schedule_generator are now deprecated and removed from the environment. Please use sparse_rail_generator and sparse_line_generator instead.


7. Safe minimum env size is 30x30#

While its possible to generate smaller environments for exploration and understanding, we recommend using 30x30 as the minimum size to satisfy new constrains on the rail generation.