AP9 lance un projet noté, commencé en semi-autonomie pendant la séance de janvier puis terminé à la maison. Vous choisissez un sujet, avec ses étapes et ses vérifications. Vous n’avez pas à cumuler les projets ni les variantes. Nous démarrerons ensemble en cours : cette étape accompagnée permet d’aborder des notions nouvelles avec un code de départ qui prend en charge l’infrastructure. Le barème, le temps de travail attendu et l’échéance seront annoncés avant le lancement.

Les onze sujets sont regroupés en quatre thèmes. Chacun dispose d’un squelette Mix à télécharger et d’un README pour démarrer, repérer les fonctions à écrire et vérifier ses étapes. Les parcours marqués « prototype » restent à calibrer avant janvier, notamment les deux nouveaux projets de processus. Leurs prolongements permettent d’ajuster l’ambition après un premier essai. Les paliers de chaque README (bronze, argent, or, ou simplement numérotés) décrivent l’ordre des idées ; ils ne constituent pas un barème. Les interfaces et les tracés sont fournis : aucun HTML, CSS ou JavaScript n’est à écrire.

Choisir ce que vous souhaitez comprendre

Choisissez une question dont vous pouvez déjà décrire un petit exemple. Les notions de la troisième colonne sont introduites dans le sujet ; vous n’avez pas à les connaître avant AP9.

Vous souhaitez…Point de départ conseilléNotion nouvelle à explorer
Faire travailler plusieurs processusFerme de renduLimite de concurrence, collecte hors ordre, panne d’un worker
Coordonner des demandes sur la même ressourceRéservations concurrentesTransition atomique et expiration identifiée
Comprendre des copies qui divergentÉditeur CRDT ; OT pour un parcours plus exigeantIdentité des éléments ou transformation des positions
Relier programme et exécutionTypes ou backend CHIP-8Contraintes de types ou traduction vers des registres
Reprendre l’apprentissage d’AP5Autoencodeur ou image par coordonnéesReprésentation apprise et comparaison contrôlée
Regarder à l’intérieur du calcul d’apprentissageMicrograd ou transformerDérivées sur un graphe ou attention causale
Comparer les garanties d’algorithmesAffectation de groupesStabilité et réseau de flot

Avant de vous décider, faites fonctionner le premier essai fourni et lisez le contrat de la première fonction à écrire. Attention, un sujet avec peu de fonctions peut demander beaucoup de raisonnement : l’éditeur CRDT tient en trois fonctions pures, mais ses garanties se justifient. Les prolongements servent à poursuivre un socle compris ; leur accumulation n’est pas l’objectif du projet.

Langages et machines

Ces sujets prolongent les représentations de programmes et la machine d’AP2–AP3.

SujetTravail centralPoint de départ fourni
Types du langageDéduire le type d’un programme, jusqu’au polymorphismeParser, quatre carnets, projet Mix et diaporama
Compiler vers CHIP-8Calculer et dessiner, puis compiler les appels et la récursion terminaleAssembleur, mémoire, sprites ; jeu Sokoban AP complet pour le palier avancé

Le typeur raisonne avant l’exécution : il déduit le type de chaque expression à partir de règles, sans calculer de valeur. Le backend produit des instructions pour une petite console existante : vous décidez notamment où conserver les valeurs intermédiaires pendant un calcul imbriqué. Le socle affiche un niveau ; le palier avancé compile un jeu Sokoban complet fourni. Vous y ajoutez les appels et l’auto-appel terminal, sans écrire le moteur du jeu. L’émulateur Elixir est conservé comme ressource de réserve. Le backend utilise une machine existante et reste indépendant du travail des autres groupes.

IA et apprentissage

Ces sujets prolongent les calculs et les expériences d’AP4–AP5. Micrograd fait également le lien avec les graphes et les états explicites d’AP2–AP3.

SujetTravail centralPoint de départ fourni
Autoencodeur : reconstruire et réparer · prototypeEncoder une image, la reconstruire et comparer des dégradationsPetites images, apprentissage CPU, grilles et mesures ; VAE accompagné
Micrograd : calculer les gradients · prototypeDérivées locales et accumulation sur un graphe partagéGraphe, parcours, réseau XOR, différences finies et dessin
Une image cachée dans un réseau · prototypePrédire la couleur depuis les coordonnées, comparer les encodagesImages originales, lots de pixels, entraînement et affichage
Petit transformerApprendre à copier une séquence avec de l’attention causaleCorpus, bigramme, modèle, entraînement et tracés sur CPU

L’autoencodeur est un réseau entraîné à reproduire son entrée après l’avoir comprimée en quelques nombres ; le débruitage lui demande de retrouver une image propre depuis une entrée altérée. Le VAE prolonge ce sujet en tirant ce code au hasard autour d’une moyenne apprise, ce qui ouvre une expérience de génération : vous choisissez ce prolongement après le socle.

Micrograd vous fait écrire le moteur qui calcule les dérivées d’un calcul en suivant son graphe, c-à-d. ce que grad faisait pour nous en AP5. L’image par coordonnées vous fait étudier ce qu’un réseau sait représenter : son entrée est une position, sa sortie une couleur. Le transformer étudie au contraire l’effet du contexte sur la prédiction d’un symbole, grâce à un calcul appelé attention.

