OpenCores
URL https://opencores.org/ocsvn/an-fpga-implementation-of-low-latency-noc-based-mpsoc/an-fpga-implementation-of-low-latency-noc-based-mpsoc/trunk

Subversion Repositories an-fpga-implementation-of-low-latency-noc-based-mpsoc

[/] [an-fpga-implementation-of-low-latency-noc-based-mpsoc/] [trunk/] [mpsoc/] [remove_cycle/] [remove_cycle_edges_by_hierarchy.py] - Blame information for rev 48

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 48 alirezamon
import networkx as nx
2
from remove_cycle_edges_by_hierarchy_greedy import scc_based_to_remove_cycle_edges_iterately
3
from remove_cycle_edges_by_hierarchy_BF import remove_cycle_edges_BF_iterately
4
from remove_cycle_edges_by_hierarchy_voting import remove_cycle_edges_heuristic
5
from measures import F1
6
from file_io import read_dict_from_file
7
from file_io import write_pairs_to_file
8
 
9
def get_edges_voting_scores(set_edges_list):
10
        total_edges = set()
11
        for edges in set_edges_list:
12
                total_edges = total_edges | edges
13
        edges_score = {}
14
        for e in total_edges:
15
                edges_score[e] = len(filter(lambda x: e in x, set_edges_list))
16
        return edges_score
17
 
18
 
19
def remove_cycle_edges_strategies(graph_file,nodes_score_dict,score_name = "socialagony", nodetype = int):
20
 
21
 
22
        g = nx.read_edgelist(graph_file,create_using = nx.DiGraph(),nodetype = nodetype)
23
        # greedy
24
        e1 = scc_based_to_remove_cycle_edges_iterately(g,nodes_score_dict)
25
        g = nx.read_edgelist(graph_file,create_using = nx.DiGraph(),nodetype = nodetype)
26
        # forward
27
        e2 = remove_cycle_edges_BF_iterately(g,nodes_score_dict,is_Forward = True,score_name = score_name)
28
        # backward
29
        g = nx.read_edgelist(graph_file,create_using = nx.DiGraph(),nodetype = nodetype)
30
        e3 = remove_cycle_edges_BF_iterately(g,nodes_score_dict,is_Forward = False,score_name = score_name)
31
        return e1,e2,e3
32
 
33
def remove_cycle_edges_by_voting(graph_file,set_edges_list,nodetype = int):
34
        edges_score = get_edges_voting_scores(set_edges_list)
35
        e = remove_cycle_edges_heuristic(graph_file,edges_score,nodetype = nodetype)
36
        return e
37
 
38
def remove_cycle_edges_by_hierarchy(graph_file,nodes_score_dict,score_name = "socialagony",nodetype = int):
39
        e1,e2,e3 = remove_cycle_edges_strategies(graph_file,nodes_score_dict,score_name = score_name,nodetype = nodetype)
40
        e4 = remove_cycle_edges_by_voting(graph_file,[set(e1),set(e2),set(e3)],nodetype = nodetype)
41
        return e1,e2,e3,e4
42
 
43
def computing_hierarchy(graph_file,players_score_func_name, nodetype = int):
44
        import os.path
45
        if players_score_func_name == "socialagony":
46
                from helper_funs import dir_tail_name
47
                dir_name,tail = dir_tail_name(graph_file)
48
                agony_file = os.path.join(dir_name,tail.split(".")[0] + "_socialagony.txt")
49
                #agony_file = graph_file[:len(graph_file)-6] + "_socialagony.txt"
50
                #from compute_social_agony import compute_social_agony
51
                #players = compute_social_agony(graph_file,agony_path = "agony/agony ")         
52
                if False:
53
                #if os.path.isfile(agony_file):
54
                        print("load pre-computed socialagony from: %s" % agony_file)
55
                        players = read_dict_from_file(agony_file)
56
                else:
57
                        print("start computing socialagony...")
58
                        from compute_social_agony import compute_social_agony
59
                        players = compute_social_agony(graph_file,agony_path = "agony/agony ")
60
                        print("write socialagony to file: %s" % agony_file)
61
                return players
62
        g = nx.read_edgelist(graph_file,create_using = nx.DiGraph(),nodetype = nodetype)
63
        if players_score_func_name == "pagerank":
64
                #print("computing pagerank...")
65
                players = nx.pagerank(g, alpha = 0.85)
66
                return players
67
        elif players_score_func_name == "trueskill":
68
                output_file = graph_file[:len(graph_file)-6] + "_trueskill.txt"
69
                output_file_2 = graph_file[:len(graph_file)-6] + "_trueskill.pkl"
70
                #from true_skill import graphbased_trueskill
71
                #players = graphbased_trueskill(g)
72
                #from file_io import write_dict_to_file
73
                #write_dict_to_file(players,output_file)
74
 
