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.
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.
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 salle | Ré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 B | Préférences d'ordre souples |
| Limites journalières et hebdomadaires | Usage des heures signalées |
| Règles d'ordre dures et limites de préparation |
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.
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.