Example #1
0
    def from_disk(cls, agent_path, name=str(1)):

        if agent_path is None:
            # TODO: proper exception
            raise Grid2OpException("A path to an episode should be provided")
        episode_path = os.path.abspath(os.path.join(agent_path, name))

        try:
            with open(os.path.join(episode_path, EpisodeData.PARAMS)) as f:
                _parameters = json.load(fp=f)
            with open(os.path.join(episode_path, EpisodeData.META)) as f:
                episode_meta = json.load(fp=f)
            with open(os.path.join(episode_path, EpisodeData.TIMES)) as f:
                episode_times = json.load(fp=f)
            with open(os.path.join(episode_path,
                                   EpisodeData.OTHER_REWARDS)) as f:
                other_rewards = json.load(fp=f)

            times = np.load(
                os.path.join(episode_path, EpisodeData.AG_EXEC_TIMES))["data"]
            actions = np.load(os.path.join(episode_path,
                                           EpisodeData.ACTIONS))["data"]
            env_actions = np.load(
                os.path.join(episode_path, EpisodeData.ENV_ACTIONS))["data"]
            observations = np.load(
                os.path.join(episode_path, EpisodeData.OBSERVATIONS))["data"]
            disc_lines = np.load(
                os.path.join(episode_path, EpisodeData.LINES_FAILURES))["data"]
            rewards = np.load(os.path.join(episode_path,
                                           EpisodeData.REWARDS))["data"]

        except FileNotFoundError as ex:
            raise Grid2OpException(f"EpisodeData file not found \n {str(ex)}")

        observation_space = ObservationSpace.from_dict(
            os.path.join(agent_path, EpisodeData.OBS_SPACE))
        action_space = ActionSpace.from_dict(
            os.path.join(agent_path, EpisodeData.ACTION_SPACE))
        helper_action_env = ActionSpace.from_dict(
            os.path.join(agent_path, EpisodeData.ENV_MODIF_SPACE))

        return cls(actions,
                   env_actions,
                   observations,
                   rewards,
                   disc_lines,
                   times,
                   _parameters,
                   episode_meta,
                   episode_times,
                   observation_space,
                   action_space,
                   helper_action_env,
                   agent_path,
                   name=name,
                   get_dataframes=True,
                   other_rewards=other_rewards)
Example #2
0
    def test_json_loadable(self):
        dict_ = self.helper_action.to_dict()
        tmp = json.dumps(obj=dict_, indent=4, sort_keys=True)
        res = ActionSpace.from_dict(json.loads(tmp))

        assert np.all(res.name_gen == self.helper_action.name_gen)
        assert np.all(res.name_load == self.helper_action.name_load)
        assert np.all(res.name_line == self.helper_action.name_line)
        assert np.all(res.sub_info == self.helper_action.sub_info)
        assert np.all(res.load_to_subid == self.helper_action.load_to_subid)
        assert np.all(res.gen_to_subid == self.helper_action.gen_to_subid)
        assert np.all(
            res.line_or_to_subid == self.helper_action.line_or_to_subid)
        assert np.all(
            res.line_ex_to_subid == self.helper_action.line_ex_to_subid)
        assert np.all(
            res.load_to_sub_pos == self.helper_action.load_to_sub_pos)
        assert np.all(res.gen_to_sub_pos == self.helper_action.gen_to_sub_pos)
        assert np.all(
            res.line_or_to_sub_pos == self.helper_action.line_or_to_sub_pos)
        assert np.all(
            res.line_ex_to_sub_pos == self.helper_action.line_ex_to_sub_pos)
        assert np.all(
            res.load_pos_topo_vect == self.helper_action.load_pos_topo_vect)
        assert np.all(
            res.gen_pos_topo_vect == self.helper_action.gen_pos_topo_vect)
        assert np.all(res.line_or_pos_topo_vect ==
                      self.helper_action.line_or_pos_topo_vect)
        assert np.all(res.line_ex_pos_topo_vect ==
                      self.helper_action.line_ex_pos_topo_vect)
        assert np.all(res.actionClass == self.helper_action.actionClass)
Example #3
0
 def test_from_dict(self):
     res = ActionSpace.from_dict(self.res)
     assert np.all(res.name_gen == self.helper_action.name_gen)
     assert np.all(res.name_load == self.helper_action.name_load)
     assert np.all(res.name_line == self.helper_action.name_line)
     assert np.all(res.sub_info == self.helper_action.sub_info)
     assert np.all(res.load_to_subid == self.helper_action.load_to_subid)
     assert np.all(res.gen_to_subid == self.helper_action.gen_to_subid)
     assert np.all(
         res.line_or_to_subid == self.helper_action.line_or_to_subid)
     assert np.all(
         res.line_ex_to_subid == self.helper_action.line_ex_to_subid)
     assert np.all(
         res.load_to_sub_pos == self.helper_action.load_to_sub_pos)
     assert np.all(res.gen_to_sub_pos == self.helper_action.gen_to_sub_pos)
     assert np.all(
         res.line_or_to_sub_pos == self.helper_action.line_or_to_sub_pos)
     assert np.all(
         res.line_ex_to_sub_pos == self.helper_action.line_ex_to_sub_pos)
     assert np.all(
         res.load_pos_topo_vect == self.helper_action.load_pos_topo_vect)
     assert np.all(
         res.gen_pos_topo_vect == self.helper_action.gen_pos_topo_vect)
     assert np.all(res.line_or_pos_topo_vect ==
                   self.helper_action.line_or_pos_topo_vect)
     assert np.all(res.line_ex_pos_topo_vect ==
                   self.helper_action.line_ex_pos_topo_vect)
     # pdb.set_trace()
     assert np.all(res.actionClass == self.helper_action.actionClass)
