Spaces:
Sleeping
Sleeping
File size: 958 Bytes
9e62f55 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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 |