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_BF.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 s_c_c import filter_big_scc
3
from s_c_c import get_big_sccs
4
from file_io import write_pairs_to_file
5
from file_io import read_dict_from_file
6
#from network_functions import analysis_graph
7
 
8
def remove_cycle_edges_by_ranking_score_iterately(sccs,players,edges_to_be_removed,is_Forward):
9
        while True:
10
                graph = sccs.pop()
11
                node_scores_dict = {}
12
                for node in graph.nodes():
13
                        node_scores_dict[node] = players[node]
14
                from helper_funs import pick_from_dict
15
                max_k,max_v,min_k,min_v = pick_from_dict(node_scores_dict,"both")
16
 
17
                #node_scores = [(node,players[node]) for node in graph.nodes_iter()]
18
                #sorted_node_scores = sorted(node_scores,key = lambda x: x[1])
19
 
20
                if is_Forward:
21
                        node,score = max_k,max_v
22
                        target_edges = [(node,v) for v in graph.successors(node)]
23
                        #target_edges = [(v,node) for v in graph.predecessors_iter(node)]
24
                else:
25
                        node,score = min_k,min_v
26
                        #node,score = sorted_node_scores.pop()
27
                        target_edges = [(v,node) for v in graph.predecessors(node)]
28
 
29
                '''
30
                from remove_cycle_edges_by_agony import get_agonies
31
                pair_agony_dict = get_agonies(target_edges,players)
32
                from helper_funs import pick_from_dict
33
                pair_max_agony,agony = pick_from_dict(pair_agony_dict)
34
                print("edge with max agony: %s, max agony: %0.4f" % (pair_max_agony,agony))
35
                target_edges = [pair_max_agony]
36
                '''
37
 
38
                edges_to_be_removed += target_edges
39
                graph.remove_edges_from(target_edges)
40
 
41
                sub_graphs = filter_big_scc(graph,target_edges)
42
                if sub_graphs:
43
                        sccs += sub_graphs
44
                if not sccs:
45
                        return
46
 
47
def scores_of_nodes_in_scc(sccs,players):
48
        from s_c_c import nodes_in_scc
49
        scc_nodes = nodes_in_scc(sccs)
50
        scc_nodes_score_dict = {}
51
        for node in scc_nodes:
52
                scc_nodes_score_dict[node] = players[node]
53
        #print("# scores of nodes in scc: %d" % (len(scc_nodes_score_dict)))
54
        return scc_nodes_score_dict
55
 
56
 
57
def scc_based_to_remove_cycle_edges_iterately(g,nodes_score,is_Forward):
58
        big_sccs = get_big_sccs(g)
59
        if len(big_sccs) == 0:
60
                print("After removal of self loop edgs: %s" % nx.is_directed_acyclic_graph(g))
61
                return []
62
        scc_nodes_score_dict = scores_of_nodes_in_scc(big_sccs,nodes_score)
63
        edges_to_be_removed = []
64
        remove_cycle_edges_by_ranking_score_iterately(big_sccs,scc_nodes_score_dict,edges_to_be_removed,is_Forward)
65
        #print(" # edges to be removed: %d" % len(edges_to_be_removed))
66
        return edges_to_be_removed
67
 
68
def remove_cycle_edges_BF_iterately(g,players,is_Forward = True,score_name = "socialagony"):
69
        from remove_self_loops import remove_self_loops_from_graph
70
        self_loops = remove_self_loops_from_graph(g)
71
        edges_to_be_removed = scc_based_to_remove_cycle_edges_iterately(g,players,is_Forward)
72
        edges_to_be_removed = list(set(edges_to_be_removed))
73
        return edges_to_be_removed+self_loops
74
 

powered by: WebSVN 2.1.0

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