def __init__( self ): """ Initialize the feature extractor. """ super().__init__() # interact features with relevant state categories self.state_category_interacter = OneHotCategoricalFeatureInteracter([ OneHotCategory(*category_args) for category_args in product(*([[True, False]] * 3)) ])
def __init__( self, environment: Gym ): """ Initialize the feature extractor. :param environment: Environment. """ if not isinstance(environment.gym_native.action_space, Discrete): # pragma no cover raise ValueError('Expected a discrete action space, but did not get one.') if environment.gym_native.action_space.n != 2: # pragma no cover raise ValueError('Expected two actions: left and right') super().__init__( environment=environment, actions=[ Action( i=0, name='left' ), Action( i=1, name='right' ) ] ) # create interacter over cartesian product of state categories self.state_category_interacter = OneHotCategoricalFeatureInteracter([ OneHotCategory(*args) for args in product(*([[True, False]] * 4)) ]) self.feature_scaler = NonstationaryFeatureScaler( num_observations_refit_feature_scaler=2000, refit_history_length=100000, refit_weight_decay=0.99999 )