← Tous les articles
Ingénierie

Anatomie du moteur : comment un emploi du temps est réellement construit

Dans un logiciel d'emploi du temps, ce que vous achetez vraiment, c'est le moteur. Nous ouvrons le nôtre couche par couche : des données brutes au plan prouvé.

Moteur de planificationOptimisationEmploi du temps

Choisir un logiciel d'emploi du temps, ce n'est pas choisir une interface. Les écrans se ressemblent et les boutons s'apprennent en un après-midi. Ce qui décide du nombre de jours d'août que vous récupérerez, c'est le moteur derrière le bouton « Générer » — et dans presque tous les produits, ce moteur est une boîte fermée.

Cet article ouvre la nôtre. Le moteur de Bildena compte cinq couches. Nous verrons dans l'ordre ce que fait chacune, pourquoi elle est là, et comment nous saurions qu'elle se trompe en silence.

MOTEUR DE PLANIFICATION 12345 Données de l'écoleentréeCartes de cours, disponibilités, salles, règles de classe.Rien n'est deviné : ce qui est saisi est ce qui compte.Constructeur de modèleTimetableProblemBuilderChaque heure devient une variable, chaque règle une contrainte.La traduction est sans perte ; aucune règle n'est abandonnée.Contrôle préalableTimetableCapacityScanHeures ouvertes de la classe appariées à celles de l'enseignant.Si c'est impossible : arrêt en millisecondes, goulot nommé.Noyaunoyau du solveurLes contraintes dures ne cèdent jamais ; le reste est pondéré.Quand la borne monte, « rien de mieux » est prouvé.Emploi du temps et notePerfectionScoreSur 100 : 80 pour le placement, 20 pour la qualité mesurable.Pas la pénalité du solveur — comparable entre établissements.
Les cinq couches. L'entrée et la sortie restent à l'extérieur ; tout ce qui est dans le cadre en pointillés s'exécute quand vous lancez la génération.

1. Les données de l'école sont traduites sans perte

Le moteur ne travaille pas avec des cartes de cours, mais avec des variables de décision. Chaque carte est découpée en blocs selon son volume hebdomadaire, et chaque bloc choisit un jour, une suite d'heures consécutives et, quand cela compte, une salle. La semaine entière d'un établissement est une combinaison cohérente de ces choix.

Cette traduction obéit à une seule règle, et elle est stricte : elle doit être sans perte. Le moteur ne dit jamais « je n'ai pas compris cette contrainte, je la saute ». Cours partagés, classes dédoublées, barrettes d'options, semaines A/B, double vacation — tout vit dans le même espace de variables et s'exprime dans la même mathématique. Chaque champ demandé par l'interface a une contrepartie dans le modèle ; un champ sans contrepartie n'est jamais demandé.

L'engagement est plus lourd qu'il n'y paraît. Ajouter une contrainte à l'interface sans la relier au modèle, c'est mentir en silence : vous cochez la case, le plan se génère, la règle n'a jamais été appliquée — et c'est un enseignant qui le découvre en septembre.

2. L'impossibilité est détectée avant même de résoudre

La façon coûteuse d'apprendre qu'un emploi du temps n'est pas constructible, c'est d'essayer. Les contrôles classiques examinent chaque dimension séparément : la classe a-t-elle assez d'heures ouvertes, l'enseignant assez d'heures libres ? Les deux peuvent passer largement alors que le plan reste impossible. Car un cours ne peut se poser que là où la classe est ouverte et l'enseignant libre ; quand les deux ensembles sont larges mais que leur intersection est étroite, les tests de comptage ne voient rien.

Bildena construit à la place un couplage en deux parties, pour chaque classe et chaque enseignant, entre les heures de cours et les créneaux éligibles. Une classe suit un cours à la fois, un enseignant se trouve à un seul endroit ; les heures doivent donc s'associer une à une aux créneaux. S'il n'existe pas de couplage complet, l'emploi du temps est assurément impossible — ce n'est pas une estimation, c'est une conséquence de la condition de Hall.

