def load_new(cls, filename, load_from_package=None): env_dict = cls.load_env_dict(filename, load_from_package=load_from_package) # TODO: inefficient - each one of these generators loads the complete env file. env = rail_env.RailEnv(width=1, height=1, rail_generator=rail_gen.rail_from_file( filename, load_from_package=load_from_package), schedule_generator=sched_gen.schedule_from_file( filename, load_from_package=load_from_package), malfunction_generator_and_process_data=mal_gen. malfunction_from_file( filename, load_from_package=load_from_package), obs_builder_object=DummyObservationBuilder(), record_steps=True) env.rail = GridTransitionMap(1, 1) # dummy cls.set_full_state(env, env_dict) return env, env_dict
def test_build_graph(self): manuel_graph = True if manuel_graph: specs = [[(8, 0), (1, 90), (1, 90), (6, 0), (1, 90), (7, 90)], [(1, 180), (0, 0), (0, 0), (1, 0), (0, 0), (0, 0)], [(8, 270), (1, 90), (1, 90), (2, 90), (1, 90), (7, 90)], [(0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0)], [(1, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0)]] rail_shape = np.array(specs).shape env = rail_env.RailEnv( width=rail_shape[1], height=rail_shape[0], rail_generator=rail_generators. rail_from_manual_specifications_generator(specs), number_of_agents=1) else: env = rail_env.RailEnv( width=25, height=15, rail_generator=rail_generators.sparse_rail_generator()) observations, info = env.reset() #env = rail_env.RailEnv( # width=5, # height=5, # rail_generator=rail_generators.complex_rail_generator()) #obs, info = env.reset() #obs, info = env.reset() #obs, info = env.reset() tg = transition_graph.TransitionGraph(env) g = tg.g plt = igraph.Plot() layout = [(v['y'] + np.random.randn() * 0.15, v['x'] + np.random.randn() * 0.15) for v in g.vs] plt.add(g, layout=layout) plt.redraw() with tempfile.NamedTemporaryFile() as f: plt.save(f.name) graph_img = Image.open(f.name) render = rendertools.RenderTool(env, gl='PILSVG') render.render_env() bg_img = Image.fromarray(render.get_image()) graph_img = graph_img.resize(bg_img.size) minx, maxx, miny, maxy = min(g.vs['x']), max(g.vs['x']), min( g.vs['y']), max(g.vs['y']) envh, envw = env.height, env.width w, h = bg_img.size graph_img = graph_img.resize((int( (maxy - miny) / envw * w), int((maxx - minx) / envh * h))) bg_img = bg_img.resize( (int(w / envw * (envw + 1)), int(h / envh * (envh + 1)))) bg_img.paste(graph_img, (int(w / envw * (miny + .5)), int(h / envh * (minx + .5))), graph_img) bg_img.show()
def test_build_graph(self): manuel_graph = True if manuel_graph: specs = [[(8, 0), (1, 90), (1, 90), (6, 0), (1, 90), (8, 90), (0, 0)], [(1, 180), (0, 0), (0, 0), (1, 0), (0, 0), (1, 0), (0, 0)], [(8, 270), (1, 90), (1, 90), (2, 90), (1, 90), (2, 360), (0, 0)], [(0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (1, 0), (0, 0)], [(0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0)]] rail_shape = np.array(specs).shape env = rail_env.RailEnv( width=rail_shape[1], height=rail_shape[0], rail_generator=rail_generators. rail_from_manual_specifications_generator(specs), number_of_agents=1) else: env = rail_env.RailEnv( width=25, height=15, rail_generator=rail_generators.sparse_rail_generator()) observations, info = env.reset() tg = transition_graph.TransitionGraph(env) g = tg.g plt = igraph.Plot() layout = [(v['y'] + np.random.randn() * 0.125, v['x'] + np.random.randn() * 0.125) for v in g.vs] plt.add(g, layout=layout, margin=50, vertex_label=list(range(len(g.vs))), edge_label=list(range(len(g.es)))) plt.redraw() with tempfile.NamedTemporaryFile() as f: plt.save(f.name) graph_img = Image.open(f.name) render = rendertools.RenderTool(env, gl='PILSVG') render.render_env() bg_img = Image.fromarray(render.get_image()) graph_img.show( ) #uncomment for higher res graph images to inspect labels etc. minx, maxx, miny, maxy = min(g.vs['x']), max(g.vs['x']), min( g.vs['y']), max(g.vs['y']) envh, envw = env.height, env.width w, h = bg_img.size graph_img = graph_img.resize((int( (maxy - miny) / envw * w), int((maxx - minx) / envh * h))) bg_img = bg_img.resize( (int(w / envw * (envw + 1)), int(h / envh * (envh + 1)))) bg_img.paste(graph_img, (int(w / envw * (miny + .5)), int(h / envh * (minx + .5))), graph_img) bg_img.show() #import IPython #IPython.embed() print( f"edges that share common resources: {transition_graph.find_edges_that_share_resource(g)}" )
def test_build_graph(self): manual_graph = False if manual_graph: specs = [[(8, 0), (1, 90), (1, 90), (6, 0), (1, 90), (8, 90), (0, 0)], [(1, 180), (0, 0), (0, 0), (1, 0), (0, 0), (1, 0), (0, 0)], [(8, 270), (1, 90), (1, 90), (2, 90), (1, 90), (2, 360), (0, 0)], [(0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (1, 0), (0, 0)], [(0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0)]] rail_shape = np.array(specs).shape env = rail_env.RailEnv( width=rail_shape[1], height=rail_shape[0], rail_generator=rail_generators. rail_from_manual_specifications_generator(specs), number_of_agents=1) else: env = rail_env.RailEnv( width=25, height=15, rail_generator=rail_generators.sparse_rail_generator()) observations, info = env.reset() def render_env(): render = rendertools.RenderTool(env, gl='PILSVG') render.render_env() bg_img = Image.fromarray(render.get_image()).convert('RGB') img = ImageTk.PhotoImage(bg_img) img.img = bg_img return img root = tk.Tk() bg_img = render_env() canvas = tk.Canvas(root, width=bg_img.img.size[0], height=bg_img.img.size[1]) canvas.pack() canvas_img = canvas.create_image(0, 0, anchor=tk.NW, image=bg_img) root.title('Yo') def keypress(event): nonlocal bg_img k = event.keysym action = dict( Up=rail_env.RailEnvActions.MOVE_FORWARD, Down=rail_env.RailEnvActions.STOP_MOVING, Left=rail_env.RailEnvActions.MOVE_LEFT, Right=rail_env.RailEnvActions.MOVE_RIGHT, space=rail_env.RailEnvActions.DO_NOTHING, )[k] root.title('Loading...') env.step({0: action}) bg_img = render_env() canvas.itemconfig(canvas_img, image=bg_img) root.title(f'Done: {k}') for k in ('<Left>', '<Right>', '<Up>', '<Down>', '<space>'): root.bind(k, keypress) root.mainloop()