예제 #1
0
 def initialize(self, inputs: UnityInputProto) -> UnityOutputProto:
     bp = BrainParametersProto(
         vector_action_size=[2],
         vector_action_descriptions=["", ""],
         vector_action_space_type=discrete if self.is_discrete else continuous,
         brain_name=self.brain_name,
         is_training=True,
     )
     rl_init = UnityRLInitializationOutputProto(
         name="RealFakeAcademy",
         version=UnityEnvironment.API_VERSION,
         log_path="",
         brain_parameters=[bp],
     )
     output = UnityRLOutputProto(agentInfos=self._get_agent_infos())
     return UnityOutputProto(rl_initialization_output=rl_init, rl_output=output)
예제 #2
0
def test_agent_group_spec_from_proto():
    agent_proto = generate_list_agent_proto(1, [(3, ), (4, )])[0]
    bp = BrainParametersProto()
    bp.vector_action_size.extend([5, 4])
    bp.vector_action_space_type = 0
    group_spec = agent_group_spec_from_proto(bp, agent_proto)
    assert group_spec.is_action_discrete()
    assert not group_spec.is_action_continuous()
    assert group_spec.observation_shapes == [(3, ), (4, )]
    assert group_spec.discrete_action_branches == (5, 4)
    assert group_spec.action_size == 2
    bp = BrainParametersProto()
    bp.vector_action_size.extend([6])
    bp.vector_action_space_type = 1
    group_spec = agent_group_spec_from_proto(bp, agent_proto)
    assert not group_spec.is_action_discrete()
    assert group_spec.is_action_continuous()
    assert group_spec.action_size == 6
def load_demonstration(file_path: str) -> Tuple[BrainParameters, List[BrainInfo], int]:
    """
    Loads and parses a demonstration file.
    :param file_path: Location of demonstration file (.demo).
    :return: BrainParameter and list of BrainInfos containing demonstration data.
    """

    # First 32 bytes of file dedicated to meta-data.
    INITIAL_POS = 33
    file_paths = []
    if os.path.isdir(file_path):
        all_files = os.listdir(file_path)
        for _file in all_files:
            if _file.endswith(".demo"):
                file_paths.append(os.path.join(file_path, _file))
        if not all_files:
            raise ValueError("There are no '.demo' files in the provided directory.")
    elif os.path.isfile(file_path):
        file_paths.append(file_path)
        file_extension = pathlib.Path(file_path).suffix
        if file_extension != ".demo":
            raise ValueError(
                "The file is not a '.demo' file. Please provide a file with the "
                "correct extension."
            )
    else:
        raise FileNotFoundError(
            "The demonstration file or directory {} does not exist.".format(file_path)
        )

    brain_params = None
    brain_param_proto = None
    brain_infos = []
    total_expected = 0
    for _file_path in file_paths:
        data = open(_file_path, "rb").read()
        next_pos, pos, obs_decoded = 0, 0, 0
        while pos < len(data):
            next_pos, pos = _DecodeVarint32(data, pos)
            if obs_decoded == 0:
                meta_data_proto = DemonstrationMetaProto()
                meta_data_proto.ParseFromString(data[pos : pos + next_pos])
                total_expected += meta_data_proto.number_steps
                pos = INITIAL_POS
            if obs_decoded == 1:
                brain_param_proto = BrainParametersProto()
                brain_param_proto.ParseFromString(data[pos : pos + next_pos])

                pos += next_pos
            if obs_decoded > 1:
                agent_info = AgentInfoProto()
                agent_info.ParseFromString(data[pos : pos + next_pos])
                if brain_params is None:
                    brain_params = BrainParameters.from_proto(
                        brain_param_proto, agent_info
                    )
                brain_info = BrainInfo.from_agent_proto(0, [agent_info], brain_params)
                brain_infos.append(brain_info)
                if len(brain_infos) == total_expected:
                    break
                pos += next_pos
            obs_decoded += 1
    return brain_params, brain_infos, total_expected