def reduce_average_network_link(network, new_network_path, goal):
    network = Network(network).get_network()
    new_network = copy.copy(network)

    for key, neighbors in network.items():
        if len(neighbors) > goal:
            new_neighbors = sorted(neighbors, key=lambda e: random.random())
            new_neighbors = new_neighbors[0:goal]
            diff = set(neighbors) - set(new_neighbors)
            for d in diff:
                if len(new_network[d]) == 1: # if this is the only link, don't do anything
                    new_neighbors.append(d)
                else:
                    print "remove key(%d) from n(%s)" % (key, new_network[d])
                    new_network[d].remove(key)
                    print "removed key(%d) from n(%s)" % (key, new_network[d])
            new_network[key] = new_neighbors

    print new_network
    #new_network = Network.make_symmetric_network(self, new_network)
    n2 = Network(new_network)
    n2.write(new_network_path)
    n2.dot_gen(new_network_path + ".dot")