in hucc/envs/ctrlgs.py [0:0]
def reset(self):
need_hard_reset = self._do_hard_reset or (
self.hard_reset_interval > 0
and self._reset_counter % self.hard_reset_interval == 0
)
# Reset
if need_hard_reset:
self.hard_reset()
self._reset_counter = 0
if self.relative_frame_of_reference:
self.goal_featurizer.set_frame_of_reference()
# Sample features and goal
resample_features = False
if need_hard_reset:
resample_features = True
if self.resample_features == 'soft':
resample_features = True
elif self.resample_features.startswith('soft'):
freq = int(self.resample_features[4:])
resample_features = self._reset_counter % freq == 0
if resample_features:
self._features = self.sample_features()
self._features_s = self._feature_strings[
','.join(map(str, self._features))
]
self._feature_mask *= 0
for f in self._features:
self._feature_mask[self.task_map[f]] = 1.0
self.goal = self.sample_goals_random()[0]
if self.goal_sampling in {'q', 'q_value'}:
if self.model:
self.goal = self.sample_goal_using_q()
elif self.goal_sampling in {'r', 'reachability', 'r2', 'reachability2'}:
if self.model:
self.goal = self.sample_goal_using_r()
elif self.goal_sampling not in {'random', 'uniform'}:
raise ValueError(
f'Unknown goal sampling method "{self.goal_sampling}"'
)
def distance_to_goal():
gs = self.proj(self.goal_featurizer(), self._features)
d = self.goal - gs
for i, f in enumerate(self._features):
if f in self.goal_space['twist_feats']:
# Wrap around projected pi/-pi for distance
d[i] = (
np.remainder(
(self.goal[i] - gs[i]) + self.proj_pi,
2 * self.proj_pi,
)
- self.proj_pi
)
return np.linalg.norm(d, ord=2)
self._d_initial = distance_to_goal()
self._do_hard_reset = False
self._reset_counter += 1
self._step = 0
return self.get_observation()