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.
- Langages et machines
- IA et apprentissage
- Concurrence et systèmes répartis
- Algorithmique et optimisation
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 processus | Ferme de rendu | Limite de concurrence, collecte hors ordre, panne d’un worker |
| Coordonner des demandes sur la même ressource | Réservations concurrentes | Transition atomique et expiration identifiée |
| Comprendre des copies qui divergent | Éditeur CRDT ; OT pour un parcours plus exigeant | Identité des éléments ou transformation des positions |
| Relier programme et exécution | Types ou backend CHIP-8 | Contraintes de types ou traduction vers des registres |
| Reprendre l’apprentissage d’AP5 | Autoencodeur ou image par coordonnées | Représentation apprise et comparaison contrôlée |
| Regarder à l’intérieur du calcul d’apprentissage | Micrograd ou transformer | Dérivées sur un graphe ou attention causale |
| Comparer les garanties d’algorithmes | Affectation de groupes | Stabilité 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.
| Sujet | Travail central | Point de départ fourni |
|---|---|---|
| Types du langage | Déduire le type d’un programme, jusqu’au polymorphisme | Parser, quatre carnets, projet Mix et diaporama |
| Compiler vers CHIP-8 | Calculer et dessiner, puis compiler les appels et la récursion terminale | Assembleur, 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.
| Sujet | Travail central | Point de départ fourni |
|---|---|---|
| Autoencodeur : reconstruire et réparer · prototype | Encoder une image, la reconstruire et comparer des dégradations | Petites images, apprentissage CPU, grilles et mesures ; VAE accompagné |
| Micrograd : calculer les gradients · prototype | Dé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 · prototype | Prédire la couleur depuis les coordonnées, comparer les encodages | Images originales, lots de pixels, entraînement et affichage |
| Petit transformer | Apprendre à copier une séquence avec de l’attention causale | Corpus, 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.
| Sujet | Travail central | Point de départ fourni |
|---|---|---|
| Ferme de rendu · prototype | Répartir les calculs et gérer leur achèvement ou leur panne | Calcul des pixels, découpage, affichage SVG et scénarios contrôlés |
| Réservations concurrentes · prototype | Réserver sans doublon, confirmer et expirer une réservation | Interface d’essai, structure de supervision et visualisation |
| Éditeur concurrent, CRDT | Réunir un texte écrit sur deux copies ; parcours guidé | Identifiants, parcours du texte, GenServers et interface |
| Éditeur concurrent, OT | Transformer 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.
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
| Sujet | Travail central | Point de départ fourni |
|---|---|---|
| Répartir une promotion : préférences et flots · prototype | Affectation stable, flot maximal, comparaison des objectifs | Vœ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.
