def build_normalizer(env: EnvWrapper) -> Dict[str, NormalizationData]: try: return env.normalization_data except AttributeError: # TODO: make this a property of EnvWrapper? # pyre-fixme[16]: Module `envs` has no attribute `RecSim`. if HAS_RECSIM and isinstance(env, RecSim): return { NormalizationKey.STATE: NormalizationData( dense_normalization_parameters=only_continuous_normalizer( list(range(env.observation_space["user"].shape[0])) ) ), NormalizationKey.ITEM: NormalizationData( dense_normalization_parameters=only_continuous_normalizer( list(range(env.observation_space["doc"]["0"].shape[0])) ) ), } return { NormalizationKey.STATE: NormalizationData( dense_normalization_parameters=build_state_normalizer(env) ), NormalizationKey.ACTION: NormalizationData( dense_normalization_parameters=build_action_normalizer(env) ), }
def normalization_action(self): if self.action_type == EnvType.DISCRETE_ACTION: return only_continuous_normalizer( list(range(self.state_dim, self.state_dim + self.action_dim)), min_value=0, max_value=1, ) return only_continuous_normalizer( list(range(self.state_dim, self.state_dim + self.action_dim)), min_value=self.env.action_space.low, max_value=self.env.action_space.high, )
def normalization_data(self): return { NormalizationKey.STATE: NormalizationData( dense_normalization_parameters=only_continuous_normalizer( list(range(self.num_arms)), MU_LOW, MU_HIGH)) }
def normalization(self): if self.img: return None else: return only_continuous_normalizer( list(range(self.state_dim)), self.env.observation_space.low, self.env.observation_space.high, )
def build_state_normalizer(env: EnvWrapper): if isinstance(env.observation_space, spaces.Box): assert ( len(env.observation_space.shape) == 1 ), f"{env.observation_space.shape} has dim > 1, and is not supported." return only_continuous_normalizer( list(range(env.observation_space.shape[0])), env.observation_space.low, env.observation_space.high, ) elif isinstance(env.observation_space, spaces.Dict): # assuming env.observation_space is image return None else: raise NotImplementedError(f"{env.observation_space} not supported")
def build_action_normalizer(env): action_space = env.action_space if isinstance(action_space, spaces.Discrete): return only_continuous_normalizer(list(range(action_space.n)), min_value=0, max_value=1) elif isinstance(action_space, spaces.Box): assert action_space.shape == ( 1, ), f"Box action shape {action_space.shape} not supported." return only_continuous_action_normalizer( [0], min_value=action_space.low.item(), max_value=action_space.high.item()) else: raise NotImplementedError(f"{action_space} not supported.")
def build_normalizer(env): if isinstance(env.observation_space, gym.spaces.Box): assert (len(env.observation_space.shape) == 1 ), f"{env.observation_space} not supported." return { "state": NormalizationData( dense_normalization_parameters=only_continuous_normalizer( list(range(env.observation_space.shape[0])), env.observation_space.low, env.observation_space.high, )) } elif isinstance(env.observation_space, gym.spaces.Dict): # assuming env.observation_space is image return None else: raise NotImplementedError(f"{env.observation_space} not supported")
def build_action_normalizer(env: Env): action_space = env.action_space if isinstance(action_space, spaces.Discrete): return only_continuous_normalizer(list(range(action_space.n)), min_value=0, max_value=1) elif isinstance(action_space, spaces.Box): assert (len(action_space.shape) == 1 ), f"Box action shape {action_space.shape} not supported." action_dim = action_space.shape[0] return only_continuous_action_normalizer( list(range(action_dim)), min_value=action_space.low, max_value=action_space.high, ) else: raise NotImplementedError(f"{action_space} not supported.")
def normalization_action(self): return only_continuous_normalizer( list(range(self.num_states, self.num_states + self.num_actions)), min_value=0, max_value=1, )