Optimiser
Niveau 1 : Appréhender et construire des algorithmes
S1
14.64
#12/105
S2
15.34
#2/102
Proposer des applications informatiques optimisées en fonction de critères spécifiques : temps d'exécution, précision, consommation de ressources.
Apprentissages critiques
- AC12.01Analyser un problème avec méthode (décomposition en éléments algorithmiques simples, structures de données)
- AC12.02Comparer des algorithmes pour des problèmes classiques (tris, recherche)
- AC12.03Formaliser et mettre en œuvre des outils mathématiques pour l'informatique
Ressources mobilisées
R1.01
Initiation au développement
Travaux réalisés
Initiation à la programmation en Java à travers l'étude des structures de données, des algorithmes de tri et de la récursivité. Découverte des tests unitaires et de leur rôle dans la validation du comportement des programmes. Introduction aux principes de la programmation orientée objet : classes, objets, encapsulation et héritage. Mise en pratique sur des exercices progressifs allant des premières méthodes jusqu'à la conception de hiérarchies de classes simples.
R1.03
Architecture des ordinateurs
Travaux réalisés
Découverte des bases de l'architecture des ordinateurs : représentation binaire, codage de l'information, types de mémoires, fonctionnement du processeur et exécution d'instructions machines, jusqu'à l'étude des périphériques et des bus. Approfondissement du cycle d'exécution des instructions et des différents modes d'adressage mémoire. Étude des hiérarchies de cache et de leur impact sur les performances. Compréhension du rôle des interfaces entre les composants matériels et logiciels d'un système informatique.
R1.06
Mathématiques discrètes
Travaux réalisés
Étude des mathématiques discrètes essentielles à l'informatique : divisibilité, congruences, théorie des ensembles, logique propositionnelle et des prédicats. Approfondissement des techniques de raisonnement formel et de démonstration mathématique appliquées à l'informatique. Exploration des structures combinatoires et de leur rôle dans la conception d'algorithmes. Travail sur la formalisation des problèmes informatiques à travers des outils mathématiques rigoureux.
R1.07
Outils mathématiques fondamentaux
Travaux réalisés
Étude des matrices et du calcul matriciel, incluant les opérations fondamentales et leurs applications. Travail sur la résolution de systèmes linéaires par différentes méthodes algébriques. Analyse des espaces vectoriels ainsi que des applications linéaires et de leur représentation matricielle. Approfondissement des notions liées aux suites réelles et à la dérivation d'applications réelles dans un cadre d'analyse mathématique.
AL1.01
IA 1
Travaux réalisés
Exploration des algorithmes d'apprentissage automatique appliqués à la théorie des jeux combinatoires. Implémentation d'un agent intelligent capable d'apprendre à jouer au jeu de Grundy en s'améliorant au fil des parties grâce au renforcement. Étude des fondements mathématiques du jeu (valeurs de Grundy, stratégies gagnantes) et de leur formalisation algorithmique. Travail réalisé sous forme de Notebook Jupyter interactif combinant code, visualisations et analyse des résultats.
R2.01
Développement orienté objets
Travaux réalisés
Approfondissement de la programmation orientée objet en Java à travers des projets de complexité croissante. Conception d'un serveur d'alerte multi-composants en appliquant les principes SOLID et les patterns de conception. Étude et mise en pratique des génériques Java pour écrire des structures de données et des algorithmes réutilisables et type-safe. Maîtrise des mécanismes avancés de l'héritage, du polymorphisme et des interfaces dans un contexte applicatif réel.
R2.04
Communication et fonctionnement bas niveau
Travaux réalisés
Étude des bases des réseaux informatiques (débits, topologies, modèle OSI), l'adressage IP et les principaux protocoles de communication. Approfondissement des mécanismes de routage et de commutation dans les architectures réseau modernes. Étude du fonctionnement bas niveau des ordinateurs à travers la simulation de processeur et la programmation en assembleur. Compréhension des liens entre le niveau matériel et les couches logicielles via l'étude du cycle d'instruction et de la gestion des interruptions.
R2.07
Graphes
Travaux réalisés
Modélisation et résolution de problèmes à l'aide de graphes en appliquant divers algorithmes de parcours (BFS, DFS), de plus courts chemins (Dijkstra, Floyd-Warshall), et d'arbres couvrants (Kruskal, Prim). Étude de la coloration de graphes, l'ordonnancement de tâches, ainsi que des notions avancées comme les ensembles dominants et la centralité des sommets.
R2.09
Méthodes numériques
Travaux réalisés
Étude de la modélisation de suites pour résoudre des problèmes numériques, les méthodes d'approximation (dichotomie, Newton), l'analyse de la convergence et la complexité algorithmique. Travail sur la représentation des réels en machine et l'optimisation à l'aide de dérivées.
AL2.01
IA 2 et Cyber 2
Travaux réalisés
Découverte des enjeux de la sécurité des systèmes d'information : identification des menaces, analyse des vulnérabilités et mise en place de contre-mesures. Approfondissement de la cybersécurité appliquée à travers des exercices pratiques sur des environnements contrôlés. Introduction aux modèles d'intelligence artificielle générative et à leurs applications dans le domaine informatique. Réflexion sur les implications éthiques et professionnelles de l'IA et de la sécurité dans les métiers du numérique.
Situations d'Apprentissage et d'Évaluation (SAE)
Comparaison d'approches algorithmiques
Étude et implémentation du jeu de Grundy : comparaison d'algorithmes récursifs naïfs et optimisés, production de données mesurables (graphiques, tableaux comparatifs).
13.10
Analyse réflexive
Quelles ont été mes démarches, prises de décisions, degré d'implication et d'autonomie ?
Dès le début de la SAÉ, nous avons repris nos travaux de S2.01 qui portait déjà sur un jeu similaire, avec l'objectif de bien comprendre le fonctionnement du jeu. Avec mon binôme, nous avons convenu d'une méthode de travail efficace : lecture partagée du sujet, schématisation des cas possibles, puis implémentation progressive des versions d'algorithmes. Nous réalisions une version sur 2 en alternance et rédigions un document à ce sujet dans l'autre temps.
Je me suis personnellement impliqué dans l'écriture des fonctions récursives et dans la mise en place des tests de performance (temps d'exécution, appels récursifs). Mon autonomie a été renforcée au fil des itérations : je me suis appuyé sur des essais/erreurs pour ajuster les fonctions et optimiser le code en suivant l'énoncé.
Quelles ressources ai-je choisies et combinées pour réaliser mes tâches et résoudre les problèmes rencontrés dans cette SAÉ ?
J'ai mobilisé plusieurs ressources essentielles :
R1.01 (Initiation au développement) : pour la syntaxe Java, les fonctions récursives, la gestion des structures (listes, dictionnaires).
R1.06 (Mathématiques discrètes) : pour la compréhension des structures combinatoires et des raisonnements logiques liés aux positions gagnantes ou perdantes.
R1.07 (Outils mathématiques fondamentaux) : pour l'analyse des suites, parités, et raisonnements par récurrence.
J'ai également utilisé des ressources externes : documentation, forums (Stack Overflow) pour optimiser les appels récursifs, et des vidéos explicatives. Ce croisement de ressources m'a permis d'approfondir mes idées et d'obtenir un code fonctionnel et performant.
Justifiez la maîtrise des apprentissages visés, ainsi que la prise en compte des composantes essentielles pour le développement de vos compétences.
Les apprentissages visés par cette SAÉ ont été pleinement mobilisés :
AC 1 - En maîtrisant la récursivité et l'optimisation, j'ai montré que je savais transformer une solution naïve en une version plus efficace.
AC2 - La comparaison d'approches algorithmiques a été rigoureuse : j'ai produit des données mesurables (graphiques, tableaux), les ai interprétées, et justifié les améliorations d'une version à l'autre.
AC3 - J'ai su analyser le problème de manière mathématique pour en déduire des structures plus efficaces et comprendre la logique sous-jacente du jeu.
Cette SAÉ a contribué au développement de ma capacité à raisonner sur la complexité, à faire des choix algorithmiques pertinents, et à valider mes hypothèses par l'expérimentation.
Quelles ressources me manquent pour atteindre la compétence abordée par cette SAÉ ? Si c'était à refaire qu'est-ce que je changerais ?
Je ressens encore un manque de maîtrise approfondie de l'analyse de complexité algorithmique (notation O), ce qui limite ma capacité à formaliser rigoureusement les performances des solutions proposées. De plus, certaines compétences en développement me font encore défaut, notamment parce que la mise en œuvre de la récursivité optimisée s'est révélée relativement complexe pour un début de formation.
Si c'était à refaire, je prendrais davantage de temps pour effectuer une modélisation mathématique plus approfondie en amont, afin de mieux anticiper les axes d'optimisation possibles mais surtout de mieux les comprendre. Je veillerais également à élaborer un document de synthèse plus structuré et détaillé, intégrant davantage d'explications, d'analyses et de justifications que celui que nous avons produit.
Exploration algorithmique d'un problème
Projet SECOURS 2030 : affectation optimale de secouristes, modélisation en graphe biparti, algorithme glouton et comparaison d'approches pour un problème NP-difficile.
16.00
L'analyse réflexive complète est disponible sur la page projet dédiée.
Voir le projet →Démarche Portfolio
Conception et rendu du portfolio de compétences S2.
15.00
Bilan de compétence
Les mathématiques discrètes ont fourni le vocabulaire formel pour raisonner sur des problèmes combinatoires, et l'introduction à l'IA a ouvert la porte à l'optimisation heuristique. En SAE 1.02, ces bases ont été appliquées : comparer des approches récursives naïves et optimisées sur un problème, produire des mesures de performance. L'étude des graphes a apporté les outils théoriques qui ont rendu la SAE 2.02 possible : modéliser l'affectation de SECOURS 2030 en graphe biparti, implémenter et comparer trois approches (exhaustive, gloutonne, DAG), puis se confronter au fait que le problème est NP-difficile. Les méthodes numériques (dichotomie, convergence) sont bien ancrées et restent des outils que je mobilise spontanément. Les apprentissages critiques pour le niveau 1 de la compétence sont pleinement acquis.