Questo problema è più difficile di quanto sembri.
Come altri hanno accennato, questo è un problema NP-completo, ma analizziamo cosa significa.
Fondamentalmente, significa che devi guardare a tutte le possibili combinazioni.
Ma "guarda" non ti dice molto cosa devi fare.
Generare tutte le combinazioni possibili è facile. Potrebbe produrre un'enorme quantità di dati, ma non dovresti avere molti problemi a comprendere i concetti di questa parte del problema.
Il secondo problema è quello di giudicare se una data combinazione possibile è buona, cattiva o migliore della precedente soluzione "buona".
Per questo è necessario qualcosa di più del semplice "è una possibile soluzione".
Ad esempio, lo stesso insegnante lavora 5 giorni a settimana per X settimane di fila? Anche se questa è una soluzione funzionante, potrebbe non essere una soluzione migliore dell'alternanza tra due persone in modo che ogni insegnante faccia una settimana ciascuno. Oh, non ci hai pensato? Ricorda, queste sono le persone con cui hai a che fare, non solo un problema di allocazione delle risorse.
Anche se un insegnante potesse lavorare a tempo pieno per 16 settimane di fila, potrebbe essere una soluzione non ottimale rispetto a una soluzione in cui si tenta di alternare gli insegnanti, e questo tipo di bilanciamento è molto difficile da integrare nel software.
Per riassumere, per molte molte persone varrà molto, produrre una buona soluzione a questo problema. Quindi, non è un problema facile da analizzare e risolvere. Preparati a stabilire alcuni obiettivi che non sono al 100% e chiamarli "abbastanza buoni".