def get_scores_from_dict(data,stats,road_types):
    weights = expert.expert()
    scores = {}
    counter = 0
    distances_total = {}
    score_per_metric ={}
    for subid in data:     

        temp_score_dict = {}
        distances = {}

        for metric in data[subid]:
            if metric !="distance":
                if metric not in score_per_metric:
                    score_per_metric[metric] = {}
                for i,road_type in enumerate(road_types):
                    if road_type not in score_per_metric[metric]:
                        score_per_metric[metric][road_type] = []
                    distance = data[subid]['distance'][road_type] 
                    if distance!=0.0:
                        #score_class = get_class(stats[metric][road_type],data[subid][metric][road_type],percentiles)
                        
                        sum_of_percentiles = get_sum(stats[metric][road_type])
                        if sum_of_percentiles!=0.0:
                            score_class = get_class(stats[metric][road_type],data[subid][metric][road_type])
                            score_weight = weights[metric][score_class]
                            #score_weight = get_gauss(data[subid][metric][road_type],stats[metric][road_type][75]-stats[metric][road_type][25],stats[metric][road_type][50],weights[metric]['high'],weights[metric]['low'])
                            
                            score_per_metric[metric][road_type].append(score_weight*100.0)

    return score_per_metric
示例#2
0
def get_scores_from_dict_with_gauss(data,stats,road_types,percentiles,mad):
    weights = expert.expert()
    scores = {}
    counter = 0
    distances_total = {}
    for subid in data:     

        temp_score_dict = {}
        distances = {}

        for metric in data[subid]:
            if metric !="distance":
            
                for i,road_type in enumerate(road_types):
                    if road_type not in temp_score_dict:             
                        temp_score_dict[road_type] = 0.0
                        distances[road_type] = 0.0
                    score_weight = get_gauss(data[subid][metric][road_type],mad[metric][road_type],stats[metric][road_type][50],weights[metric]['high'],weights[metric]['low'])
                    temp_score_dict[road_type]+=weights['multiply'][metric]*score_weight
                    distances[road_type] = data[subid]['distance'][road_type]

                        
        score          = 0.0
        total_distance = 0.0
        for road_type in temp_score_dict:
            score+=temp_score_dict[road_type]*distances[road_type]
            total_distance+=distances[road_type]

            if total_distance>0.0:
                scores[subid] = 100.0*score/total_distance
    return scores
示例#3
0
def get_scores_from_dict(data,stats,road_types,percentiles):
    weights = expert.expert()
    scores = {}
    counter = 0
    distances_total = {}
    for subid in data:     

        temp_score_dict = {}
        distances = {}

        for metric in data[subid]:
            if metric !="distance":
            
                for i,road_type in enumerate(road_types):
                    
                    if data[subid]['distance'][road_type]!=0.0:
                        if road_type not in temp_score_dict:             
                            temp_score_dict[road_type] = 0.0
                            distances[road_type] = 0.0
                        score_class = get_class(stats[metric][road_type],data[subid][metric][road_type],percentiles)
                        temp_score_dict[road_type]+=weights['multiply'][metric]*weights[metric][score_class]
                        distances[road_type] = data[subid]['distance'][road_type]

                        
        score          = 0.0
        total_distance = 0.0
        for road_type in temp_score_dict:
            score+=temp_score_dict[road_type]*distances[road_type]
            total_distance+=distances[road_type]

            if total_distance>0.0:
                scores[subid] = 100.0*score/total_distance
    return scores
示例#4
0
def collector(idx, shared_model, shared_dataset, hyperparameters, lock):
    try:
        writer = SummaryWriter('runs/{}/collector:{:02}'.format(
            datetime.now().strftime("%d|%m_%H|%M"), idx))
        logging.basicConfig(filename='logs/collector:{:02}.log'.format(idx),
                            filemode='w',
                            format='%(message)s',
                            level=logging.DEBUG)

        # allocate a device
        n_gpu = t.cuda.device_count()
        if n_gpu > 0:
            Device.set_device(idx % n_gpu)

        local_model = deepcopy(shared_model)
        local_model.to(Device.get_device())
        local_model.eval()

        simulator = SIMULATOR()

        for itr in tqdm(count(),
                        position=idx,
                        desc='collector:{:02}'.format(idx)):
            local_model.load_state_dict(shared_model.state_dict())

            state = simulator.reset()

            episode_reward = 0
            for i in range(50):
                # Find the expert action for input belief
                expert_action, _ = expert(state, hyperparameters)

                lock.acquire()
                shared_dataset.append((state, expert_action))
                lock.release()

                # Simulate the learner's action
                action, _ = local_model.search(state, hyperparameters)
                state, reward, terminal = simulator.step(action)
                episode_reward += reward

                if terminal:
                    break

            logging.debug('Episode reward: {:.2f}'.format(episode_reward))
            writer.add_scalar('episode_reward', episode_reward, itr)
            writer.close()

    except KeyboardInterrupt:
        print('exiting collector:{:02}'.format(idx))
