예제 #1
0
def iter_partial_rectification(trajectories, eff_targets, G, metric='centrality', N_per_sector=1, **kwargs_rectificate):
    """
    Used to iterate a partial_rectification without recomputing the best nodes each time.
    Working but problematic from a theoretical point of view.
    """
    trajectories_copy = deepcopy(trajectories)
    G_copy = deepcopy(G)
    # Make groups
    #n_best = select_interesting_navpoints(G, OD=OD(trajectories), N_per_sector=N_per_sector, metric=metric) # Selecting points with highest betweenness centrality within each sector
    n_best = select_interesting_navpoints_per_trajectory(trajectories_copy, G_copy, OD=OD(trajectories_copy), N_per_sec_per_traj=N_per_sector, metric=metric) # Selecting points with highest betweenness centrality within each sector
    n_best = [n for sec, points in n_best.items() for n in points]
    print 'n_best', n_best

    groups = {"C":[], "N":[]} # C for "critical", N for "normal"
    for n in G_copy.G_nav.nodes():
        if n in n_best:
            groups["C"].append(n)
        else:
            groups["N"].append(n)
    probabilities = {"C":0., "N":1.} # Fix nodes with best score (critical points).

    final_trajs_list, final_eff_list, final_G_list, final_groups_list = [], [], [], []
    for eff_target in eff_targets:
        # print "Trajectories:"
        # for traj in trajectories_copy:
        #   print traj
        final_trajs, final_eff, final_G, final_groups = rectificate_trajectories_network(trajectories_copy, eff_target, G_copy.G_nav, groups=groups, probabilities=probabilities,\
            remove_nodes=True, **kwargs_rectificate)
        for new_el, listt in [(final_trajs, final_trajs_list), (final_eff, final_eff_list), (final_G, final_G_list), (final_groups, final_groups_list)]:
            listt.append(deepcopy(new_el))
        print 

    return final_trajs_list, final_eff_list, final_G_list, final_groups_list, n_best
예제 #2
0
def partial_rectification(trajectories, eff_target, G, metric='centrality', N_per_sector=1, **kwargs_rectificate):
    """
    High level function for rectification. Fix completely N_per_sector points with 
    highest metric value per sector.
    Working but problematic from a theoretical point of view.
    """
    # Make groups
    #n_best = select_interesting_navpoints(G, OD=OD(trajectories), N_per_sector=N_per_sector, metric=metric) # Selecting points with highest betweenness centrality within each sector
    n_best = select_interesting_navpoints_per_trajectory(trajectories, G, OD=OD(trajectories), N_per_sec_per_traj=N_per_sector, metric=metric) # Selecting points with highest betweenness centrality within each sector
    
    n_best = [n for sec, points in n_best.items() for n in points]

    groups = {"C":[], "N":[]} # C for "critical", N for "normal"
    for n in G.G_nav.nodes():
        if n in n_best:
            groups["C"].append(n)
        else:
            groups["N"].append(n)
    probabilities = {"C":0., "N":1.} # Fix nodes with best score (critical points).
    
    final_trajs, final_eff, final_G, final_groups = rectificate_trajectories_network(trajectories, eff_target, G.G_nav, remove_nodes=True, 
                                                                                    groups=groups, probabilities=probabilities, **kwargs_rectificate)

    return final_trajs, final_eff, final_G, final_groups