← Tous les articles

3 min de lecture Mis à jour le

Création d'une plateforme d'optimisation du tutorat à l'INSA Rouen

INSATutorat · Go · Algorithmes

Dans le cadre de mon Travail d’Initiative Personnelle (TIP) à l’INSA Rouen Normandie, j’ai conçu et développé une plateforme complète pour simplifier et optimiser la gestion du tutorat au sein du département STPI.

Avant cet outil, la gestion des tuteurs (étudiants de STPI2) et des tutorés (étudiants de STPI1) était plutôt fastidieuse. L’idée était de centraliser les inscriptions, récupérer les emplois du temps et générer des affectations automatiques optimisées, en résolvant le problème de la compatibilité des emplois du temps.

Architecture et technologies

J’ai séparé strictement le client et le serveur, pour garder de bonnes performances et une maintenance simple.

Le front-end est fait avec Nuxt, un framework basé sur Vue.js, ce qui permet une navigation fluide puisque la logique d’interface est décorrélée du serveur. Le back-end, lui, est une API RESTful en Golang : ce serveur gère la logique métier, la sécurité par sessions via des cookies sécurisés, et communique avec une base SQL via l’ORM Gorm.

Récupération et optimisation des disponibilités

L’un des gros défis du projet, c’était de maximiser les créneaux horaires en commun entre un tuteur et un tutoré.

L’application récupère automatiquement les emplois du temps via un flux RSS mis à disposition par l’école. Une fois les données extraites avec un parser, les étudiants saisissent leurs disponibilités restantes sur une interface dédiée.

Il a ensuite fallu créer une fonction capable de donner un “score” de compatibilité à un créneau. Après plusieurs essais de modélisation mathématique, j’ai opté pour une décroissance exponentielle :

V(c)=ec8V(c)=e^{-\frac{c}{8}} si c0c\ge0 (où cc est le nombre de cours sur le semestre), et V(c)=0V(c)=0 si l’étudiant est indisponible.

Le score global entre deux étudiants est le produit de leurs scores respectifs, ce qui pénalise vite les créneaux trop chargés.

Le moteur d’affectation : Gale et Shapley

Avoir un score de compatibilité entre chaque paire ne suffit pas. J’ai d’abord essayé un algorithme glouton (faire le choix localement optimal pour chaque tuteur), mais ça s’est révélé sous-optimal à l’échelle globale et créait des disparités.

Je suis donc passé à une solution connue en algorithmique, celle de Gale et Shapley. C’est ce qu’utilise Parcoursup pour résoudre le problème des “appariements stables” : un appariement est stable quand il n’existe aucune paire qui préfèrerait mutuellement être ensemble plutôt qu’avec son partenaire actuel.

Restait le problème des quotas (plus de places proposées par les tuteurs que de demandes de tutorés, par exemple). J’ai adapté l’algorithme en créant des “tutorés factices” avec un score artificiel, pour explorer toutes les possibilités de façon équitable.

Conclusion et ressources

La réalisation de ce projet a pris un peu plus de 49 heures de développement actif, de la modélisation du score de compatibilité à l’implémentation de l’algorithme de Gale-Shapley.

Comme prévu dans mon cahier des charges, ce projet s’inscrit dans une démarche open source. Le code source est disponible sur le dépôt GitLab du projet.

Je mets aussi à disposition les documents du projet :