3 min de lecture Mis à jour le

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


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) pouvait s’avérer fastidieuse. L’objectif principal de ce projet était de centraliser les inscriptions, de récupérer les emplois du temps et de générer des affectations automatiques optimisées.

Dans cet article, je détaille l’architecture technique retenue ainsi que le cœur algorithmique du projet permettant de résoudre le problème complexe des emplois du temps.

Architecture et Technologies

Afin de garantir de bonnes performances et une maintenance aisée, j’ai opté pour une séparation stricte entre le client et le serveur :

  • Le front-end : l’interface utilisateur a été développée avec Nuxt, un framework basé sur Vue.js. Ce choix a permis de créer une navigation fluide, la logique d’interface étant totalement décorrélée du serveur.
  • Le back-end : j’ai développé 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 de données SQL par l’intermédiaire de l’ORM Gorm.

Récupération et optimisation des disponibilités

L’un des défis majeurs du projet consistait à maximiser les créneaux horaires en commun entre un tuteur et un tutoré.

Pour y parvenir, 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 à l’aide d’un parser, les étudiants peuvent saisir 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 modélisations mathématiques, j’ai opté pour une approche par 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 rapidement les créneaux trop chargés.

Le moteur d’affectation : Gale et Shapley

Avoir un score de compatibilité entre chaque paire d’étudiants ne suffit pas. Ma première approche a été d’utiliser un algorithme glouton (faire le choix localement optimal pour chaque tuteur). Cependant, cette méthode s’est révélée sous-optimale à l’échelle globale, créant des disparités.

J’ai donc implémenté une solution célèbre en algorithmique : l’algorithme de Gale et Shapley. Utilisé par des plateformes comme Parcoursup, il permet de résoudre le problème des “appariements stables”. Un appariement est jugé stable lorsqu’il n’existe aucune paire qui préfèrerait mutuellement être ensemble plutôt qu’avec leur partenaire actuel.

Afin de gérer les problèmes de quotas (par exemple, s’il y a plus de places proposées par les tuteurs que de demandes de tutorés), j’ai adapté l’algorithme en créant des “tutorés factices” dotés d’un score artificiel, permettant ainsi d’explorer toutes les possibilités de manière équitable.

Conclusion et ressources

La réalisation de ce projet aura nécessité un peu plus de 49 heures de développement actif. Ce fut une excellente occasion de confronter des problèmes théoriques (mariages stables, appariements) à un cas d’usage réel et utile pour la vie étudiante.

Comme annoncé dans mon cahier des charges, ce projet s’inscrit dans une démarche Open Source. Vous pouvez retrouver l’intégralité du code source sur le dépôt GitLab du projet : 👉 https://gitlab.insa-rouen.fr/rleprevost/stpi-tutorat

Afin de partager la démarche complète, je mets également à disposition du public les documents de ce projet :