Spaces:
Sleeping
Sleeping
| 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 |