Dans chaque cas, conservez une comparaison et ses limites. Reconstruire une image n’est pas mesurer une capacité à traiter toutes les images ; apprendre les quatre points XOR n’est pas mesurer une généralisation. Le corpus de copie du transformer ne promet pas du français convaincant. Les petites expériences servent à comprendre une propriété et à expliquer vos observations.

Concurrence et systèmes répartis

Quatre sujets prolongent AP6–AP8, avec des objectifs différents. Dans les deux premiers, vous écrivez la coordination des processus. Dans les éditeurs, les processus sont fournis : vous étudiez surtout les algorithmes qui permettent aux copies de retrouver un accord.

SujetTravail centralPoint de départ fourni
Ferme de rendu · prototypeRépartir les calculs et gérer leur achèvement ou leur panneCalcul des pixels, découpage, affichage SVG et scénarios contrôlés
Réservations concurrentes · prototypeRéserver sans doublon, confirmer et expirer une réservationInterface d’essai, structure de supervision et visualisation
Éditeur concurrent, CRDTRéunir un texte écrit sur deux copies ; parcours guidéIdentifiants, parcours du texte, GenServers et interface
Éditeur concurrent, OTTransformer les éditions concurrentes ; parcours avancéTrois clients, serveur, révisions, buffer et interface

Dans la ferme, plusieurs workers calculent réellement des morceaux d’image. Le coordinateur conserve les tâches à faire et les résultats reçus ; il ne calcule pas les pixels. La concurrence borne les travaux en cours, mais le gain de vitesse se mesure : davantage de processus ne garantit pas un calcul plus rapide.

Dans les réservations, un processus possède l’état d’une séance. Deux clients peuvent demander la même place ; une seule transition doit l’attribuer. Un ancien message d’expiration ne doit pas annuler une nouvelle réservation. La supervision relance un processus, mais ne restaure pas sa mémoire volatile.

Un CRDT (conflict-free replicated data type) est une structure dont les copies se fusionnent dans n’importe quel ordre et finissent par coïncider, comme le G-Counter d’AP8 ; ici, il conserve une identité pour chaque caractère et une suppression laisse une marque. L’OT (operational transformation) utilise au contraire des positions : une édition doit être transformée lorsque d’autres éditions ont déplacé ses indices.

Le CRDT conserve des identités ; l'OT adapte deux éditions concurrentes pour rejoindre le même texte.

Les interfaces permettent de retarder les échanges, puis de les reprendre. Vous expliquez des scénarios de convergence et les hypothèses nécessaires. La différence de difficulté entre les éditeurs vient du travail laissé à réaliser ; il n’est pas nécessaire de construire les deux. La convergence d’un texte et l’attribution exclusive d’une place sont deux garanties distinctes.

Algorithmique et optimisation

SujetTravail centralPoint de départ fourni
Répartir une promotion : préférences et flots · prototypeAffectation stable, flot maximal, comparaison des objectifsVœux fictifs, capacités, graphe, traces et SVG ; coût minimal guidé

Vous partez des vœux des élèves et des priorités de chaque groupe. Les admissions provisoires introduisent les mariages stables : une affectation est stable quand aucun élève et aucun groupe ne préféreraient tous deux être ensemble plutôt qu’à leur place actuelle. Un réseau de flot, où chaque unité qui circule représente une affectation, permet ensuite de demander si tous les élèves peuvent obtenir l’un de leurs premiers choix, quitte à revenir sur des affectations déjà faites.

Le coût minimal est un prolongement accompagné. Une affectation stable peut avoir un coût total supérieur à une affectation instable : le sujet demande de comprendre ce que chaque algorithme garantit. Les exemples sont fictifs ; aucune donnée de votre promotion n’est nécessaire.

Travailler en autonomie

Ouvrez la fiche du sujet, puis le README de son squelette. Faites fonctionner l’essai fourni avant de remplir les trous. Les commandes distinguent les tests du code fourni des tests qui attendent votre implémentation. Un échec « à compléter » est attendu ; une erreur d’installation se traite séparément.

Gardez une trace que vous pouvez expliquer, un contre-exemple et vos tests personnels. Votre compte rendu précise le lancement, ce qui fonctionne, les choix faits et les limites restantes. En fin de séance, notez le prochain point de passage pour la poursuite à la maison.

Télécharger les squelettes, regroupés par thème.

Un cadeau pour les curieux

Chaque sujet est accompagné d’un petit fascicule d’approfondissement : une douzaine de pages qui racontent les idées derrière le projet, leur histoire, ce qu’elles deviennent dans les systèmes réels et ce que vous pouvez lire ensuite. C’est un cadeau de fin de cours, à lire par plaisir une fois le projet lancé ou rendu ; rien n’y est à rendre et aucune solution ne s’y cache. Vous le trouverez en bas de la fiche de chaque sujet et dans le catalogue de la page AP9.

Quand un bout de syntaxe Elixir vous manque en cours de route, le poly la reprend, avec un aide-mémoire en fin de volume ; il se consulte au besoin, il n’est pas un prérequis des sujets.

Pour toute question, vous pouvez me contacter par email : aurelien.noce@minesparis.psl.eu.