def remove_cycle_edges_heuristic(g, edges_score, nodetype=int): from remove_self_loops import remove_self_loops_from_graph self_loops = remove_self_loops_from_graph(g) edges_to_be_removed = scc_based_to_remove_cycle_edges_iterately(g, edges_score) edges_to_be_removed = list(set(edges_to_be_removed)) return edges_to_be_removed + self_loops
def remove_cycle_edges_heuristic(graph_file,edges_score,nodetype = int): g = nx.read_edgelist(graph_file,create_using = nx.DiGraph(),nodetype = nodetype) from remove_self_loops import remove_self_loops_from_graph self_loops = remove_self_loops_from_graph(g) edges_to_be_removed = scc_based_to_remove_cycle_edges_iterately(g,edges_score) edges_to_be_removed = list(set(edges_to_be_removed)) return edges_to_be_removed+self_loops
def remove_cycle_edges_BF_iterately(g, players, is_Forward=True, score_name="socialagony"): from remove_self_loops import remove_self_loops_from_graph self_loops = remove_self_loops_from_graph(g) edges_to_be_removed = scc_based_to_remove_cycle_edges_iterately( g, players, is_Forward) edges_to_be_removed = list(set(edges_to_be_removed)) return edges_to_be_removed + self_loops
def scc_based_to_remove_cycle_edges_iterately(g, nodes_score): from remove_self_loops import remove_self_loops_from_graph self_loops = remove_self_loops_from_graph(g) big_sccs = get_big_sccs(g) scc_nodes_score_dict = scores_of_nodes_in_scc(big_sccs, nodes_score) edges_to_be_removed = [] if len(big_sccs) == 0: print("After removal of self loop edgs: %s" % nx.is_directed_acyclic_graph(g)) return self_loops remove_cycle_edges_by_agony_iterately(big_sccs, scc_nodes_score_dict, edges_to_be_removed) # print(" # edges to be removed: %d" % len(edges_to_be_removed)) return edges_to_be_removed + self_loops
def remove_cycle_edges_by_mfas(graph_file): g = nx.read_edgelist(graph_file,create_using = nx.DiGraph(),nodetype = int) from remove_self_loops import remove_self_loops_from_graph self_loops = remove_self_loops_from_graph(g) scc_nodes,_,_,_ = scc_nodes_edges(g) degree_dict = get_nodes_degree_dict(g,scc_nodes) sccs = get_big_sccs(g) if len(sccs) == 0: print("After removal of self loop edgs: %s" % nx.is_directed_acyclic_graph(g)) return self_loops edges_to_be_removed = [] import timeit t1 = timeit.default_timer() greedy_local_heuristic(sccs,degree_dict,edges_to_be_removed) t2 = timeit.default_timer() print("mfas time usage: %0.4f s" % (t2 - t1)) edges_to_be_removed = list(set(edges_to_be_removed)) g.remove_edges_from(edges_to_be_removed) edges_to_be_removed += self_loops edges_to_be_removed_file = graph_file[:len(graph_file)-6] + "_removed_by_mfas.edges" write_pairs_to_file(edges_to_be_removed,edges_to_be_removed_file) return edges_to_be_removed