def mate(self, program): childA = Node.copy(self.root) childB = Node.copy(program.root) nodeA = random.choice(Node.traverseInOrder(childA)) nodeB = random.choice(Node.traverseInOrder(childB)) childA = Node.replace(childA, nodeA, nodeB) childB = Node.replace(childB, nodeB, nodeA) return [Program(childA), Program(childB)]
def mutate(self): for program in self.programs: for node in Node.traverseInOrder(program.root): if random.random() < self.MUTATION_PROBABILITY: if node.isTerminal(): node.value = self._createTerminalNode(self.problem).value else: node.value = self._createOperatorNode(self.problem).value
def mutate(self): for program in self.programs: for node in Node.traverseInOrder(program.root): if random.random() < self.MUTATION_PROBABILITY: if node.isTerminal(): node.value = self._createTerminalNode( self.problem).value else: node.value = self._createOperatorNode( self.problem).value
def toString(self): return "{0} [{1} nodes]".format(Node.toString(self.root), len(Node.traverseInOrder(self.root)))