예제 #1
0
class PrintStatus(LivePlugin):
    
    def __init__(self, interval_print):
        self.tracker = InAWhile(interval_print)

    def init(self, data):
        pass

    def starting_stream(self, stream):
        """ A new stream is being read """
        self.cur_stream_observations = 0
        self.stream = stream
    
    def update(self, up):
        self.cur_stream_observations += 1
        progress = up['progress']
        state = up['state']
        
        if not self.tracker.its_time():
            return

        perc_obs = 100 * (float(progress.obs.done) / progress.obs.target)
        perc_obs_log = 100 * (float(self.cur_stream_observations) / self.stream.get_num_observations())
        msg = ('overall %.2f%% (log %3d%%) (eps: %4d/%d, obs: %4d/%d);'
               ' %5.1f fps' % 
               (perc_obs, perc_obs_log, len(state.id_episodes),
                 progress.eps.target, state.num_observations, progress.obs.target,
                self.tracker.fps()))
        logger.info(msg)
예제 #2
0
class Bookkeeping:
    """ Simple class to keep track of how many we have to simulate. """

    def __init__(self, data_central, id_robot, num_episodes, cumulative=True, interval_print=5):
        self.data_central = data_central
        self.id_robot = id_robot
        self.cumulative = cumulative

        if self.cumulative:
            log_index = data_central.get_log_index()
            if log_index.has_streams_for_robot(id_robot):
                self.done_before = log_index.get_episodes_for_robot(id_robot)
                self.num_episodes_done_before = len(self.done_before)
            else:
                self.done_before = set()
                self.num_episodes_done_before = 0
            self.num_episodes_todo = num_episodes - self.num_episodes_done_before
            logger.info(
                "Preparing to do %d episodes (already done %d)."
                % (self.num_episodes_todo, self.num_episodes_done_before)
            )
        else:
            self.num_episodes_todo = num_episodes
            logger.info("Preparing to do %d episodes." % self.num_episodes_todo)
        self.num_episodes_done = 0
        self.num_observations = 0
        self.num_observations_episode = 0
        self.observations_per_episode = []

        self.interval_print = interval_print
        self.tracker = InAWhile(interval_print)
        self.id_episodes = set()

        try:
            from compmake import progress

            progress("Simulating episodes", (0, self.num_episodes_todo))
        except ImportError:
            pass

    def observations(self, observations):
        self.id_episodes.add(observations["id_episode"].item())

        self.num_observations_episode += 1
        self.num_observations += 1
        if self.tracker.its_time():
            msg = "simulating %d/%d episodes obs %d (%5.1f fps)" % (
                self.num_episodes_done,
                self.num_episodes_todo,
                self.num_observations,
                self.tracker.fps(),
            )
            if self.num_episodes_done > 0:
                msg += " (mean obs/ep: %.1f)" % (np.mean(self.observations_per_episode))
            logger.info(msg)

    def get_id_episodes(self):
        """ Returns the list of episodes simulated. """
        return natsorted(self.id_episodes)

    def get_all_episodes(self):
        """ Returns the list of all episodes, both the already present
            and the simulated. """
        eps = []
        eps.extend(self.id_episodes)
        eps.extend(self.done_before)
        return natsorted(set(eps))

    def episode_done(self):
        self.num_episodes_done += 1
        self.observations_per_episode.append(self.num_observations_episode)
        self.num_observations_episode = 0

        try:
            from compmake import progress

            progress("Simulating episodes", (self.num_episodes_done, self.num_episodes_todo))
        except ImportError:
            pass

    def another_episode_todo(self):
        return self.num_episodes_done < self.num_episodes_todo
예제 #3
0
class BookkeepingServo():
    ''' Simple class to keep track of how many we have to simulate. '''
    @contract(interval_print='None|>=0')
    def __init__(self, data_central, id_robot, id_agent, num_episodes,
                 cumulative=True, interval_print=5):
        self.data_central = data_central
        self.id_robot = id_robot
        self.cumulative = cumulative

        if self.cumulative:
            log_index = data_central.get_log_index()
            self.done_before = log_index.get_episodes_for_robot(id_robot,
                                                                id_agent)
            self.num_episodes_done_before = len(self.done_before)
            self.num_episodes_todo = (num_episodes - 
                                      self.num_episodes_done_before)
            logger.info('Preparing to do %d episodes (already done %d).' % 
                        (self.num_episodes_todo,
                         self.num_episodes_done_before))
        else:
            self.num_episodes_todo = num_episodes
            logger.info('Preparing to do %d episodes.' % 
                        self.num_episodes_todo)
        self.num_episodes_done = 0
        self.num_observations = 0
        self.num_observations_episode = 0
        self.observations_per_episode = []

        self.interval_print = interval_print
        self.tracker = InAWhile(interval_print)
        self.id_episodes = set()

        try:
            from compmake import progress
            progress('Simulating episodes', (0, self.num_episodes_todo))
        except ImportError:
            pass

    def observations(self, observations):
        self.id_episodes.add(observations['id_episode'].item())

        self.num_observations_episode += 1
        self.num_observations += 1
        if self.tracker.its_time():
            msg = ('simulating %d/%d episodes obs %d (%5.1f fps)' % 
                   (self.num_episodes_done,
                    self.num_episodes_todo,
                    self.num_observations, self.tracker.fps()))
            if self.num_episodes_done > 0:
                msg += (' (mean obs/ep: %.1f)' % 
                        (np.mean(self.observations_per_episode)))
            logger.info(msg)

    def get_id_episodes(self):
        ''' Returns the list of episodes simulated. '''
        return natsorted(self.id_episodes)

    def get_all_episodes(self):
        ''' Returns the list of all episodes, both the already present
            and the simulated. '''
        eps = []
        eps.extend(self.id_episodes)
        eps.extend(self.done_before)
        return natsorted(set(eps))

    def episode_done(self):
        self.num_episodes_done += 1
        self.observations_per_episode.append(self.num_observations_episode)
        self.num_observations_episode = 0

        try:
            from compmake import progress
            progress('servoing', (self.num_episodes_done,
                                 self.num_episodes_todo))
        except ImportError:
            pass

    def another_episode_todo(self):
        return self.num_episodes_done < self.num_episodes_todo