Exemple #1
0
def delete_nodes(G, type='deg', percent_remove=0.01):

    total_nodes = G.number_of_nodes()
    remove_count = int(percent_remove * total_nodes)

    print(' Adversary removes {} nodes'.format(remove_count))

    if type == 'deg':
        deg = dict(G.degree())
        deg_sorted = _mylib.sortDictByValues(deg, reverse=True)
        l = deg_sorted
    elif type == 'pr':
        pr = dict(nx.pagerank(G))
        pr_sorted = _mylib.sortDictByValues(pr, reverse=True)
        l = pr_sorted
    elif type == 'betweeness':
        betweeness = dict(nx.betweenness_centrality(G))
        betweeness_sorted = _mylib.sortDictByValues(betweeness, reverse=True)
        l = betweeness_sorted

    G_copy = G.copy()

    for idx, i in enumerate(l):
        if idx == remove_count:
            break
        node = i[0]
        d = i[1]
        G_copy.remove_node(node)
        print(' {} Remove node {}'.format(idx, node))

    return G_copy
Exemple #2
0
def delete_hub_nodes_connect(G, percent_remove=.01):
    total_node = G.number_of_nodes()
    remove_count = int(percent_remove * total_node)
    print('Remove total:' + str(remove_count))
    G_copy = G.copy()
    i = 0

    possible_nodes = set(G_copy.nodes())

    while i < remove_count:
        deg = dict(G_copy.degree(possible_nodes))
        deg_sorted = _mylib.sortDictByValues(deg, reverse=True)
        selected_node = deg_sorted[0][0]

        G_tmp = G_copy.copy()
        G_tmp.remove_node(selected_node)

        isConnected = nx.is_connected(G_tmp)

        if isConnected:
            G_copy.remove_node(selected_node)
            i += 1
        else:
            print('Cannot remove this node \t {} / {}'.format(i, remove_count))
        possible_nodes.remove(selected_node)

    return G_copy
    def randomFromLargeCommunity(self, G, dataset):
        com_fname = './data/pickle/communities_{}.pickle'.format(dataset)
        if os.path.isfile(com_fname):
            partition = pickle.load(open(com_fname, 'rb'))
        else:
            partition = community.best_partition(G)
            pickle.dump(partition, open(com_fname, 'wb'))

        count_members = {}
        for p in set(partition.values()):
            members = _mylib.get_members_from_com(p, partition)
            count_members[p] = len(members)

        selected_p, i = _mylib.get_max_values_from_dict(
            count_members, count_members.keys())
        members = _mylib.get_members_from_com(selected_p, partition)

        degree = self._graph.degree(members)
        degree_sorted = _mylib.sortDictByValues(degree, reverse=True)
        size = int(.5 * len(degree))
        degree_sorted = degree_sorted[:size]
        return random.choice(degree_sorted)[0]
 def randomHighDegreeNode(self):
     degree = self._graph.degree()
     degree_sorted = _mylib.sortDictByValues(degree, reverse=True)
     size = int(.3 * len(degree))
     degree_sorted = degree_sorted[:size]
     return random.choice(degree_sorted)[0]