Aller au contenu

Calcul des répartitions de services

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)