Example #4
0
    def from_disk(cls, agent_path, name="1"):
        """
        This function allows you to reload an episode stored using the runner.

        See the example at the definition of the class for more information on how to use it.

        Parameters
        ----------
        agent_path: ``str``
            Path pass at the "runner.run" method

        name: ``str``
            The name of the episode you want to reload.

        Returns
        -------
        res:
            The data loaded properly in memory.
        """
        if agent_path is None:
            raise Grid2OpException(
                "A path to an episode should be provided, please call \"from_disk\" with "
                "\"agent_path other\" than None")
        episode_path = os.path.abspath(os.path.join(agent_path, name))

        try:
            with open(os.path.join(episode_path, EpisodeData.PARAMS)) as f:
                _parameters = json.load(fp=f)
            with open(os.path.join(episode_path, EpisodeData.META)) as f:
                episode_meta = json.load(fp=f)
            with open(os.path.join(episode_path, EpisodeData.TIMES)) as f:
                episode_times = json.load(fp=f)
            with open(os.path.join(episode_path,
                                   EpisodeData.OTHER_REWARDS)) as f:
                other_rewards = json.load(fp=f)

            times = np.load(
                os.path.join(episode_path, EpisodeData.AG_EXEC_TIMES))["data"]
            actions = np.load(os.path.join(episode_path,
                                           EpisodeData.ACTIONS))["data"]
            env_actions = np.load(
                os.path.join(episode_path, EpisodeData.ENV_ACTIONS))["data"]
            observations = np.load(
                os.path.join(episode_path, EpisodeData.OBSERVATIONS))["data"]
            disc_lines = np.load(
                os.path.join(episode_path, EpisodeData.LINES_FAILURES))["data"]
            attack = np.load(os.path.join(episode_path,
                                          EpisodeData.ATTACK))["data"]
            rewards = np.load(os.path.join(episode_path,
                                           EpisodeData.REWARDS))["data"]

        except FileNotFoundError as ex:
            raise Grid2OpException(f"EpisodeData file not found \n {str(ex)}")

        observation_space = ObservationSpace.from_dict(
            os.path.join(agent_path, EpisodeData.OBS_SPACE))
        action_space = ActionSpace.from_dict(
            os.path.join(agent_path, EpisodeData.ACTION_SPACE))
        helper_action_env = ActionSpace.from_dict(
            os.path.join(agent_path, EpisodeData.ENV_MODIF_SPACE))
        attack_space = ActionSpace.from_dict(
            os.path.join(agent_path, EpisodeData.ATTACK_SPACE))
        return cls(
            actions=actions,
            env_actions=env_actions,
            observations=observations,
            rewards=rewards,
            disc_lines=disc_lines,
            times=times,
            params=_parameters,
            meta=episode_meta,
            episode_times=episode_times,
            observation_space=observation_space,
            action_space=action_space,
            helper_action_env=helper_action_env,
            path_save=None,  # No save when reading
            attack=attack,
            attack_space=attack_space,
            name=name,
            get_dataframes=True,
            other_rewards=other_rewards)
