fitnesses
This commit is contained in:
@@ -22,32 +22,6 @@ class Chromosome:
|
||||
def prune(self, max_depth: int) -> None:
|
||||
self.root.prune(self.terminals, max_depth)
|
||||
|
||||
def shrink_mutation(self) -> None:
|
||||
"""Усекающая мутация. Заменяет случайно выбранную операцию на случайный терминал."""
|
||||
operation_nodes = [n for n in self.root.list_nodes() if n.value.arity > 0]
|
||||
|
||||
if not operation_nodes:
|
||||
return
|
||||
|
||||
target_node = random.choice(operation_nodes)
|
||||
|
||||
target_node.prune(self.terminals, max_depth=1)
|
||||
|
||||
def grow_mutation(self, max_depth: int) -> None:
|
||||
"""Растущая мутация. Заменяет случайно выбранный узел на случайное поддерево."""
|
||||
target_node = random.choice(self.root.list_nodes())
|
||||
|
||||
max_subtree_depth = max_depth - target_node.get_level() + 1
|
||||
|
||||
subtree = Chromosome.grow_init(
|
||||
self.terminals, self.operations, max_subtree_depth
|
||||
).root
|
||||
|
||||
if target_node.parent:
|
||||
target_node.parent.replace_child(target_node, subtree)
|
||||
else:
|
||||
self.root = subtree
|
||||
|
||||
def __str__(self) -> str:
|
||||
"""Строковое представление хромосомы в виде формулы в инфиксной форме."""
|
||||
return str(self.root)
|
||||
|
||||
Reference in New Issue
Block a user