Exemplo n.º 1
0
def load_forecasts(env, chronic_idx, config):
    chronics_dir, chronics, chronics_sorted = get_sorted_chronics(env=env)

    case_chronics = env.chronics_handler.path
    chronic_name = chronics_sorted[chronic_idx]
    chronic_dir = os.path.join(case_chronics, chronic_name)

    prods_file = [
        file for file in os.listdir(chronic_dir) if is_prods_file(file)
    ]
    loads_file = [
        file for file in os.listdir(chronic_dir) if is_loads_file(file)
    ]
    assert len(prods_file) == 1 and len(loads_file) == 1

    prods = read_bz2_to_dataframe(os.path.join(chronic_dir, prods_file[0]),
                                  sep=";")
    loads = read_bz2_to_dataframe(os.path.join(chronic_dir, loads_file[0]),
                                  sep=";")

    gen_org_to_grid_name = config["names_chronics_to_grid"]["prods"]
    load_org_to_grid_name = config["names_chronics_to_grid"]["loads"]

    prods = prods.rename(columns=gen_org_to_grid_name)
    prods = prods.reindex(sorted(prods.columns,
                                 key=lambda x: x.split("_")[-1]),
                          axis=1)

    loads = loads.rename(columns=load_org_to_grid_name)
    loads = loads.reindex(sorted(loads.columns,
                                 key=lambda x: x.split("_")[-1]),
                          axis=1)

    return prods.values, loads.values
Exemplo n.º 2
0
            if save_dir:
                agent_name_ = agent_name.replace(" ", "-").lower()
                file_name = (f"{agent_name_}-chronic-" +
                             "{:05}".format(chronic_idx) + "-")
                fig_mu.savefig(os.path.join(save_dir, file_name + "mus"))
                fig_frac.savefig(
                    os.path.join(save_dir, file_name + "fraction-obj"))

            plt.close(fig_mu)
            plt.close(fig_frac)

    @staticmethod
    def _runner(case, env, agent, n_chronics, n_steps,
                done_chronic_indices=()):
        chronics_dir, chronics, chronics_sorted = get_sorted_chronics(env=env)
        pprint("Chronics:", chronics_dir)

        np.random.seed(0)
        env.seed(0)

        chronic_data = []
        for chronic_idx, chronic in enumerate(chronics_sorted):
            if len(chronic_data) >= n_chronics > 0:
                break

            if chronic_idx in done_chronic_indices:
                continue

            chronic_org_idx = chronics.index(chronic)
            env.chronics_handler.tell_id(chronic_org_idx - 1)  # Set chronic id
