GeneticWFM / src /engine /crossover.py
GaetanoParente's picture
first commit
9e62f55
raw
history blame contribute delete
958 Bytes
import numpy as np
import random
from src.config import cfg
def crossover(parent1, parent2):
"""
Operatore di Uniform Crossover vettorializzato.
Scambia le agende settimanali intere (righe) tra i due genitori
per mantenere la coerenza dei vincoli e del target ore sul singolo dipendente.
"""
rate = cfg.genetic_params.get('crossover_rate', 0.85)
# Bypass dell'operatore in base alla probabilità (preservazione dei tratti parentali)
if random.random() > rate:
return parent1.copy(), parent2.copy()
rows, _ = parent1.shape
# Generazione di una maschera booleana 1D per l'estrazione delle righe (dipendenti)
mask = np.random.rand(rows) < 0.5
child1 = parent1.copy()
child2 = parent2.copy()
# Swap vettorializzato: incrociamo i genomi sovrascrivendo le righe mascherate
child1[mask] = parent2[mask]
child2[mask] = parent1[mask]
return child1, child2