75
                '''
76
                if os.path.isfile(output_file):
77
                        print("load pre-computed trueskill from: %s" % output_file)
78
                        players = read_dict_from_file(output_file,key_type = int, value_type = float)
79
                elif os.path.isfile(output_file_2):
80
                        print("load pre-computed trueskill from: %s" % output_file_2)
81
                        players = read_from_pickle(output_file_2)
82
                '''
83
                if True:
84
                        print("start computing trueskill...")
85
                        from true_skill import graphbased_trueskill
86
                        players = graphbased_trueskill(g)
87
                        from file_io import write_dict_to_file
88
                        print("write trueskill to file: %s" % output_file)
89
                        write_dict_to_file(players,output_file)
90
 
91
                return players
92
 
93
def breaking_cycles_by_hierarchy_performance(graph_file,gt_file,players_score_name,nodetype = int):
94
 
95
        from measures import report_performance
96
        if players_score_name != "ensembling":
97
                players_score_dict  = computing_hierarchy(graph_file,players_score_name,nodetype = nodetype)
98
                e1,e2,e3,e4 = remove_cycle_edges_by_hierarchy(graph_file,players_score_dict,players_score_name,nodetype = nodetype)
99
 
100
                if players_score_name == "pagerank":
101
                        report_performance(gt_file,e1,"PR")
102
                        return
103
 
104
                if players_score_name == "socialagony":
105
                        note = "SA_"
106
                elif players_score_name == "trueskill":
107
                        note = "TS_"
108
 
109
                report_performance(gt_file,e1, note+"G")
110
                report_performance(gt_file,e2, note+"F")
111
                report_performance(gt_file,e3, note+"B")
112
                report_performance(gt_file,e4, note+"Voting")
113
        else:
114
                players_score_dict  = computing_hierarchy(graph_file,"socialagony",nodetype = nodetype)
115
                e1,e2,e3,e4 = remove_cycle_edges_by_hierarchy(graph_file,players_score_dict,"socialagony",nodetype = nodetype)
116
                report_performance(gt_file,e1,  "SA_G")
117
                write_pairs_to_file(e1,graph_file[:len(graph_file)-6] + "_removed_by_SA-G.edges")
118
                report_performance(gt_file,e2,  "SA_F")
119
                write_pairs_to_file(e2,graph_file[:len(graph_file)-6] + "_removed_by_SA-F.edges")
120
                report_performance(gt_file,e3,  "SA_B")
121
                write_pairs_to_file(e3,graph_file[:len(graph_file)-6] + "_removed_by_SA-B.edges")
122
                report_performance(gt_file,e4,  "SA_Voting")
123
                write_pairs_to_file(e4,graph_file[:len(graph_file)-6] + "_removed_by_SA-Voting.edges")
124
 
125
                players_score_dict  = computing_hierarchy(graph_file,"trueskill",nodetype = nodetype)
126
                e5,e6,e7,e8 = remove_cycle_edges_by_hierarchy(graph_file,players_score_dict,"trueskill",nodetype = nodetype)
127
                report_performance(gt_file,e5,  "TS_G")
128
                write_pairs_to_file(e5,graph_file[:len(graph_file)-6] + "_removed_by_TS-G.edges")
129
                report_performance(gt_file,e6,  "TS_F")
130
                write_pairs_to_file(e6,graph_file[:len(graph_file)-6] + "_removed_by_TS-F.edges")
131
                report_performance(gt_file,e7,  "TS_B")
132
                write_pairs_to_file(e7,graph_file[:len(graph_file)-6] + "_removed_by_TS-B.edges")
133
                report_performance(gt_file,e8,  "TS_Voting")
134
                write_pairs_to_file(e7,graph_file[:len(graph_file)-6] + "_removed_by_TS-Voting.edges")
135
 
136
                e9 = remove_cycle_edges_by_voting(graph_file,[set(e1),set(e2),set(e3),set(e5),set(e6),set(e7)],nodetype = nodetype)
137
                report_performance(gt_file,e9,"H_Voting")
138
                write_pairs_to_file(e9,graph_file[:len(graph_file)-6] + "_removed_by_H-Voting.edges")
139
 
140
 
141
 
142
import argparse
143
if __name__ == "__main__":
144
        parser = argparse.ArgumentParser()
145
        parser.add_argument("-g","--graph_file",default= " ", help = "input graph file name (edges list)")
146
        parser.add_argument("-s","--score_name",default = "pagerank",help = "nodes score function: trueskill, socialagony, ensembling, pagerank...")
147
        parser.add_argument("-t","--gt_edges_file",default = None, help = "ground truth edges file")
148
 
149
        args = parser.parse_args()
150
        graph_file = args.graph_file
151
        players_score_name = args.score_name
152
        gt_file = args.gt_edges_file
153
 
154
        breaking_cycles_by_hierarchy_performance(graph_file,gt_file,players_score_name)
155
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.