Beispiel #1
0
    def mutate(self, pruning=False):
        """
        Alter a random node in chromosomes.
        """

        # randomly select node to mutate
        mpoint = r.randint(0, self.size - 1)

        # mutate whole node by replacing children with random subtree
        if r.random() >= 0.5:
            rand_tree = random_tree(2)
            x2 = r.randint(0, rand_tree.node_num - 1)
            node = rand_tree.get_node(x2)
            self.chromosomes.set_node(mpoint, node)
            # check and prune tree with new subtree for inefficiencies
            if pruning:
                self.chromosomes.prune()

        # or just mutate node value based on current type
        else:
            node = self.chromosomes.get_node(mpoint)
            # constant
            if node.value in CONSTS:
                mutated_value = CONSTS[r.randint(0, len(CONSTS) - 1)]
            # variable
            elif node.value in eugene.Config.VAR.keys():
                mutated_value = eugene.Config.VAR.keys()[r.randint(0, len(eugene.Config.VAR.keys()) - 1)]
            # a unary operator
            elif node.value in UNARIES:
                mutated_value = UNARIES[r.randint(0, len(UNARIES) - 1)]
            # a binary operator
            elif node.value in BINARIES:
                mutated_value = BINARIES[r.randint(0, len(BINARIES) - 1)]
            # a n-ary operator
            # elif node.value in NARIES:
            #     mutated_value = NARIES[r.randint(0, len(NARIES) - 1)]
            # EPHEMERAL constant random ( 0:1, uniform -500:500, or normal -500:500 )
            else:
                mutated_value = EPHEMERAL[r.randint(1, len(EPHEMERAL) - 1)]()

            # mutate node value (keeps children, if applicable)
            node.value = mutated_value
            self.chromosomes.set_node(mpoint, node)
Beispiel #2
0
    def test_12_random_trees(self):
        """Generate 500 random trees"""
        NUM_TREES = 500
        random_trees = [random_tree(10) for i in xrange(NUM_TREES)]

        self.assertEqual(len(random_trees), NUM_TREES)