Ce problème est plus difficile qu'il n'y paraît.
Comme d'autres l'ont fait allusion, il s'agit d'un problème NP-complet, mais analysons ce que cela signifie.
Fondamentalement, cela signifie que vous devez examiner toutes les combinaisons possibles.
Mais «regarder» ne vous dit pas grand-chose de ce que vous devez faire.
Générer toutes les combinaisons possibles est facile. Cela peut produire une énorme quantité de données, mais vous ne devriez pas avoir beaucoup de problèmes pour comprendre les concepts de cette partie du problème.
Le deuxième problème est celui de juger si une combinaison possible donnée est bonne, mauvaise ou meilleure que la «bonne» solution précédente.
Pour cela, vous avez besoin de plus que "est-ce une solution possible".
Par exemple, le même enseignant travaille-t-il 5 jours par semaine pendant X semaines consécutives? Même si c'est une solution de travail, ce n'est peut-être pas une meilleure solution que d'alterner entre deux personnes pour que chaque enseignant fasse une semaine chacun. Oh, tu n'y as pas pensé? N'oubliez pas que vous avez affaire à des personnes, pas seulement à un problème d'allocation de ressources.
Même si un enseignant pouvait travailler à temps plein pendant 16 semaines consécutives, cela pourrait être une solution sous-optimale par rapport à une solution où vous essayez d'alterner entre les enseignants, et ce type d'équilibrage est très difficile à intégrer dans le logiciel.
Pour résumer, produire une bonne solution à ce problème vaudra beaucoup, pour beaucoup de gens. Par conséquent, ce n'est pas un problème facile à décomposer et à résoudre. Soyez prêt à définir des objectifs qui ne sont pas à 100% et à les qualifier de «assez bons».