示例#1
0
 def calculate_goal_success(self, epoch_range):
     if os.path.isfile('batch_succeed.txt'):
         pass
     else:
         with open('batch_succeed.txt', 'w+') as f:
             pass
     sucess_rate_epoch, sucess_rate_epoch_std = [], []
     error_in_dist = (self.error_in_dist**2 * 2)**0.5  # euclidean distance
     for epoch in epoch_range:
         dist_from_goal_per_agent = torch.tensor(Plot.extract_data(
             epoch, dir=self.dir + os.sep, calculate_dist='ON'),
                                                 dtype=torch.float)
         sucess_rate_batch = torch.sum(
             dist_from_goal_per_agent <= error_in_dist,
             dim=1) / dist_from_goal_per_agent.shape[1]
         idx_of_batches_suceeded = (sucess_rate_batch == 1).nonzero()
         with open('batch_succeed.txt', 'a+') as f:
             f.write(
                 'In Epoch {0} the Total num of batches whos agent succeeded is: {1}\n'
                 .format(epoch, idx_of_batches_suceeded.shape[0]))
             f.write('The batchs whos agents succeeded are:/n')
             for batch in idx_of_batches_suceeded:
                 f.write(str(batch.item()))
                 f.write(',')
             f.write('\n')
         sucess_rate_batch = sucess_rate_batch.type(torch.FloatTensor)
         sucess_rate_epoch += [torch.mean(sucess_rate_batch)]
         sucess_rate_epoch_std += [torch.std(sucess_rate_batch)]
     Plot.create_sucees_reate_plot(sucess_rate_epoch, sucess_rate_epoch_std,
                                   epoch_range)