Nous avons mesuré ce que vaut cette distinction. Dans un établissement réel, les contrôles sont passés sans une alerte et la génération a répondu « impossible » au bout de 186 secondes sans pouvoir en dire la raison. La même situation est aujourd'hui détectée en quelques millisecondes, le goulot d'étranglement écrit noir sur blanc : « ces cinq matières demandent 22 heures au total, et les créneaux qu'elles peuvent partager n'en font que 19 ».

Une règle de cette couche n'est pas négociable : elle ne produit jamais de faux positif. Les ensembles de créneaux candidats sont volontairement larges. Si l'analyse dit « constructible », cela signifie seulement qu'elle a passé ce test ; mais si elle dit « impossible », c'est impossible. Envoyer un planificateur dans une impasse qui n'existe pas coûte plus cher qu'arriver en retard.

3. Contraintes dures et préférences ne partagent jamais la même boîte

Au cœur tourne un solveur de contraintes bâti sur la technologie d'optimisation de Google et spécialisé par nos soins pour la planification scolaire. C'est dans cette spécialisation que réside le travail : ce qui décide du résultat n'est pas le noyau lui-même, mais la fidélité avec laquelle un établissement lui a été décrit.

Au centre de cette description se tient une seule distinction. Certaines choses ne peuvent pas être violées, d'autres sont simplement souhaitées, et les deux ne partagent jamais la même boîte.

Dur — jamais violéSouple — arbitré par pondération
Conflits enseignant, classe, groupe et salleRépartition d'une matière dans la semaine
Conflits élèves (en planification par élève)Trous des enseignants
Heures d'indisponibilité et jours fermésÉquilibre de la charge quotidienne
Séparation des semaines A et BPréférences d'ordre souples
Limites journalières et hebdomadairesUsage des heures signalées
Règles d'ordre dures et limites de préparation
La différence pratique : vous ne pouvez pas créer un conflit en déplaçant un curseur. Dans les moteurs heuristiques, « j'ai trop monté un poids et j'ai obtenu un conflit » est un résultat réel, puisque tout concourt dans le même pot de points. Ici, une contrainte dure n'est pas une note mais un mur : cette région de l'espace des solutions n'existe pas.

4. « Rien de mieux » est une borne, pas une impression

Tout au long de la recherche, le solveur porte deux nombres : le coût du meilleur emploi du temps qu'il détient, et la borne inférieure théorique sous laquelle aucun agencement ne peut descendre. L'un baisse, l'autre monte. Quand ils se rejoignent, le travail est terminé et le résultat n'est pas seulement bon : son optimalité est prouvée.

S'ils ne se rejoignent pas, l'écart restant vous est communiqué. « Cet emploi du temps est au plus à telle distance du meilleur possible » est la phrase qui vous permet de décider : accepter le plan, ou laisser le moteur poursuivre. Une heuristique ne peut pas formuler cette phrase : sans représentation de l'idéal, elle ne peut pas mesurer sa distance à l'idéal. À la fin, elle sait seulement qu'elle s'est arrêtée.

Nous avons consacré un article entier à cette distinction : ce que signifie un emploi du temps prouvé optimal.

5. Le résultat tient en un nombre — mais pas celui du solveur

Chaque génération reçoit une note de perfection sur 100. Quatre-vingts points vont au placement : la note est pleine si chaque heure de cours a trouvé sa place. Les vingt points restants mesurent la qualité — trous des classes, trous des enseignants, situations conditionnelles et règles de planification enfreintes.

Ce choix est délibéré : la somme des pénalités du solveur ne sert pas de note. C'est une somme unique, incomparable d'un établissement à l'autre, et dont le sens se déplace dès que vous changez une pondération — les 1 240 de la semaine dernière et les 980 de cette semaine ne mesurent pas la même chose. La note est donc recalculée depuis l'emploi du temps lui-même, et la même formule tourne sur le serveur et dans le navigateur : déplacez un cours à l'écran et la note change avant même que vous ayez enregistré.