def get_scores_from_dict_scores_with_counts(data,counts,stats,road_types):
    weights = expert.expert()
    default_n = 4
    distances = {}
    scores = {}
    score_output = {}
    for subid in data:    
        scores[subid] = {} 
        for metric in data[subid]:
            if metric!="distance":
                if metric not in scores[subid]:
                    scores[subid][metric] = 0.0
                distances = {}
                total_distances = 0.0
                total_counts = 0.0
                for road_type in data[subid][metric]:
                    count_roadtype_metric = counts[subid][metric][road_type]
                    distance = data[subid]['distance'][road_type]
                    if distance!=0.0:
                        if road_type not in distances:
                            distances[road_type] = distance
                            total_distances+=distance
                            
                        score_class = get_class(stats[metric][road_type],data[subid][metric][road_type])
                        if metric!="pace":
                            if count_roadtype_metric!=0:
                                scores[subid][metric]+=(count_roadtype_metric*float(weights[metric][score_class])*distance)
                                total_counts+=(count_roadtype_metric*distance)
                            else:
                                scores[subid][metric]+=(default_n*1.0*distance)
                                total_counts+=(default_n*distance)
                        else:
                            scores[subid][metric]+=(float(weights[metric][score_class])*distance)
                if metric!="pace":          
                    scores[subid][metric]/=total_counts
                else:
                    scores[subid][metric]/=total_distances
                          
    return scores 
def get_scores_from_dict_scores(data,stats,road_types):
    weights = expert.expert()
    scores = {}
    counter = 0
    distances_total = {}
    score_per_metric ={}
    for subid in data:     

        temp_score_dict = {}
        distances = {}
        if subid not in score_per_metric:
            score_per_metric[subid] = 0.0
        for metric in data[subid]:
            if metric !="distance":
                test_distance = {}
                total_distance = 0.0
                for i,road_type in enumerate(road_types):
                    distance = data[subid]['distance'][road_type] 
                    if distance!=0.0:
                        #score_class = get_class(stats[metric][road_type],data[subid][metric][road_type],percentiles)
                        
                        sum_of_percentiles = get_sum(stats[metric][road_type])
                        if sum_of_percentiles!=0.0:
                            score_class = get_class(stats[metric][road_type],data[subid][metric][road_type])
                            score_weight = weights[metric][score_class]
                            if road_type not in test_distance:
                                test_distance[road_type] = 0.0
                                total_distance+=distance
                                
                            #score_weight = get_gauss(data[subid][metric][road_type],stats[metric][road_type][75]-stats[metric][road_type][25],stats[metric][road_type][50],weights[metric]['high'],weights[metric]['low'])
                            
                            score_per_metric[subid]+=score_weight*weights['multiply'][metric]*distance
        score_per_metric[subid]/=total_distance
    scores = []
    for subid in score_per_metric:
        scores.append(100*score_per_metric[subid])
    return scores 
    arr_old_scores.append(int(ares_scores[subid]))
mean_new, std_new = round(np.mean(arr), 3), round(np.std(arr), 3)
mean_old, std_old = round(np.mean(arr_old_scores), 3), round(np.std(arr_old_scores), 3)

# arr = transform_new_scores(arr,mean_new,std_new)
numbins = np.arange(0, 105, 5)
plt.subplot(121)
plt.hist(arr_old_scores, color="c", bins=numbins, label="Mean:{0} Stddev: {1}".format(mean_old, std_old))
plt.xlabel("Expert score")
plt.gca().yaxis.set_major_locator(plt.NullLocator())
plt.legend(loc=0)
plt.subplot(122)
plt.hist(arr, color="c", bins=numbins, label="Mean:{0} Stddev: {1}".format(mean_new, std_new))
plt.xlabel("Expert score")
plt.gca().yaxis.set_major_locator(plt.NullLocator())
plt.legend(loc=0)
plt.show()


paras = {}
paras["low_thres_upper"] = 40  # 5
paras["ideal_thres_upper"] = 60  # 80
paras["average_thres_upper"] = 80  # 95
paras["weights"] = expert.expert()

contract = "axaie_apps_2014-01-27"
ext = "../../sav_files/computed_algorithm_with_percentile_thresholds/"
sav_file = "{0}{1}_1.sav".format(ext, contract)
with open(sav_file, "w") as g:
    pickle.dump([paras, ares_comp_scores], g)