Pendant mes études d’informatique, j’ai pu travailler avec mon groupe de projet tutoré sur un des sujets proposés par les enseignants : la conception d’une interface afin d’aider les étudiants à comprendre et mettre en pratique l’algorithme du simplexe. Le but n’était pas seulement d’avoir une bonne note et de valider notre année, mais aussi de fournir un vrai outil permettant de faciliter l’étude de cet algorithme par les futurs étudiants.
Vrai client, problématique réelle, public ciblé. Du concret. Mais voyons ça plus en détail.
Le contexte
L’algorithme du simplexe est utilisé en recherche opérationnelle et en optimisation linéaire pour trouver la solution optimale d’un problème sous contrainte. On définit une fonction objectif, des contraintes, et on manipule tout ça étape par étape pour améliorer notre solution. Mais il est courant de douter lors de la réalisation des étapes :
- Quelle variable doit entrer dans la base ?
- Quelle variable doit en sortir ?
- Comment vérifier les calculs ?
L’idée
Notre interface, développée en Java vanilla, devait répondre à un critère important : l’interactivité.
L’objectif est de guider les étudiants à chacune des étapes, sans pour autant faire le travail à sa leur place. Il faut donc une interface permettant d’entrer le problème d’optimisation, de suivre les étapes du calcul et de choisir les valeurs à échanger (en entrée et en sortie). Une fonctionnalité intéressante à laquelle notre groupe a pensé pour cet interface réside dans la possibllité pour l’étudiant d’avoir un indice sur la prochaine valeur à échanger dans le calcul.
Pour notre interface, nous avons d’ailleurs dû nous concerter avec un autre groupe d’étudiants pour proposer un logiciel qui contenait nos deux projets (dans leur cas, une interface permettant de manipuler des matrices).
Ce n’est qu’une fois sûr des fonctionnalités et spécificités de notre projet que nous avons pu passer à la phase de développement.
Le développement
Le développement de notre interface a représenté un défi sur certains aspects :
- Implémenter l’algorithme et tout ses cas particuliers en Java n’a pas été une mince affaire
- Il a fallu s’y reprendre à plusieurs fois pour afficher correctement une étape dans l’historique
- La fonctionnalité “Indice” nous a donné du fil à retordre
- Le fait de mettre en commun notre interface avec celle du groupe “Matrice” a été le point le plus difficile de notre projet
Pendant la phase de développement, mon rôle a essentiellement été de mettre en place le squelette de l’interface en Java et de gérer l’interactivité entre ses différents composants. J’ai aussi contribué à trouver comment afficher le calcul dans l’interface, et ai ajouté la possibilité d’exporter l’historique en PDF.
Ce que nous avons retenus
De ce projet, nous avons pu retenir l’importance de la bonne utilisation d’un outil de versionnage tel que Git. Lorsque l’on rencontre des soucis de fusion de code, c’est la maîtrise de Git qui permet de résoudre les conflits et d’empêcher les régressions du code.
Un autre élément important que nous avons pu retenir de la réalisation de ce projet, c’est l’importance de la communication entre les équipes lors de projet mené à plusieurs équipes. Dans notre cas, nous devions nous organiser avec le groupe “Matrice” pour faire une interface réunissant nos deux projets. La mise en commun de nos deux projets a été complexe et aurait pu être simplifié en entamant la communication entre nos deux équipes plus tôt lors du développement.
Dans ce genre de projet, la maîtrise de la dimension métier est vitale. Ici, le “métier” c’est l’ensemble des règles concernant l’algorithme du simplexe. Sans une bonne compréhension de ce concept mathématique, il ne nous aurait pas été possible de fournir une interface pouvant aider ses utilisateurs.
Conclusion
Honnêtement, à l’époque, j’aurais préféré avoir le sujet portant sur la création d’un jeu de carte (le moi plus jeune a été assez déçu de passer à côté de l’occasion de développer un jeu vidéo). Mais c’était sans savoir que le groupe désigné sur ce projet ferait un travail inégalable, et que le groupe dont je faisais partie menerait notre projet aussi bien.
J’ai beaucoup apprécié cette première expérience en équipe, proche de ce que l’on pourrait vivre en entreprise. Une petite équipe, dont chaque membre est garant de la qualité d’un aspect du projet (maths, interface, gestion de projet), l’application de tout ce que l’on a appris lors du DUT concernant la gestion d’un projet et la structure d’une interface en Java, ainsi que le plaisir de collaborer sur un projet commun sont autant de choses qui m’ont confortés dans mon choix de devenir développeur informatique.
Enfin, ma plus grande fierté dans ce projet réside dans le fait que, quelques années après avoir réalisé ce projet, le professeur responsable du projet nous a assuré que notre interface était toujours utilisé et qu’il était très content de pouvoir en faire usage avec ses classes. N’est-ce pas ça, finalement, le but de tout développeur ?

Capture d’écran de l’interface “Simplix” (et oui, ce n’est pas joli mais ça fonctionne très bien !)
Le code du projet Simplix est disponible dans le repository Simplix, sur Gitlab.