Script Python 3 qui permet de déterminer toutes les répartitions possibles des services d’enseignants d’une matière dans un établissement scolaire.
Les contraintes « lourdes » se définissent directement dans le script :
# ------------------------------------------------------------
# DÉFINITION DES CONSTANTES GLOBALES
# ------------------------------------------------------------
# Nombre max de niveaux qu'un enseignant peut avoir (structure)
# Si > nb_total_niveaux, on utilise nb_total_niveaux
NB_NIVEAUX_MAX_STRUCTURE = 3
# ------------------------------------------------------------
# DÉFINITION DES NIVEAUX (heures, effectifs et max par enseignant)
# ------------------------------------------------------------
niveaux_data = [
{"nom": "6e", "heures": 5.5, "groupes": 8, "max_par_enseignant": 3},
{"nom": "5e", "heures": 4.0, "groupes": 8, "max_par_enseignant": 3},
{"nom": "4e", "heures": 4.0, "groupes": 7, "max_par_enseignant": 3},
{"nom": "3e", "heures": 4.0, "groupes": 7, "max_par_enseignant": 2}
]
Enseignants et leurs contraintes lourdes :
# ------------------------------------------------------------
# DÉFINITION DES ENSEIGNANTS
# ------------------------------------------------------------
#
# "contrainte_repartition" :
# blocs indivisibles éventuels par exemle (9, 9) si l'enseignant est à mi-temps une partie de l'année et à temps plein le reste
#
# "horaire": (HP, HSA) : heures postes 18 et HSA max : 2
# "niveaux_fixes": {"4e": 1} : ici une classe de 4ème imposée
# "max_par_niveau": {"4e": 1} : ici une classe de 4ème max
enseignants_data = [
{
"nom": "Fanny",
"horaire": (18, 2),
"contrainte_repartition": None,
"niveaux_fixes": {},
"max_par_niveau": None,
"nb_niveaux_souhaites": None
},
{
"nom": "Agnès",
"horaire": (18, 2),
"contrainte_repartition": None,
"niveaux_fixes": None,
"max_par_niveau": None,
"nb_niveaux_souhaites": None
},
{
"nom": "Hubert",
"horaire": (18, 2),
"contrainte_repartition": None,
"niveaux_fixes": None,
"max_par_niveau": None,
"nb_niveaux_souhaites": None
},
{
"nom": "Olivier",
"horaire": (18, 2),
"contrainte_repartition": None,
"niveaux_fixes": {"3e": 0, "5e": 0},
"max_par_niveau": None,
"nb_niveaux_souhaites": None
},
{
"nom": "Nelly",
"horaire": (18, 2),
"contrainte_repartition": (9, 9),
"niveaux_fixes": None,
"max_par_niveau": None,
"nb_niveaux_souhaites": None
},
{
"nom": "Lou",
"horaire": (15, 0),
"contrainte_repartition": None,
"niveaux_fixes": {},
"max_par_niveau": None,
"nb_niveaux_souhaites": None
},
{
"nom": "Jean",
"horaire": (18, 2),
"contrainte_repartition": None,
"niveaux_fixes": None,
"max_par_niveau": {"5e": 1, "4e": 2, "3e": 2},
"nb_niveaux_souhaites": None
}
]
L’absence de contraintes peut être indiqué par None ou {}.
Le programme permet de sauvegarder les solutions au format csv (pour tableur) ou txt (utiliser une police à largeur fixe pour un affichage correct).
Le programme : Calcul de répartition horaire (zip)