def update_metric(self, *args: Any, episode, action, task: EmbodiedTask, **kwargs: Any): current_position = self._sim.get_agent_state().position.tolist() discrete = getattr(task, "is_discrete") if discrete: curr_viewpoint_id = episode.curr_viewpoint.image_id goal = episode.goals[-1].image_id scan = episode.scan distance_to_target = \ task.get_distance_to_target(scan, curr_viewpoint_id, goal) else: current_position = self._sim.get_agent_state().position.tolist() distance_to_target = self._sim.geodesic_distance( current_position, episode.goals[-1].get_position()) if np.isinf(distance_to_target): print("WARNING: The Oracle distance might be compromised " + "The geodesic_distance failed " + "looking for a snap_point instead") new_position = np.array(current_position, dtype='f') new_position = self._sim._sim.pathfinder.snap_point( new_position) if np.isnan(new_position[0]): print("ERROR: The Oracle distance is compromised " + "The geodesic_distance failed " + "Cannot find path") else: current_position = new_position distance_to_target = self._sim.geodesic_distance( current_position, episode.goals[-1].get_position()) self._metric = distance_to_target
def update_metric(self, *args: Any, episode, action, task: EmbodiedTask, **kwargs: Any): ep_success = 0 current_position = self._sim.get_agent_state().position.tolist() discrete = getattr(task, "is_discrete") if discrete: curr_viewpoint_id = episode.curr_viewpoint.image_id goal = episode.goals[-1].image_id scan = episode.scan distance_to_target = \ task.get_distance_to_target(scan, curr_viewpoint_id, goal) else: distance_to_target = self._sim.geodesic_distance( current_position, episode.goals[-1].get_position()) if np.isinf(distance_to_target): print("WARNING: The Success metric might be compromised " + "The geodesic_distance failed " + "looking for a snap_point instead") new_position = np.array(current_position, dtype='f') new_position = self._sim._sim.pathfinder.snap_point( new_position) if np.isnan(new_position[0]): print("ERROR: The Success metric is compromised " + "The geodesic_distance failed " + "Cannot find path") else: current_position = new_position distance_to_target = self._sim.geodesic_distance( current_position, episode.goals[-1].get_position()) if (hasattr(task, "is_stop_called") and task.is_stop_called and distance_to_target < self._config.SUCCESS_DISTANCE): ep_success = 1 self._agent_episode_distance += self._euclidean_distance( current_position, self._previous_position) self._previous_position = current_position self._metric = ep_success * (self._start_end_episode_distance / max( self._start_end_episode_distance, self._agent_episode_distance)) # removing rounding error of 0.0000025 meters if self._metric >= 0.9999975: self._metric = 1.0
def update_metric(self, *args: Any, episode, task: EmbodiedTask, **kwargs: Any): ep_success = 0 discrete = getattr(task, "is_discrete") if discrete: curr_viewpoint_id = episode.curr_viewpoint.image_id goal = episode.goals[-1].image_id scan = episode.scan distance_to_target = \ task.get_distance_to_target(scan, curr_viewpoint_id, goal) else: current_position = self._sim.get_agent_state().position.tolist() distance_to_target = self._sim.geodesic_distance( current_position, episode.goals[-1].get_position()) if np.isinf(distance_to_target): print("WARNING: The Oracle distance might be compromised " + "The geodesic_distance failed " + "looking for a snap_point instead") new_position = np.array(current_position, dtype='f') new_position = self._sim._sim.pathfinder.snap_point( new_position) if np.isnan(new_position[0]): print("ERROR: The Oracle distance is compromised " + "The geodesic_distance failed " + "Cannot find path") else: current_position = new_position distance_to_target = self._sim.geodesic_distance( current_position, episode.goals[-1].get_position()) if (self._nearest_distance == -1 or distance_to_target < self._nearest_distance): self._nearest_distance = distance_to_target if (hasattr(task, "is_stop_called") and task.is_stop_called and self._nearest_distance < self._config.ORACLE_SUCCESS_DISTANCE): ep_success = 1 self._metric = ep_success