GeneticWFM / src /utils /visualization.py
GaetanoParente's picture
first commit
9e62f55
import numpy as np
from src.config import cfg
def get_final_coverage_matrix(schedule, employees):
"""
Proietta il genoma ottimizzato (la schedule finale) sulla matrice temporale.
Genera il tensore 2D di copertura reale (Staffing effettivo)
utilizzato per il rendering grafico su UI e l'analisi finale degli scostamenti.
"""
num_days = 7
num_slots = cfg.daily_slots
# Inizializzazione matrice globale di copertura
coverage = np.zeros((num_days, num_slots), dtype=int)
for i, emp in enumerate(employees):
# Estrazione del fenotipo (firma oraria comprensiva di pause VDT)
mask = emp['mask']
for day in range(num_days):
start = schedule[i, day]
# Applicazione solo se il dipendente è schedulato (esclude OFF/Assenze)
if start >= 0:
# Boundary check: tronca la maschera se il turno sforerebbe la griglia oraria del giorno
end = min(start + len(mask), num_slots)
real_len = end - start
# Proiezione algebrica della maschera operativa sulla coverage globale
if real_len > 0:
coverage[day, start:end] += mask[:real_len]
return coverage