Exemplo n.º 3
0
    def _runner(self,
                env,
                agent,
                do_chronics=(),
                n_chronics=-1,
                n_steps=-1,
                verbose=False):
        self.print_experiment("Performance")
        agent.print_agent(default=verbose)

        agent_name = agent.name.replace(" ", "-").lower()
        self.collector._load_chronics(agent_name=agent_name)

        chronics_dir, chronics, chronics_sorted = get_sorted_chronics(env=env)
        pprint("Chronics:", chronics_dir)

        if len(self.collector.chronic_ids):
            pprint(
                "    - Done chronics:",
                ", ".join(
                    map(lambda x: str(x), sorted(self.collector.chronic_ids))),
            )

        if len(do_chronics):
            pprint(
                "    - To do chronics:",
                ", ".join(map(lambda x: str(x), sorted(do_chronics))),
            )

        done_chronic_ids = []
        for chronic_idx, chronic_name in enumerate(chronics_sorted):
            if len(done_chronic_ids) >= n_chronics >= 0:
                break

            # If chronic already done
            if chronic_idx in self.collector.chronic_ids:
                continue

            # Environment specific filtering
            if "rte_case5" in env.name:
                if chronic_idx not in do_chronics:
                    continue
            elif "l2rpn_2019" in env.name:
                if chronic_idx not in do_chronics:
                    continue
            elif "l2rpn_wcci_2020" in env.name:
                if chronic_idx not in do_chronics:
                    continue

            chronic_org_idx = chronics.index(chronic_name)
            env.chronics_handler.tell_id(chronic_org_idx - 1)  # Set chronic id

            obs = env.reset()
            agent.reset(obs=obs)

            chronic_len = env.chronics_handler.real_data.data.max_iter
            chronic_path_name = "/".join(
                os.path.normpath(env.chronics_handler.get_id()).split(
                    os.sep)[-3:])

            augmentation_info = os.path.join(env.chronics_handler.get_id(),
                                             "augmentation.json")
            ps = None
            if os.path.isfile(augmentation_info):
                with open(augmentation_info, "r") as f:
                    ps = json.load(f)

            pprint("    - Chronic:", chronic_path_name)
            # if ps:
            #     p = ps["p"]
            #     min_p = ps["min_p"]
            #     max_p = ps["max_p"]
            #     targets = ps["targets"]
            #
            #     pprint("        - Augmentation:", ps["augmentation"])
            #     pprint(
            #         "            - Rate:",
            #         "p = {:.2f} ~ [{:.2f}, {:.2f}]".format(p, min_p, max_p),
            #     )
            #     if targets:
            #         pprint("            - Targets:", str(targets))

            t = 0
            done = False
            reward = np.nan
            """
                Collect data.
            """
            while not done and not (t >= n_steps > 0):
                action = agent.act(obs, reward=reward, done=done)
                obs_next, reward, done, info = env.step(action)
                self.collector._add(obs, action, reward, done)

                semi_action = False
                if agent.semi_agent is not None:
                    semi_action = agent.semi_agent.semi_action

                dist, dist_status, dist_status = agent.distance_to_ref_topology(
                    obs_next.topo_vect, obs_next.line_status)
                self.collector._add_plus(dist, dist_status, dist_status,
                                         semi_action)

                t = env.chronics_handler.real_data.data.current_index

                if t % 200 == 0:
                    semi_sum = np.sum(self.collector.semi_actions)
                    pprint("        - Step:", t, semi_sum)

                if done:
                    semi_sum = np.sum(self.collector.semi_actions)
                    pprint("        - Length:", f"{t}/{chronic_len}", semi_sum)

                obs = obs_next

            self.collector.obses.append(obs.to_vect())
            self.collector.total_return = compute_returns(
                self.collector.rewards)[0]
            self.collector.duration = t
            self.collector.chronic_len = chronic_len
            self.collector.chronic_name = chronic_name

            done_chronic_ids.append(chronic_idx)

            self.collector._save_chronic(agent_name, chronic_idx, verbose)
            self.collector.reset()
Exemplo n.º 4
0
    def collect(self,
                env,
                agent,
                do_chronics=(),
                n_chronics=-1,
                n_steps=-1,
                verbose=False):
        self.print_collector("Collecting")
        agent.print_agent(default=verbose)

        agent_name = agent.name.replace(" ", "-").lower()
        self._load_chronics(agent_name=agent_name)

        chronics_dir, chronics, chronics_sorted = get_sorted_chronics(env=env)
        pprint("Chronics:", chronics_dir)

        if len(self.chronic_ids):
            pprint(
                "    - Done chronics:",
                ", ".join(map(lambda x: str(x), sorted(self.chronic_ids))),
            )

        if len(do_chronics):
            pprint(
                "    - To do chronics:",
                ", ".join(map(lambda x: str(x), sorted(do_chronics))),
            )

        done_chronic_ids = []
        for chronic_idx, chronic_name in enumerate(chronics_sorted):
            if len(done_chronic_ids) >= n_chronics > 0:
                break

            # If chronic already done
            if chronic_idx in self.chronic_ids:
                continue

            # Environment specific filtering
            if "rte_case5" in env.name:
                if chronic_idx not in do_chronics:
                    continue
            elif "l2rpn_2019" in env.name:
                if chronic_idx not in do_chronics:
                    continue
            elif "l2rpn_wcci_2020" in env.name:
                if chronic_idx not in do_chronics:
                    continue

            chronic_org_idx = chronics.index(chronic_name)
            env.chronics_handler.tell_id(chronic_org_idx - 1)  # Set chronic id

            obs = env.reset()
            agent.reset(obs=obs)

            chronic_len = env.chronics_handler.real_data.data.max_iter
            chronic_path_name = "/".join(
                os.path.normpath(env.chronics_handler.get_id()).split(
                    os.sep)[-3:])
            pprint("    - Chronic:", chronic_path_name)

            t = 0
            done = False
            reward = np.nan
            """
                Collect data.
            """
            while not done and not (t >= n_steps > 0):
                action = agent.act(obs, reward=reward, done=done)
                obs_next, reward, done, info = env.step(action)
                self._add(obs, action, reward, done)

                t = env.chronics_handler.real_data.data.current_index

                if t % 50 == 0:
                    pprint("        - Step:", t)

                if done:
                    pprint("        - Length:", f"{t}/{chronic_len}")

                obs = obs_next

            self.obses.append(obs.to_vect())
            done_chronic_ids.append(chronic_idx)

            self._save_chronic(agent_name, chronic_idx, verbose)
            self.reset()