diff --git a/flatland/envs/generators.py b/flatland/envs/generators.py index a4b627eb197384811220d4b75f8e95a02e724c11..29545eacf0fd51f6e5cda3e29c5791c793eec7e8 100644 --- a/flatland/envs/generators.py +++ b/flatland/envs/generators.py @@ -774,6 +774,31 @@ def realistic_rail_generator(nr_start_goal=1, seed=0): agents_targets.append(add_pos) idx_target += 1 + add_max_dead_end = 20 + for pos_y in np.random.choice(np.arange(width-7)+3,add_max_dead_end,False): + pos_x = off_set+1 + if pos_x < height - 1: + ok = True + for k in range(6): + c = (pos_x,pos_y-k+1) + ok &= grid_map.grid[c[0]][c[1]] == 0 + if ok: + if np.random.random() < 0.5: + start_track = (pos_x, pos_y) + goal_track = (pos_x, pos_y - 2) + new_path = connect_rail(rail_trans, rail_array, start_track, goal_track) + if len(new_path) > 0: + c = (pos_x-1, pos_y-1) + make_switch_e_w(width, height, grid_map, c) + else: + start_track = (pos_x, pos_y) + goal_track = (pos_x, pos_y - 2) + new_path = connect_rail(rail_trans, rail_array, start_track, goal_track) + if len(new_path) > 0: + c = (pos_x-1, pos_y+1) + make_switch_w_e(width, height, grid_map, c) + + agents_position = [] agents_target = [] agents_direction = [] diff --git a/tests/test_flatland_env_sparse_rail_generator.py b/tests/test_flatland_env_sparse_rail_generator.py index 629372131296069813e73e9d81b0dc98dbf292a5..7d1b818cc47f6e717a9da430fecfcdd48b14be4a 100644 --- a/tests/test_flatland_env_sparse_rail_generator.py +++ b/tests/test_flatland_env_sparse_rail_generator.py @@ -19,7 +19,7 @@ def test_realistic_rail_generator(vizualization_folder_name=None): screen_height=1200, screen_width=1600) env_renderer.render_env(show=True, show_observations=True, show_predictions=False) - + env_renderer.close_window() def test_sparse_rail_generator(): env = RailEnv(width=50, @@ -38,3 +38,6 @@ def test_sparse_rail_generator(): # reset to initialize agents_static env_renderer = RenderTool(env, gl="PILSVG", ) env_renderer.render_env(show=True, show_observations=True, show_predictions=False) + + +test_realistic_rail_generator()