Qui contrôle le moteur ?

La panne la plus dangereuse d'un moteur de planification n'est pas le plantage : c'est de se tromper en silence. Le plan sort, l'écran est vert, et une contrainte n'a jamais été appliquée. Cette famille de défauts ne se voit pas à l'œil — elle se trouve par les tests. Côté moteur seul, plus de 2 800 tests automatisés s'exécutent, et trois familles visent directement ce risque :

  • Tests de liaison. Pour chaque contrainte dure, nous construisons une entrée qui la viole délibérément et exigeons du moteur la réponse impossible. Vérifier qu'un emploi du temps « a l'air correct » ne suffit pas : c'est le seul moyen de savoir si une règle est réellement passée du code au modèle.
  • Régression sur des établissements réels. Exécutions sur des données importées d'établissements réels, avec une graine fixée. Si une amélioration du moteur dégrade l'emploi du temps d'un autre établissement, cela se voit avant la mise en production.
  • Équivalence des formulations. Le même problème est décrit de deux façons et les résultats sont vérifiés équivalents — la preuve qu'un modèle modifié n'a pas changé de sens.
Pourquoi nous y tenons. Quand un établissement accepte un plan, ce sont un bon millier d'heures de cours et les semaines de centaines de personnes qui s'y accrochent. Passé ce point, découvrir que « la contrainte n'était pas vraiment appliquée » ne coûte pas une correction logicielle — cela coûte un second mois d'août.

La surveillance utilise le même moteur, dans un modèle distinct

Les services de surveillance passent eux aussi par ce noyau, qu'ils soient organisés par récréation ou par journée. L'essentiel est la frontière d'architecture : le planificateur de surveillance lit les placements de cours et ne les écrit jamais. Régénérer un tableau de surveillance ne touche pas à votre emploi du temps. Cette règle est tenue en revue de code, pas laissée à la bonne volonté.

Ce que nous ne promettons pas

Annoncer les limites à l'avance coûte moins cher que de les expliquer après coup.

  • L'optimalité vaut pour l'objectif que vous avez défini. Donnez un poids nul aux trous des enseignants et le moteur produira volontiers un plan qui en est truffé, puis en prouvera l'optimalité. La mathématique est fidèle à vos priorités — y compris à vos erreurs.
  • Il n'invente pas les ressources qui manquent. Aucun solveur ne crée une salle que vous n'avez pas ni une heure qui n'existe pas. Il peut seulement vous dire tôt et précisément qu'elles manquent.
  • La preuve n'est pas toujours atteinte dans le temps imparti. Sur des établissements très grands ou très contraints, le moteur peut s'arrêter avec un petit écart résiduel. La différence : il vous annonce cet écart au lieu de présenter une recherche partielle comme une réponse finie.

L'engagement que nous prenons

À la fin d'une génération, vous savez lequel de ces trois cas s'est produit : cet emploi du temps est optimal ; cet emploi du temps est réalisable et à telle distance annoncée de l'optimum ; ou ces exigences ne peuvent pas être satisfaites toutes ensemble, et voici l'ensemble qui entre en collision.

Vous n'obtiendrez jamais « voilà ce que j'ai réussi à faire ». C'est toute la différence.


Bildena Scheduler est un système web de planification scolaire bâti sur la technologie d'optimisation de Google et nos propres algorithmes de planification, développé et hébergé en Allemagne. Pendant l'essai gratuit, vous pouvez lancer une génération complète sur vos propres données — importées depuis aSc TimeTables, Untis ou Excel — et comparer le résultat à votre plan actuel.

Voyez-le résoudre votre propre emploi du temps

Importez depuis aSc, Untis ou Excel et lancez une génération complète gratuitement — premier emploi du temps en 3 minutes.

Commencer gratuitement

Poursuivre la lecture