fitnesses

This commit is contained in:
2025-11-06 22:50:10 +03:00
parent e6765c9254
commit cc180dc700
12 changed files with 959 additions and 65 deletions

View File

@@ -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)