diff --git a/examples/simple_example_1.py b/examples/simple_example_1.py new file mode 100644 index 0000000000000000000000000000000000000000..70d2e73a71e676f92c7b11698be90ba93d2331f4 --- /dev/null +++ b/examples/simple_example_1.py @@ -0,0 +1,33 @@ +import random + +from flatland.envs.generators import random_rail_generator, rail_from_manual_specifications_generator +from flatland.envs.rail_env import RailEnv +from flatland.envs.observations import TreeObsForRailEnv +from flatland.utils.rendertools import RenderTool +import numpy as np + +# Example generate a rail given a manual specification, +# a map of tuples (cell_type, rotation) +specs = [[(0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0)], + [(0, 0), (0, 0), (0, 0), (0, 0), (7, 0), (0, 0)], + [(7, 270), (1, 90), (1, 90), (1, 90), (2, 90), (7, 90)], + [(0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0)]] + +# CURVED RAIL + DEAD-ENDS TEST +# specs = [[(0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0)], +# [(7, 270), (1, 90), (1, 90), (8, 90), (0, 0), (0, 0)], +# [(0, 0), (7, 270),(1, 90), (8, 180), (0, 00), (0, 0)], +# [(0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0)]] + +env = RailEnv(width=6, + height=4, + rail_generator=rail_from_manual_specifications_generator(specs), + number_of_agents=1, + obs_builder_object=TreeObsForRailEnv(max_depth=2)) + +env.reset() + +env_renderer = RenderTool(env, gl="QT") +env_renderer.renderEnv(show=True) + +input("Press Enter to continue...") diff --git a/examples/simple_example_2.py b/examples/simple_example_2.py new file mode 100644 index 0000000000000000000000000000000000000000..535e9c9e784305a8bf049daa67fa40979b569c79 --- /dev/null +++ b/examples/simple_example_2.py @@ -0,0 +1,43 @@ +import random + +from flatland.envs.generators import random_rail_generator, rail_from_list_of_saved_GridTransitionMap_generator +from flatland.envs.rail_env import RailEnv +from flatland.envs.observations import TreeObsForRailEnv +from flatland.utils.rendertools import RenderTool +import numpy as np + +random.seed(100) +np.random.seed(100) + +# Relative weights of each cell type to be used by the random rail generators. +transition_probability = [1.0, # empty cell - Case 0 + 1.0, # Case 1 - straight + 1.0, # Case 2 - simple switch + 0.3, # Case 3 - diamond drossing + 0.5, # Case 4 - single slip + 0.5, # Case 5 - double slip + 0.2, # Case 6 - symmetrical + 0.0, # Case 7 - dead end + 0.2, # Case 8 - turn left + 0.2, # Case 9 - turn right + 1.0] # Case 10 - mirrored switch + +# Example generate a random rail +env = RailEnv(width=10, + height=10, + rail_generator=random_rail_generator(cell_type_relative_proportion=transition_probability), + number_of_agents=3, + obs_builder_object=TreeObsForRailEnv(max_depth=2)) + +# env = RailEnv(width=10, +# height=10, +# rail_generator=rail_from_list_of_saved_GridTransitionMap_generator(['examples/sample_10_10_rail.npy']), +# number_of_agents=3, +# obs_builder_object=TreeObsForRailEnv(max_depth=2)) + +env.reset() + +env_renderer = RenderTool(env, gl="QT") +env_renderer.renderEnv(show=True) + +input("Press Enter to continue...") diff --git a/examples/simple_example_3.py b/examples/simple_example_3.py new file mode 100644 index 0000000000000000000000000000000000000000..e0830ff751d15d425d22fcdc6c38b5ffc68197d5 --- /dev/null +++ b/examples/simple_example_3.py @@ -0,0 +1,53 @@ +import random + +from flatland.envs.generators import random_rail_generator, random_rail_generator +from flatland.envs.rail_env import RailEnv +from flatland.utils.rendertools import RenderTool +import numpy as np + +random.seed(100) +np.random.seed(100) + +env = RailEnv(width=7, + height=7, + rail_generator=random_rail_generator(), + number_of_agents=2) + +# Print the distance map of each cell to the target of the first agent +# for i in range(4): +# print(env.obs_builder.distance_map[0, :, :, i]) + +# Print the observation vector for agent 0 +obs, all_rewards, done, _ = env.step({0: 0}) +for i in range(env.get_num_agents()): + env.obs_builder.util_print_obs_subtree(tree=obs[i], num_features_per_node=5) + +env_renderer = RenderTool(env, gl="QT") +env_renderer.renderEnv(show=True) + +print("Manual control: s=perform step, q=quit, [agent id] [1-2-3 action] \ + (turnleft+move, move to front, turnright+move)") +for step in range(100): + cmd = input(">> ") + cmds = cmd.split(" ") + + action_dict = {} + + i = 0 + while i < len(cmds): + if cmds[i] == 'q': + import sys + + sys.exit() + elif cmds[i] == 's': + obs, all_rewards, done, _ = env.step(action_dict) + action_dict = {} + print("Rewards: ", all_rewards, " [done=", done, "]") + else: + agent_id = int(cmds[i]) + action = int(cmds[i + 1]) + action_dict[agent_id] = action + i = i + 1 + i += 1 + + env_renderer.renderEnv(show=True) diff --git a/examples/temporary_example.py b/examples/temporary_example.py deleted file mode 100644 index 862369411056d87d411c3e173bd479e9a7e93e01..0000000000000000000000000000000000000000 --- a/examples/temporary_example.py +++ /dev/null @@ -1,127 +0,0 @@ -import random - -from flatland.envs.generators import random_rail_generator -from flatland.envs.rail_env import RailEnv -from flatland.utils.rendertools import RenderTool -import numpy as np - -random.seed(0) -np.random.seed(0) - -transition_probability = [1.0, # empty cell - Case 0 - 1.0, # Case 1 - straight - 1.0, # Case 2 - simple switch - 0.3, # Case 3 - diamond drossing - 0.5, # Case 4 - single slip - 0.5, # Case 5 - double slip - 0.2, # Case 6 - symmetrical - 0.0, # Case 7 - dead end - 0.2, # Case 8 - turn left - 0.2, # Case 9 - turn right - 1.0] # Case 10 - mirrored switch - -""" -# Example generate a random rail -env = RailEnv(width=20, - height=20, - rail_generator=random_rail_generator(cell_type_relative_proportion=transition_probability), - number_of_agents=10) - -# env = RailEnv(width=20, -# height=20, -# rail_generator=rail_from_list_of_saved_GridTransitionMap_generator(['examples/sample_10_10_rail.npy']), -# number_of_agents=10) - -env.reset() - -env_renderer = RenderTool(env) -env_renderer.renderEnv(show=True) -""" -""" -# Example generate a rail given a manual specification, -# a map of tuples (cell_type, rotation) -specs = [[(0, 0), (0, 0), (0, 0), (0, 0), (7, 0), (0, 0)], - [(7, 270), (1, 90), (1, 90), (1, 90), (2, 90), (7, 90)]] - -env = RailEnv(width=6, - height=2, - rail_generator=rail_from_manual_specifications_generator(specs), - number_of_agents=1, - obs_builder_object=TreeObsForRailEnv(max_depth=2)) - -handle = env.get_agent_handles() -env.agents_position[0] = [1, 4] -env.agents_target[0] = [1, 1] -env.agents_direction[0] = 1 -# TODO: watch out: if these variables are overridden, the obs_builder object has to be reset, too! -env.obs_builder.reset() -""" -""" -# INFINITE-LOOP TEST -specs = [[(0, 0), (0, 0), (0, 0), (0, 0), (7, 0), (0, 0)], - [(7, 270), (1, 90), (1, 90), (2, 270), (2, 0), (0, 0)], - [(0, 0), (0, 0), (0, 0), (2, 180), (2, 90), (7, 90)], - [(0, 0), (0, 0), (0, 0), (7, 180), (0, 0), (0, 0)]] - -# CURVED RAIL + DEAD-ENDS TEST -specs = [[(0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0)], - [(7, 270), (1, 90), (1, 90), (8, 90), (0, 0), (0, 0)], - [(0, 0), (7, 270),(1, 90), (8, 180), (0, 00), (0, 0)]] - -env = RailEnv(width=6, - height=4, - rail_generator=rail_from_manual_specifications_generator(specs), - number_of_agents=1, - obs_builder_object=TreeObsForRailEnv(max_depth=2)) - -handle = env.get_agent_handles() -env.agents_position[0] = [1, 3] -env.agents_target[0] = [1, 1] -env.agents_direction[0] = 1 -# TODO: watch out: if these variables are overridden, the obs_builder object has to be reset, too! -env.obs_builder.reset() -""" -env = RailEnv(width=7, - height=7, - rail_generator=random_rail_generator(cell_type_relative_proportion=transition_probability), - # rail_generator=complex_rail_generator(nr_start_goal=2), - number_of_agents=2) - -# Print the distance map of each cell to the target of the first agent -# for i in range(4): -# print(env.obs_builder.distance_map[0, :, :, i]) - -# Print the observation vector for agent 0 -obs, all_rewards, done, _ = env.step({0: 0}) -for i in range(env.get_num_agents()): - env.obs_builder.util_print_obs_subtree(tree=obs[i], num_features_per_node=5) - -env_renderer = RenderTool(env, gl="QT") -env_renderer.renderEnv(show=True) - -print("Manual control: s=perform step, q=quit, [agent id] [1-2-3 action] \ - (turnleft+move, move to front, turnright+move)") -for step in range(100): - cmd = input(">> ") - cmds = cmd.split(" ") - - action_dict = {} - - i = 0 - while i < len(cmds): - if cmds[i] == 'q': - import sys - - sys.exit() - elif cmds[i] == 's': - obs, all_rewards, done, _ = env.step(action_dict) - action_dict = {} - print("Rewards: ", all_rewards, " [done=", done, "]") - else: - agent_id = int(cmds[i]) - action = int(cmds[i + 1]) - action_dict[agent_id] = action - i = i + 1 - i += 1 - - env_renderer.renderEnv(show=True)