def get_random_edge(self):
nodes = [<EOL>(n, self.in_out_ratio(n))<EOL>for n in self.unscored_nodes_iter()<EOL>if n != self.target_node<EOL>]<EOL>node, deg = min(nodes, key=itemgetter(<NUM_LIT:1>))<EOL>log.log(<NUM_LIT:5>, '<STR_LIT>', node, deg)<EOL>possible_edges = self.graph.in_edges(node, keys=True)<EOL>log.log(<NUM_LIT:5>, '<STR_LIT>', possible_edges)<EOL>edge_to_remove = random.choice(possible_edges)<EOL>log.log(<NUM_LIT:5>, '<STR_LIT>', edge_to_remove)<EOL>return edge_to_remove<EOL>
This function should be run when there are no leaves, but there are still unscored nodes. It will introduce
        a probabilistic element to the algorithm, where some edges are disregarded randomly to eventually get a score
        for the network. This means that the score can be averaged over many runs for a given graph, and a better
        data structure will have to be later developed that doesn't destroy the graph (instead, annotates which edges
        have been disregarded, later)

           1. get all un-scored
           2. rank by in-degree
           3. weighted probability over all in-edges where lower in-degree means higher probability
           4. pick randomly which edge

        :return: A random in-edge to the lowest in/out degree ratio node. This is a 3-tuple of (node, node, key)
        :rtype: tuple