i think i've done this shit RMSE: 0.64 !!!!

This commit is contained in:
2025-11-07 01:44:59 +03:00
parent cfae423f11
commit 74e02df205
3 changed files with 38 additions and 125 deletions

View File

@@ -42,29 +42,25 @@ def grow_mutation(chromosome: Chromosome, max_depth: int) -> Chromosome:
def node_replacement_mutation(chromosome: Chromosome) -> Chromosome:
"""Мутация замены операции (Node Replacement Mutation).
Выбирает случайный узел с операцией (arity > 0) и заменяет его
на случайную другую операцию той же арности, сохраняя поддеревья.
Выбирает случайный узел и заменяет его
на случайную другую операцию той же арности или терминал, сохраняя поддеревья.
Если подходящей альтернативы нет — возвращает копию без изменений.
"""
chromosome = chromosome.copy()
operation_nodes = [n for n in chromosome.root.list_nodes() if n.value.arity > 0]
if not operation_nodes:
return chromosome
target_node = random.choice(operation_nodes)
target_node = random.choice(chromosome.root.list_nodes())
current_arity = target_node.value.arity
same_arity_ops = [
same_arity = [
op
for op in chromosome.operations
for op in list(chromosome.operations) + list(chromosome.terminals)
if op.arity == current_arity and op != target_node.value
]
if not same_arity_ops:
if not same_arity:
return chromosome
new_operation = random.choice(same_arity_ops)
new_operation = random.choice(same_arity)
target_node.value = new_operation