i think i've done this shit RMSE: 0.64 !!!!
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user