diff --git a/README.md b/README.md index 14102defb5f7508d9ceb04e3cd0f1a441c4ca172..0f621c1b0c29f3dfce2c0e6b892106dbc9ff6919 100644 --- a/README.md +++ b/README.md @@ -106,7 +106,7 @@ env = RailEnv( nr_extra=1, min_dist=8, max_dist=99999, - seed=0), + seed=1), schedule_generator=complex_schedule_generator(), number_of_agents=NUMBER_OF_AGENTS) diff --git a/docs/specifications/railway.md b/docs/specifications/railway.md index 04867f08f4b3a2948dd09983d552d5f33222cf4f..ec707f871b31a130f7a129e77042d02c31ddd300 100644 --- a/docs/specifications/railway.md +++ b/docs/specifications/railway.md @@ -380,7 +380,7 @@ ScheduleGenerator = Callable[[GridTransitionMap, int, Optional[Any]], ScheduleGe We can then produce `RailGenerator`s by currying: ```python def sparse_rail_generator(num_cities=5, num_intersections=4, num_trainstations=2, min_node_dist=20, node_radius=2, - num_neighb=3, grid_mode=False, enhance_intersection=False, seed=0): + num_neighb=3, grid_mode=False, enhance_intersection=False, seed=1): def generator(width, height, num_agents, num_resets=0): diff --git a/docs/tutorials/01_gettingstarted.rst b/docs/tutorials/01_gettingstarted.rst index 2be0fee229c93f2aee215cf1e459dd8fc8f92ebb..e3a2f41aca4714150e96b725d1b01da0f5e20958 100644 --- a/docs/tutorials/01_gettingstarted.rst +++ b/docs/tutorials/01_gettingstarted.rst @@ -145,7 +145,7 @@ Next we configure the difficulty of our task by modifying the complex_rail_gener nr_extra=10, min_dist=10, max_dist=99999, - seed=0), + seed=1), number_of_agents=5) The difficulty of a railway network depends on the dimensions (`width` x `height`) and the number of agents in the network. diff --git a/docs/tutorials/02_observationbuilder.rst b/docs/tutorials/02_observationbuilder.rst index f6e718ab156a3972a57f4693367d5f191c8fcdd0..8afcf71043cdff6239c8944ce243d1f1407fc718 100644 --- a/docs/tutorials/02_observationbuilder.rst +++ b/docs/tutorials/02_observationbuilder.rst @@ -118,7 +118,7 @@ Note that this simple strategy fails when multiple agents are present, as each a env = RailEnv(width=7, height=7, rail_generator=complex_rail_generator(nr_start_goal=10, nr_extra=1, \ - min_dist=8, max_dist=99999, seed=0), + min_dist=8, max_dist=99999, seed=1), number_of_agents=2, obs_builder_object=SingleAgentNavigationObs()) @@ -267,7 +267,7 @@ We can then use this new observation builder and the renderer to visualize the o # Initiate Environment env = RailEnv(width=10, height=10, - rail_generator=complex_rail_generator(nr_start_goal=5, nr_extra=1, min_dist=8, max_dist=99999, seed=0), + rail_generator=complex_rail_generator(nr_start_goal=5, nr_extra=1, min_dist=8, max_dist=99999, seed=1), number_of_agents=3, obs_builder_object=CustomObsBuilder) diff --git a/docs/tutorials/05_multispeed.md b/docs/tutorials/05_multispeed.md index 99db7ee6a275fe317c891cdebfc8d6aaf99d0b8c..118d4c5957a9b0219cc4ec1f897e2a322d8a248e 100644 --- a/docs/tutorials/05_multispeed.md +++ b/docs/tutorials/05_multispeed.md @@ -64,7 +64,7 @@ ScheduleGenerator = Callable[[GridTransitionMap, int, Optional[Any]], ScheduleGe We can then produce `RailGenerator`s by currying: ```python def sparse_rail_generator(num_cities=5, num_intersections=4, num_trainstations=2, min_node_dist=20, node_radius=2, - num_neighb=3, grid_mode=False, enhance_intersection=False, seed=0): + num_neighb=3, grid_mode=False, enhance_intersection=False, seed=1): def generator(width, height, num_agents, num_resets=0): diff --git a/examples/Simple_Realistic_Railway_Generator.py b/examples/Simple_Realistic_Railway_Generator.py index 9124edd1cae6e7d1f2f3b909c721a8f4ffd35ca3..d4f013d56e0cbac5462cef3fab57ad12450ab0ad 100644 --- a/examples/Simple_Realistic_Railway_Generator.py +++ b/examples/Simple_Realistic_Railway_Generator.py @@ -201,7 +201,7 @@ def realistic_rail_generator(max_num_cities=5, nbr_of_switches_per_station_track=2, connect_max_nbr_of_shortes_city=4, do_random_connect_stations=False, - seed=0, + seed=1, print_out_info=True) -> RailGenerator: """ This is a level generator which generates a realistic rail configurations diff --git a/examples/custom_observation_example_02_SingleAgentNavigationObs.py b/examples/custom_observation_example_02_SingleAgentNavigationObs.py index 3c10e415155429aa1464c554cdeb9ee1309780f2..aa9da8494b4a7376a3468c16618e5459344a37f3 100644 --- a/examples/custom_observation_example_02_SingleAgentNavigationObs.py +++ b/examples/custom_observation_example_02_SingleAgentNavigationObs.py @@ -75,7 +75,7 @@ def main(args): env = RailEnv(width=7, height=7, rail_generator=complex_rail_generator(nr_start_goal=10, nr_extra=1, min_dist=5, max_dist=99999, - seed=0), + seed=1), schedule_generator=complex_schedule_generator(), number_of_agents=1, obs_builder_object=SingleAgentNavigationObs()) diff --git a/examples/custom_observation_example_03_ObservePredictions.py b/examples/custom_observation_example_03_ObservePredictions.py index 97fac09c8d222b11cc8e8cc3ab4f76c75a37a95b..7af7499af8ffc5900a87d7e543310aab2a6df7f9 100644 --- a/examples/custom_observation_example_03_ObservePredictions.py +++ b/examples/custom_observation_example_03_ObservePredictions.py @@ -125,7 +125,7 @@ def main(args): env = RailEnv(width=10, height=10, rail_generator=complex_rail_generator(nr_start_goal=5, nr_extra=1, min_dist=8, max_dist=99999, - seed=0), + seed=1), schedule_generator=complex_schedule_generator(), number_of_agents=3, obs_builder_object=custom_obs_builder) diff --git a/examples/debugging_example_DELETE.py b/examples/debugging_example_DELETE.py index 1f094c09b6a929b7e862bc42afffd1da38e52e73..9de330c9bd17f8c07acb931b1ca4eff689c798a7 100644 --- a/examples/debugging_example_DELETE.py +++ b/examples/debugging_example_DELETE.py @@ -57,7 +57,7 @@ class SingleAgentNavigationObs(ObservationBuilder): env = RailEnv(width=14, height=14, - rail_generator=complex_rail_generator(nr_start_goal=10, nr_extra=1, min_dist=5, max_dist=99999, seed=0), + rail_generator=complex_rail_generator(nr_start_goal=10, nr_extra=1, min_dist=5, max_dist=99999, seed=1), schedule_generator=complex_schedule_generator(), number_of_agents=2, obs_builder_object=SingleAgentNavigationObs()) diff --git a/examples/simple_example_3.py b/examples/simple_example_3.py index 61b83c3b9ec2d5f63203897aa52c87d27c4460bd..f294279d33b4f5ac7bcdd67202d1b09e65fcab29 100644 --- a/examples/simple_example_3.py +++ b/examples/simple_example_3.py @@ -13,7 +13,7 @@ np.random.seed(1) env = RailEnv(width=7, height=7, - rail_generator=complex_rail_generator(nr_start_goal=10, nr_extra=1, min_dist=5, max_dist=99999, seed=0), + rail_generator=complex_rail_generator(nr_start_goal=10, nr_extra=1, min_dist=5, max_dist=99999, seed=1), schedule_generator=complex_schedule_generator(), number_of_agents=2, obs_builder_object=TreeObsForRailEnv(max_depth=2)) diff --git a/examples/training_example.py b/examples/training_example.py index 8b42586b06d90bef44fe94ca6817fb0a84824aac..9d6631719db74ceaa8ceef9352345b2ddbeb99fd 100644 --- a/examples/training_example.py +++ b/examples/training_example.py @@ -16,7 +16,7 @@ TreeObservation = TreeObsForRailEnv(max_depth=2, predictor=ShortestPathPredictor LocalGridObs = LocalObsForRailEnv(view_height=10, view_width=2, center=2) env = RailEnv(width=20, height=20, - rail_generator=complex_rail_generator(nr_start_goal=10, nr_extra=2, min_dist=8, max_dist=99999, seed=0), + rail_generator=complex_rail_generator(nr_start_goal=10, nr_extra=2, min_dist=8, max_dist=99999, seed=1), schedule_generator=complex_schedule_generator(), obs_builder_object=TreeObservation, number_of_agents=3) diff --git a/flatland/envs/rail_env.py b/flatland/envs/rail_env.py index 7e4697dd6743f2d23fe2dcaf7abe1ddebb2020f0..4b48b611b082821ff2231d2837451e3260830dcb 100644 --- a/flatland/envs/rail_env.py +++ b/flatland/envs/rail_env.py @@ -160,7 +160,6 @@ class RailEnv(Environment): self.rail_generator: RailGenerator = rail_generator self.schedule_generator: ScheduleGenerator = schedule_generator - self.rail_generator = rail_generator self.rail: Optional[GridTransitionMap] = None self.width = width self.height = height @@ -217,7 +216,7 @@ class RailEnv(Environment): # Uniform distribution parameters for malfunction duration self.min_number_of_steps_broken = malfunction_min_duration self.max_number_of_steps_broken = malfunction_max_duration - # Rest environment + # Reset environment self.reset() self.num_resets = 0 # yes, set it to zero again! diff --git a/flatland/envs/rail_generators.py b/flatland/envs/rail_generators.py index 242e11d73797b2dfdcea0efe7a079dcc066ff05e..ced33635a68948f5e91cf2147972caafc7d76334 100644 --- a/flatland/envs/rail_generators.py +++ b/flatland/envs/rail_generators.py @@ -40,7 +40,7 @@ def complex_rail_generator(nr_start_goal=1, nr_extra=100, min_dist=20, max_dist=99999, - seed=0) -> RailGenerator: + seed=1) -> RailGenerator: """ complex_rail_generator @@ -272,7 +272,7 @@ def rail_from_grid_transition_map(rail_map) -> RailGenerator: return generator -def random_rail_generator(cell_type_relative_proportion=[1.0] * 11, seed=0) -> RailGenerator: +def random_rail_generator(cell_type_relative_proportion=[1.0] * 11, seed=1) -> RailGenerator: """ Dummy random level generator: - fill in cells at random in [width-2, height-2] diff --git a/tests/test_flatland_envs_rail_env.py b/tests/test_flatland_envs_rail_env.py index e0281bb0d3f21a8e25fdff86ade5bed05f5dea13..7c8a65fd6501689a0911872a00150a87a082805d 100644 --- a/tests/test_flatland_envs_rail_env.py +++ b/tests/test_flatland_envs_rail_env.py @@ -28,7 +28,7 @@ def test_load_env(): def test_save_load(): env = RailEnv(width=10, height=10, - rail_generator=complex_rail_generator(nr_start_goal=2, nr_extra=5, min_dist=6, seed=0), + rail_generator=complex_rail_generator(nr_start_goal=2, nr_extra=5, min_dist=6, seed=1), schedule_generator=complex_schedule_generator(), number_of_agents=2) env.reset() diff --git a/tests/test_multi_speed.py b/tests/test_multi_speed.py index 3cd0a4c1d9812c728089255eb1150111b783a463..d190a5769415c65948b2d0e12c7f9b86b044a494 100644 --- a/tests/test_multi_speed.py +++ b/tests/test_multi_speed.py @@ -1,4 +1,5 @@ import numpy as np +from test_utils import ReplayConfig, Replay, run_replay_config, set_penalties_for_replay from flatland.core.grid.grid4 import Grid4TransitionsEnum from flatland.envs.observations import TreeObsForRailEnv @@ -7,7 +8,6 @@ from flatland.envs.rail_env import RailEnv, RailEnvActions from flatland.envs.rail_generators import complex_rail_generator, rail_from_grid_transition_map from flatland.envs.schedule_generators import complex_schedule_generator, random_schedule_generator from flatland.utils.simple_rail import make_simple_rail -from test_utils import ReplayConfig, Replay, run_replay_config, set_penalties_for_replay np.random.seed(1) @@ -52,7 +52,7 @@ def test_multi_speed_init(): env = RailEnv(width=50, height=50, rail_generator=complex_rail_generator(nr_start_goal=10, nr_extra=1, min_dist=8, max_dist=99999, - seed=0), + seed=1), schedule_generator=complex_schedule_generator(), number_of_agents=5) # Initialize the agent with the parameters corresponding to the environment and observation_builder diff --git a/tests/test_random_seeding.py b/tests/test_random_seeding.py index b374b21dc8a17e950b48aeae85b570a0067d3f6a..2a783dff10fbea3cb55d591d680d99e0aed9b692 100644 --- a/tests/test_random_seeding.py +++ b/tests/test_random_seeding.py @@ -36,7 +36,7 @@ def test_random_seeding(): # Test generation print assert env.agents[0].position == (3, 6) # print("env.agents[0].initial_position == {}".format(env.agents[0].initial_position)) - #print("assert env.agents[0].position == {}".format(env.agents[0].position)) + # print("assert env.agents[0].position == {}".format(env.agents[0].position)) def test_seeding_and_observations(): @@ -110,81 +110,64 @@ def test_seeding_and_malfunction(): 'max_duration': 10} # Make two seperate envs with different and see if the exhibit the same malfunctions # Global Observation - env = RailEnv(width=25, - height=30, - rail_generator=rail_from_grid_transition_map(rail), - schedule_generator=random_schedule_generator(seed=12), - number_of_agents=10, - obs_builder_object=GlobalObsForRailEnv(), - stochastic_data=stochastic_data, # Malfunction data generator - ) - - # Tree Observation - env2 = RailEnv(width=25, - height=30, - rail_generator=rail_from_grid_transition_map(rail), - schedule_generator=random_schedule_generator(seed=12), - number_of_agents=10, - obs_builder_object=GlobalObsForRailEnv(), - stochastic_data=stochastic_data, # Malfunction data generator - ) - - env.reset(False, False, False, random_seed=12) - env2.reset(False, False, False, random_seed=12) - - # Check that both environments produce the same initial start positions - assert env.agents[0].initial_position == env2.agents[0].initial_position - assert env.agents[1].initial_position == env2.agents[1].initial_position - assert env.agents[2].initial_position == env2.agents[2].initial_position - assert env.agents[3].initial_position == env2.agents[3].initial_position - assert env.agents[4].initial_position == env2.agents[4].initial_position - assert env.agents[5].initial_position == env2.agents[5].initial_position - assert env.agents[6].initial_position == env2.agents[6].initial_position - assert env.agents[7].initial_position == env2.agents[7].initial_position - assert env.agents[8].initial_position == env2.agents[8].initial_position - assert env.agents[9].initial_position == env2.agents[9].initial_position - - action_dict = {} - for step in range(10): - for a in range(env.get_num_agents()): - action = np.random.randint(4) - action_dict[a] = action - print(env.agents[a].malfunction_data['malfunction'], env2.agents[a].malfunction_data['malfunction']) - env.step(action_dict) - env2.step(action_dict) - - - # Check that both environments end up in the same position - - assert env.agents[0].position == env2.agents[0].position - assert env.agents[1].position == env2.agents[1].position - assert env.agents[2].position == env2.agents[2].position - assert env.agents[3].position == env2.agents[3].position - assert env.agents[4].position == env2.agents[4].position - assert env.agents[5].position == env2.agents[5].position - assert env.agents[6].position == env2.agents[6].position - assert env.agents[7].position == env2.agents[7].position - assert env.agents[8].position == env2.agents[8].position - assert env.agents[9].position == env2.agents[9].position - for a in range(env.get_num_agents()): - print("assert env.agents[{}].position == env2.agents[{}].position".format(a, a)) - + for tests in range(1, 100): + env = RailEnv(width=25, + height=30, + rail_generator=rail_from_grid_transition_map(rail), + schedule_generator=random_schedule_generator(), + number_of_agents=10, + random_seed=tests, + obs_builder_object=GlobalObsForRailEnv(), + stochastic_data=stochastic_data, # Malfunction data generator + ) -def tests_new_distributio(): - def _exp_distirbution_synced(rate): - """ - Generates sample from exponential distribution - We need this to guarantee synchronity between different instances with same seed. - :param rate: - :return: - """ - u = np.random.rand() - x = - np.log(1 - u) * rate - return x - - numbers = [] - for i in range(100): - rate1 = 2 - rate2 = 100 - print((_exp_distirbution_synced(rate1), _exp_distirbution_synced(rate2))) - print(numbers) + # Tree Observation + env2 = RailEnv(width=25, + height=30, + rail_generator=rail_from_grid_transition_map(rail), + schedule_generator=random_schedule_generator(), + number_of_agents=10, + random_seed=tests, + obs_builder_object=GlobalObsForRailEnv(), + stochastic_data=stochastic_data, # Malfunction data generator + ) + + env.reset(True, False, True, random_seed=tests) + env2.reset(True, False, True, random_seed=tests) + + # Check that both environments produce the same initial start positions + assert env.agents[0].initial_position == env2.agents[0].initial_position + assert env.agents[1].initial_position == env2.agents[1].initial_position + assert env.agents[2].initial_position == env2.agents[2].initial_position + assert env.agents[3].initial_position == env2.agents[3].initial_position + assert env.agents[4].initial_position == env2.agents[4].initial_position + assert env.agents[5].initial_position == env2.agents[5].initial_position + assert env.agents[6].initial_position == env2.agents[6].initial_position + assert env.agents[7].initial_position == env2.agents[7].initial_position + assert env.agents[8].initial_position == env2.agents[8].initial_position + assert env.agents[9].initial_position == env2.agents[9].initial_position + + action_dict = {} + for step in range(10): + for a in range(env.get_num_agents()): + action = np.random.randint(4) + action_dict[a] = action + # print("----------------------") + # print(env.agents[a].malfunction_data, env.agents[a].status) + # print(env2.agents[a].malfunction_data, env2.agents[a].status) + + env.step(action_dict) + env2.step(action_dict) + + # Check that both environments end up in the same position + + assert env.agents[0].position == env2.agents[0].position + assert env.agents[1].position == env2.agents[1].position + assert env.agents[2].position == env2.agents[2].position + assert env.agents[3].position == env2.agents[3].position + assert env.agents[4].position == env2.agents[4].position + assert env.agents[5].position == env2.agents[5].position + assert env.agents[6].position == env2.agents[6].position + assert env.agents[7].position == env2.agents[7].position + assert env.agents[8].position == env2.agents[8].position + assert env.agents[9].position == env2.agents[9].position diff --git a/tests/test_speed_classes.py b/tests/test_speed_classes.py index ff5ee56a308ce19559d079b716bde90ad65baf11..1fcf3b3ef0b7cc176d345fa547e91eeeef0a05bd 100644 --- a/tests/test_speed_classes.py +++ b/tests/test_speed_classes.py @@ -21,7 +21,7 @@ def test_rail_env_speed_intializer(): env = RailEnv(width=50, height=50, rail_generator=complex_rail_generator(nr_start_goal=10, nr_extra=1, min_dist=8, max_dist=99999, - seed=0), + seed=1), schedule_generator=complex_schedule_generator(), number_of_agents=10) env.reset()