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
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
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()
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()