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)}"
        )
Ejemplo n.º 4
0
    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()