Projets M1 - CHPS

Planning 2025 - 2026

Les projets sont divisés en deux périodes. Les dates importantes sont les suivantes.

Soutenances 1ère période 7 janvier

Assister aux soutenances de vos camarades est enrichissant, c’est pourquoi la présence est obligatoire à l’ensemble des soutenances.

Vous disposez de vingt minutes de présentation et quinze minutes de questions. Vous devez présenter en français mais vous pouvez avoir vos supports (slides) en anglais si vous le souhaitez.

 10h00-10h45 Groupe A
 10h45-11h30 Groupe B
 11h30-12h15 Groupe C

 14h30-15h15 Groupe X
 15h15-16h00 Groupe Y
 16h00-16h45 Groupe Z

Organisation

Choix du groupe et du sujet

Il faut constituer des groupes de quatre personnes. Chaque groupe classera les sujets suivant par ordre de préférence.

Pour indiquer votre choix de groupe et de sujet, merci d’envoyer un mail à < hugo POINT bollore AROBASE uvsq POINT fr > hugo.bollore@uvsq.fr. Suivez scrupuleusement les instructions suivantes:

Les sujets seront attribués en essayant de satisfaire vos choix. Si votre mail ne respecte pas les consignes ci-dessus (il manque des membres en CC, il n’y a pas tous les sujets, le mail est envoyé trop tôt, etc.), vous serez moins prioritaire sur le choix des sujets que les groupes ayant respecté les consignes.

Les attributions finales de projet vous seront communiquées rapidement.

Prise de contact avec l’encadrant

Une fois votre sujet final confirmé vous devez prendre contact avec l’encadrant. L’encadrant vous indiquera ce qu’il attend de vous dans le projet et quels sont les objectifs pour la première et deuxième période.

L’encadrant pourra vous aider par mail et vous devrez planifier plusieurs rendez-vous au cours de l’année. C’est votre responsabilité de prendre contact avec lui et de lui demander des rendez vous ou lui poser des questions quand vous avez besoin d’aide.

Travail

Chaque groupe doit obligatoirement mettre en place un dépôt github contenant les sources de vos travaux ainsi que tout script d’expérimentation.

Le travail peut être réparti mais vous devez tous participer au développement de votre projet. A ce titre, il n’est pas accepté qu’une personne n’ait aucune contribution sur le dépôt github.

Vous devrez impérativement renseigner vos noms et prénoms sur vos comptes github pour que l’on puisse évaluer les participations de chacun.

Celui-ci devra être publique et vous devrez transmettre le lien vers celui-ci à :

Vous devrez indiquer dans le champ objet « [PPN] Lien dépôt Groupe x» et dans le mail la liste des étudiants de votre groupe

Déroulement des projets

Plusieurs étapes seront obligatoires:

Rapports et soutenances

À la fin de chaque période un rapport sera envoyé par mail en mettant en destinataires < hugo POINT bollore AROBASE uvsq POINT fr > hugo.bollore@uvsq.fr et à votre encadrant.

Chaque rapport doit faire environ 10 pages en police 11 simple interligne. Ceci sans compter les figures ou les pages blanches, soit environ 4000 mots.

Le plagiat est strictement interdit, nous vous invitons à prendre connaissance de la charte anti-plagiat.

Le code source produit durant le projet sera propre, indenté, commenté et documenté.

Il faudra aussi préparer une présentation de 20 minutes avec 15 minutes de questions. Les slides seront à envoyer à la fin de la soutenance aux mêmes destinataires que précédemment.

Sujets

1) Implémentation d’un réseau de neurones pour la reconnaissance de chiffres manuscrit

Un problème classique pour aborder le machine learning est la résolution du jeu de données MNIST. Il s’agit d’une base de données regroupant des images de chiffres manuscrits de petite taille (28x28) en noir et blanc.

Le but est d’entraîner un programme (dans notre cas un réseau de neurones) à classifier chaque image dans la bonne catégorie (un chiffre de 0 à 9). Ce réseau de neurones devra être implémenté de zéro en C ou C++, ce qui nécessitera de se familiariser avec la théorie dans un premier temps.

Le projet se déroulera de la manière suivante.

Premier semestre:

Second semestre:

En résumé, l’objectif du premier semestre sera de développer une version minimale, et celui du deuxième d’améliorer le temps d’entraînement et la précision.

2) Path tracing: méthodes de Monte Carlo pour la synthèse d’images

Les techniques de ray tracing pour la synthèse d’images en trois dimensions deviennent de plus en plus répandues. Leur principe est de simuler le trajet des photons (ou “rayons”) dans le but d’obtenir un rendu réaliste.

En particulier, l’objectif de ce sujet sera d’implémenter un renderer fonctionnant sur le principe du path tracing, une approche combinant le ray tracing “classique” avec les méthodes de Monte-Carlo (càd. utilisant des procédés aléatoires pour résoudre des problèmes déterministes). Cette approche consiste à choisir aléatoirement les rebonds des rayons quand ils rencontrent un obstacle. Elle a notamment l’avantage de converger vers la solution exacte de l’équation de rendu, qui décrit l’équilibre entre la lumière reçue et émise par une surface, permettant ainsi des rendus particulièrement fidèles. Le projet se déroulera de la manière suivante.

Premier semestre:

Second semestre:

3) Méthodes ensemblistes pour la modélisation

On dispose d’un jeu de données regroupant les exécutions d’un programme avec plusieurs configurations. On souhaite modéliser ce programme via des techniques d’IA afin de pouvoir plus facilement explorer l’espace des configurations. L’objectif de ce projet est d’implémenter en C ou C++ une technique ensembliste pour la régression, à partir de zéro. Plus spécifiquement, on s’intéressera aux méthodes de bagging et de boosting se basant sur les arbres de décisions.