Example #5
0
    def from_disk(cls, agent_path, name=str(1)):

        if agent_path is None:
            raise Grid2OpException(
                "A path to an episode should be provided, please call \"from_disk\" with "
                "\"agent_path other\" than None")
        episode_path = os.path.abspath(os.path.join(agent_path, name))

        try:
            with open(os.path.join(episode_path, EpisodeData.PARAMS)) as f:
                _parameters = json.load(fp=f)
            with open(os.path.join(episode_path, EpisodeData.META)) as f:
                episode_meta = json.load(fp=f)
            with open(os.path.join(episode_path, EpisodeData.TIMES)) as f:
                episode_times = json.load(fp=f)
            with open(os.path.join(episode_path,
                                   EpisodeData.OTHER_REWARDS)) as f:
                other_rewards = json.load(fp=f)

            times = np.load(
                os.path.join(episode_path, EpisodeData.AG_EXEC_TIMES))["data"]
            actions = np.load(os.path.join(episode_path,
                                           EpisodeData.ACTIONS))["data"]
            env_actions = np.load(
                os.path.join(episode_path, EpisodeData.ENV_ACTIONS))["data"]
            observations = np.load(
                os.path.join(episode_path, EpisodeData.OBSERVATIONS))["data"]
            disc_lines = np.load(
                os.path.join(episode_path, EpisodeData.LINES_FAILURES))["data"]
            attack = np.load(os.path.join(episode_path,
                                          EpisodeData.ATTACK))["data"]
            rewards = np.load(os.path.join(episode_path,
                                           EpisodeData.REWARDS))["data"]

        except FileNotFoundError as ex:
            raise Grid2OpException(f"EpisodeData file not found \n {str(ex)}")

        observation_space = ObservationSpace.from_dict(
            os.path.join(agent_path, EpisodeData.OBS_SPACE))
        action_space = ActionSpace.from_dict(
            os.path.join(agent_path, EpisodeData.ACTION_SPACE))
        helper_action_env = ActionSpace.from_dict(
            os.path.join(agent_path, EpisodeData.ENV_MODIF_SPACE))
        attack_space = ActionSpace.from_dict(
            os.path.join(agent_path, EpisodeData.ATTACK_SPACE))

        return cls(
            actions,
            env_actions=env_actions,
            observations=observations,
            rewards=rewards,
            disc_lines=disc_lines,
            times=times,
            params=_parameters,
            meta=episode_meta,
            episode_times=episode_times,
            observation_space=observation_space,
            action_space=action_space,
            helper_action_env=helper_action_env,
            path_save=None,  # No save when reading
            attack=attack,
            attack_space=attack_space,
            name=name,
            get_dataframes=True,
            other_rewards=other_rewards)
Example #6
0
    def from_disk(cls, agent_path, name="1"):
        """
        This function allows you to reload an episode stored using the runner.

        See the example at the definition of the class for more information on how to use it.

        Parameters
        ----------
        agent_path: ``str``
            Path pass at the "runner.run" method

        name: ``str``
            The name of the episode you want to reload.

        Returns
        -------
        res:
            The data loaded properly in memory.
        """
        if agent_path is None:
            raise Grid2OpException(
                "A path to an episode should be provided, please call \"from_disk\" with "
                "\"agent_path other\" than None")
        episode_path = os.path.abspath(os.path.join(agent_path, name))

        try:
            with open(os.path.join(episode_path, EpisodeData.PARAMS)) as f:
                _parameters = json.load(fp=f)
            with open(os.path.join(episode_path, EpisodeData.META)) as f:
                episode_meta = json.load(fp=f)
            with open(os.path.join(episode_path, EpisodeData.TIMES)) as f:
                episode_times = json.load(fp=f)
            with open(os.path.join(episode_path,
                                   EpisodeData.OTHER_REWARDS)) as f:
                other_rewards = json.load(fp=f)

            times = np.load(
                os.path.join(episode_path, EpisodeData.AG_EXEC_TIMES))["data"]
            actions = np.load(os.path.join(episode_path,
                                           EpisodeData.ACTIONS))["data"]
            env_actions = np.load(
                os.path.join(episode_path, EpisodeData.ENV_ACTIONS))["data"]
            observations = np.load(
                os.path.join(episode_path, EpisodeData.OBSERVATIONS))["data"]
            disc_lines = np.load(
                os.path.join(episode_path, EpisodeData.LINES_FAILURES))["data"]
            attack = np.load(os.path.join(episode_path,
                                          EpisodeData.ATTACK))["data"]
            rewards = np.load(os.path.join(episode_path,
                                           EpisodeData.REWARDS))["data"]

        except FileNotFoundError as ex:
            raise Grid2OpException(f"EpisodeData file not found \n {str(ex)}")

        observation_space = ObservationSpace.from_dict(
            os.path.join(agent_path, EpisodeData.OBS_SPACE))
        action_space = ActionSpace.from_dict(
            os.path.join(agent_path, EpisodeData.ACTION_SPACE))
        helper_action_env = ActionSpace.from_dict(
            os.path.join(agent_path, EpisodeData.ENV_MODIF_SPACE))
        attack_space = ActionSpace.from_dict(
            os.path.join(agent_path, EpisodeData.ATTACK_SPACE))
        if observation_space.glop_version != grid2op.__version__:
            warnings.warn(
                "You are using a \"grid2op compatibility\" feature (the data you saved "
                "have been saved with a previous grid2op version). When we loaded your data, we attempted "
                "to not include most recent grid2op features. This is feature is not well tested. It would "
                "be wise to regenerate the data with the latest grid2Op version."
            )

        return cls(
            actions=actions,
            env_actions=env_actions,
            observations=observations,
            rewards=rewards,
            disc_lines=disc_lines,
            times=times,
            params=_parameters,
            meta=episode_meta,
            episode_times=episode_times,
            observation_space=observation_space,
            action_space=action_space,
            helper_action_env=helper_action_env,
            path_save=None,  # No save when reading
            attack=attack,
            attack_space=attack_space,
            name=name,
            get_dataframes=True,
            other_rewards=other_rewards,
            _init_collections=True)