Pour cela, les étudiants devront réaliser un travail bibliographique pour mieux comprendre le domaine des techniques ensemblistes et le fonctionnement des arbres de décisions, puis implémenter un ou plusieurs de ces algorithmes. Le projet se composera en deux phases :

Premier semestre

Second semestre

Une attention particulière sera portée sur la qualité logicielle. Les données d’entraînement seront mises à disposition par l’encadrant pendant le premier semestre.

4) Simulateur 3D pour l’erosion de terrain

Ce projet consiste à combiner une simulation d’érosion de terrain avec un pipeline de rendu 3D interactif et haute performance.

Les etudiants devront:

À noter: le rendu ne doit pas se limiter au terrain final. La simulation et le rendu doivent être simultanes et interactifs, de manière à permettre un contrôle utilisateur (exploration, paramétrage des modèles, accélération/ralentissement du temps).

Une attention particuliere sera porter sur le genie logiciel de l’implementation.

Premier semestre:

Second semestre

5) Solveur Parallèle de l’Équation de la Chaleur 2D/3D

Intro

Un solveur parallèle de l’équation de la chaleur permet de simuler la diffusion thermique en 2D/3D. Il intègre les méthodes de discrétisation spatiale (maillages structurés ou non) et temporelle (schémas explicites/implicites) avec des optimisations HPC (parallélisme mémoire partagée/distribuée, vectorisation). Le solveur qui implémente un schéma numérique de maillages structurés ou non, des conditions aux limites physiques (Dirichlet, Neumann, Robin), et des propriétés matérielles hétérogènes, sera initialement validé sur des maillages cartésiens avant d’être étendu à des géométries complexes. L’implémentation sera au choix entre Rust ou C.

Termes

Condition limites physiques :

matérielles hétérogènes (conductivité termique)

Semestre 1

Semestre 2

6) RULESH: Portage Rust de la proxy-app LULESH

La proxy-app LULESH (Livermore Unstructured Lagrangian Explicit Shock Hydrodynamics) est developpée par le Lawrence Livermore National Laboratory (LLNL). LULESH illustre un code typique d’hydrodynamique, avec une discrétisation du domaine en éléments volumiques définis par un maillage. Basé sur un maillage hexahédrique non structuré, LULESH utilise des tableaux d’indirection pour définir les relations du maillage. Le cas test par défaut utilise un maillage cartésien régulier, mais uniquement pour une question de simplicité. Il est essentiel de conserver la gestion non structurée du maillage lors du portage en Rust, car elle est nécessaire pour simuler des géométries plus complexes.

Semestre 1

  1. Étude de l’implémentation de référence LULESH ;
  2. Implémentation séquentielle en Rust ;
  3. Validation des résultats ;
  4. Profilage de performance et identification des points chauds ;
  5. Mise en place d’optimisations séquentielles et comparaison avec l’implémentation de référence.

Semestre 2

  1. Parallélisation du code porté :
  2. Évalution de performance sur environnement parallèle et identification des points chauds ;
  3. Optimisations parallèles et comparaison avec l’implémentation de référence ;
  4. Conclusion générales sur le portage et l’utilisation du langage Rust dans un cadre HPC.

7) Modélisation et simulation distribuée du mouvement d’un banc de poissons

Un problème classique pour aborder la modélisation de systèmes complexes et le calcul parallèle est la simulation du comportement collectif dans la nature. L’étude du mouvement d’un banc de poissons constitue un excellent cas d’application : il s’agit d’un système multi- agents où chaque individu suit des règles locales simples (évitement des collisions, alignement, cohésion) qui produisent un comportement collectif émergent.

Le but est de concevoir et de mettre en œuvre un simulateur distribué reproduisant le mouvement d’un banc de poissons, en s’appuyant sur un modèle d’agents autonomes interagis- sant en temps réel. La simulation devra être codée en C++ ou en Python, et exploitera les principes de modélisation multi-agents et de parallélisation pour garantir de bonnes performances lorsque le nombre de poissons simulés devient important.

Premier semestre :

  1. Recherches et familiarisation avec les modèles de comportement collectif (règles de Reynolds, modèles de Boids, interactions locales, forces de cohésion et de répulsion, etc.)
  2. Implémentation d’un premier simulateur séquentiel simple (mise à jour du mouvement des agents selon les trois règles de base : séparation, alignement, cohésion)
  3. Visualisation 2D ou 3D du comportement du banc de poissons à l’aide d’une librairie graphique (OpenGL, Matplotlib, ou équivalent)
  4. Tests et validation qualitative du modèle (comportement collectif émergent cohérent)

Second semestre :

  1. Analyse des performances et identification des goulots d’étranglement dans la version séquentielle
  2. Exploration et implémentation d’approches de parallélisation (distribution des agents sur plusieurs threads ou nœuds, communication inter-processus avec MPI ou OpenMP, gestion des zones locales d’interaction)
  3. Mesures comparatives des performances entre la version séquentielle et la version pa- rallèle (scalabilité, temps de calcul, réactivité du système)
  4. Si possible, amélioration du réalisme de la simulation (ajout d’obstacles, de prédateurs, ou d’un environnement dynamique influençant le banc)

En résumé, l’objectif du premier semestre est de développer une version séquentielle fonctionnelle et visuellement cohérente du modèle, tandis que celui du second semestre est d’optimiser cette simulation par des approches de parallélisation et d’améliorer la fidélité du comportement collectif.