Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
382 changes: 191 additions & 191 deletions COURSE_CATALOG.generated.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion MyIA.AI.Notebooks/GameTheory/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
series: GameTheory
pedagogical_count: 25
breakdown: root=21, SocialChoice=4
maturity: PRODUCTION=14, BETA=9, ALPHA=2
maturity: PRODUCTION=22, ALPHA=2, BETA=1
-->

La théorie des jeux est le langage mathématique de la stratégie. Elle modélise les situations où des agents rationnels prennent des décisions dont le résultat dépend des choix des autres : enchères, négociations commerciales, élections, poker, guerre commerciale, allocation de ressources. Cette dualité entre coopération et compétition est omniprésente en économie, en sciences politiques et en informatique (mécanismes de vote, smart contracts, réseaux). Le prix Nobel d'économie a été décerné à des théoriciens des jeux à sept reprises entre 1994 et 2020 — c'est un domaine vivant et influent.
Expand Down
2 changes: 1 addition & 1 deletion MyIA.AI.Notebooks/GenAI/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
series: GenAI
pedagogical_count: 120
breakdown: Audio=30, SemanticKernel=20, Image=16, Video=16, Texte=11, 00-GenAI-Environment=6, PostTraining=6, FineTuning=5, Vibe-Coding=5, CaseStudies=4, root=1
maturity: PRODUCTION=75, BETA=35, ALPHA=4, DRAFT=3, TEMPLATE=3
maturity: PRODUCTION=79, BETA=31, ALPHA=4, DRAFT=3, TEMPLATE=3
-->

Ce parcours vous forme a la maitrise de l'IA generative dans toute sa diversite : generer des images, synthetiser la voix, composer de la musique, produire des videos, orchestrer des agents autonomes, et deployer des applications en production. Chaque modalite suit une progression en quatre niveaux, du premier pas avec une API jusqu'aux pipelines multi-modeles de production.
Expand Down
2 changes: 1 addition & 1 deletion MyIA.AI.Notebooks/ML/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
series: ML
pedagogical_count: 27
breakdown: DataScienceWithAgents=19, ML.Net=8
maturity: PRODUCTION=14, BETA=11, ALPHA=2
maturity: PRODUCTION=25, ALPHA=1, BETA=1
-->

Vous êtes développeur ou analyste et vous voulez construire des modèles prédictifs sans devenir data scientist théoricien ? Cette série vous forme au Machine Learning pratique avec deux stack complémentaires : **ML.NET** pour l'écosystème .NET/C# (8 notebooks, ~6h) et **Python Data Science with Agents** pour les pipelines modernes enrichis de LLMs (19 notebooks, ~17h). À la fin, vous saurez charger des données, entraîner un modèle, l'évaluer rigoureusement, et le déployer en production.
Expand Down
2 changes: 1 addition & 1 deletion MyIA.AI.Notebooks/QuantConnect/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
series: QuantConnect
pedagogical_count: 101
breakdown: Python=51, projects=48, ML-Training-Pipeline=2
maturity: PRODUCTION=68, ALPHA=22, BETA=9, DRAFT=1, TEMPLATE=1
maturity: PRODUCTION=64, ALPHA=27, BETA=8, DRAFT=1, TEMPLATE=1
-->

Le trading algorithmique transforme les marchés financiers : aujourd'hui, plus de 60% des volumes aux États-Unis sont générés par des algorithmes. Cette série vous apprend à construire, tester et déployer vos propres stratégies de trading automatisées sur la plateforme **QuantConnect LEAN** — un framework open-source utilisé par des milliers de quants professionnels. Le parcours va des fondements (lifecycle d'un algorithme, gestion des données) aux frontières de l'IA (Transformers, RL, LLMs pour signaux de trading).
Expand Down
2 changes: 1 addition & 1 deletion MyIA.AI.Notebooks/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Le catalogue rassemble près de 500 notebooks répartis sur les onze domaines ci
series: ALL
total: 504
breakdown: GenAI=120, QuantConnect=101, SymbolicAI=100, Search=45, Probas=43, Sudoku=32, ML=27, GameTheory=25, RL=6, CaseStudies=4, IIT=1
maturity: PRODUCTION=365, BETA=99, ALPHA=31, DRAFT=5, TEMPLATE=4
maturity: PRODUCTION=392, BETA=68, ALPHA=35, DRAFT=5, TEMPLATE=4
-->

Dernière mise à jour : 2026-05-28
Expand Down
2 changes: 1 addition & 1 deletion MyIA.AI.Notebooks/Search/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
series: Search
pedagogical_count: 45
breakdown: Applications=20, Part1-Foundations=11, Part2-CSP=9, root=5
maturity: PRODUCTION=39, BETA=5, DRAFT=1
maturity: PRODUCTION=42, BETA=2, DRAFT=1
-->

Tout problème d'IA, du plus simple jeu de plateau à la planification logistique industrielle, se réduit à un même défi : explorer un espace de solutions possibles pour trouver la meilleure. Cette série vous apprend à maîtriser cette exploration, depuis les algorithmes classiques (BFS, A*, Minimax) jusqu'aux techniques avancées (CSP, métaheuristiques, hybridation LLM). Le fil rouge est la **réduction de l'espace de recherche** : comment passer d'une exploration aveugle exponentielle à une résolution intelligemment guidée.
Expand Down
2 changes: 1 addition & 1 deletion MyIA.AI.Notebooks/Sudoku/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
series: Sudoku
pedagogical_count: 32
breakdown: root=32
maturity: PRODUCTION=22, BETA=10
maturity: PRODUCTION=27, BETA=5
-->

Cette serie de **32 notebooks** (16 C#, 16 Python) explore differentes techniques de resolution de Sudoku, des algorithmes classiques aux approches symboliques, probabilistes et neuronales. Les notebooks sont disponibles en **approche miroir C#/Python** pour permettre aux etudiants de choisir leur langage.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,13 @@
"name": "stdout",
"output_type": "stream",
"text": [
"--- Verification JVM Tweety + Outils ---\n",
"--- Verification JVM Tweety + Outils ---\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"JDK portable: zulu17.50.19-ca-jdk17.0.11-win_x64\n"
]
},
Expand All @@ -104,11 +110,12 @@
"\n",
"--- Outils disponibles ---\n",
" CLINGO: clingo\n",
" SPASS: SPASS.exe\n",
" EPROVER: eprover.exe\n",
" SAT_SOLVER_PYTHON: sat_solver.py\n",
" MARCO: marco.py\n",
"\n",
"JVM prete. Outils: 4/5\n"
"JVM prete. Outils: 5/5\n"
]
}
],
Expand Down Expand Up @@ -545,7 +552,13 @@
"JVM prete. Execution de l'exemple DeLP...\n",
"Imports DeLP, FOL et Commons necessaires reussis.\n",
"\n",
"Chargement du programme DeLP depuis: resources\\birds2.txt\n",
"Chargement du programme DeLP depuis: resources\\birds2.txt\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Programme charge avec succes depuis le fichier.\n",
"\n",
"Programme DeLP charge:\n",
Expand All @@ -567,7 +580,14 @@
"\n",
"Evaluation des requetes DeLP:\n",
"(YES=justifie, NO=refute, UNDECIDED=indetermine)\n",
" Querying 'Fly(tweety)'... Resultat: The answer is: NO\n",
" Querying 'Fly(tweety)'..."
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
" Resultat: The answer is: NO\n",
" Querying 'Fly(opus)'... Resultat: The answer is: YES\n",
" Querying 'Bird(tweety)'... Resultat: The answer is: YES\n",
" Querying 'Bird(opus)'... Resultat: The answer is: YES\n",
Expand Down Expand Up @@ -853,13 +873,7 @@
" - Query 'a' (ABA Preferred)? True\n",
"\n",
"\n",
"--- Exemple ABA avec Logique du Premier Ordre ---\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- Exemple ABA avec Logique du Premier Ordre ---\n",
"OK: Signature FOL pour ABA definie.\n",
"INFO: Utilisation de ';' comme separateur pour le parser ABA FOL.\n",
"Chargement ABA (FOL) depuis fichier: resources\\smp_fol.aba\n",
Expand All @@ -875,14 +889,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
" - Query 'Pair(a,d)' (ABA Preferred)? False"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
" - Query 'Pair(a,d)' (ABA Preferred)? False\n"
]
}
],
Expand Down Expand Up @@ -1362,15 +1369,21 @@
"\n",
"--- Programme ASP Simple ---\n",
"Programme 1:\n",
" {r :- -q, not b. p :- not r. b. -q :- b.}\n",
" {b. -q :- b. p :- not r. r :- -q, not b.}\n",
"\n",
"--- Programme ASP Suspects ---\n",
"Programme 2:\n",
" {motive(sally). guilty(harry). innocent(Suspect) :- motive(Suspect), not guilty(Suspect). motive(harry).}\n",
" {guilty(harry). innocent(Suspect) :- motive(Suspect), not guilty(Suspect). motive(harry). motive(sally).}\n",
"\n",
"Utilisation de Clingo trouve/configure a: D:\\CoursIA\\MyIA.AI.Notebooks\\SymbolicAI\\Tweety\\ext_tools\\clingo\n",
"Utilisation de Clingo trouve/configure a: D:\\dev\\CoursIA\\MyIA.AI.Notebooks\\SymbolicAI\\Tweety\\ext_tools\\clingo\n",
"\n",
"Calcul des Answer Sets pour Programme 2...\n",
"Calcul des Answer Sets pour Programme 2...\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Answer Sets trouves (1):\n",
" - AS 1: {guilty(harry), innocent(sally), motive(harry), motive(sally)}\n",
"\n",
Expand Down Expand Up @@ -1695,14 +1708,14 @@
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"output_type": "stream",
"text": [
"Exercice a completer : argumentation structuree avec DeLP pour recommandation de films\n"
"Exercice : DeLP pour recommandation de films a completer\n"
]
}
],
"source": "print(\"Exercice a completer : argumentation structuree avec DeLP pour recommandation de films\")\n\n# Exercice: Choisissez un framework (ASPIC+, DeLP, ou ABA)\n# Exemple avec DeLP (le plus intuitif pour les recommandations)\n# TODO etudiant : instancier le raisonneur DeLP et analyser les arguments\n\nfrom org.tweetyproject.arg.delp.syntax import *\n\n# Exercice: Definissez une base de connaissances de films\n# Exemple: regles pour recommander des films selon les genres\nfilms_kb = \"\"\"\n% Regles strictes (faits)\nfilm(inception) <- true.\nfilm(titanic) <- true.\nfilm(matrix) <- true.\n\n% Regles defeasibles (peuvent etre contredites)\n<- genre(inception, sci_fi).\n<- genre(titanic, romance).\n<- genre(matrix, sci_fi).\n\n% Preferences utilisateur (a adapter)\n<- prefere(scifi) | utilisateur_geek.\n<- prefere(romance) | utilisateur_sentimental.\n\n% Regles de recommandation\n<- recommander(F) <- film(F), genre(F, G), prefere(G).\n\"\"\"\n\n# Exercice: Instanciez le raisonneur DeLP\n# reasoner = DelpReasoner()\n\n# Exercice: Posez une query\n# result = reasoner.query(\"recommander(X)\")\n\n# Exercice: Analysez les arguments pour/contre\n# Quels films sont recommandes ? Pourquoi ?\n\n# Exercice: Ajoutez des contre-arguments\n# Exemple: \"inception est trop complexe pour certains\""
"source": "# Exercice: Choisissez un framework (ASPIC+, DeLP, ou ABA)\n# Exemple avec DeLP (le plus intuitif pour les recommandations)\n\nfrom org.tweetyproject.arg.delp.syntax import *\n\n# Exercice: Definissez une base de connaissances de films\n# Exemple: regles pour recommander des films selon les genres\nfilms_kb = \"\"\"\n% Regles strictes (faits)\nfilm(inception) <- true.\nfilm(titanic) <- true.\nfilm(matrix) <- true.\n\n% Regles defeasibles (peuvent etre contredites)\n<- genre(inception, sci_fi).\n<- genre(titanic, romance).\n<- genre(matrix, sci_fi).\n\n% Preferences utilisateur (a adapter)\n<- prefere(scifi) | utilisateur_geek.\n<- prefere(romance) | utilisateur_sentimental.\n\n% Regles de recommandation\n<- recommander(F) <- film(F), genre(F, G), prefere(G).\n\"\"\"\n\n# Exercice: Instanciez le raisonneur DeLP\n# reasoner = DelpReasoner()\n\n# Exercice: Posez une query\n# result = reasoner.query(\"recommander(X)\")\n\n# Exercice: Analysez les arguments pour/contre\n# Quels films sont recommandes ? Pourquoi ?\n\n# Exercice: Ajoutez des contre-arguments\n# Exemple: \"inception est trop complexe pour certains\"\n\nprint(\"Exercice : DeLP pour recommandation de films a completer\")"
},
{
"cell_type": "markdown",
Expand Down
41 changes: 35 additions & 6 deletions MyIA.AI.Notebooks/SymbolicAI/Tweety/Tweety-9-Preferences.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,20 @@
"name": "stdout",
"output_type": "stream",
"text": [
"--- Verification JVM Tweety + Outils ---\n",
"JDK portable: zulu17.50.19-ca-jdk17.0.11-win_x64\n",
"--- Verification JVM Tweety + Outils ---\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"JDK portable: zulu17.50.19-ca-jdk17.0.11-win_x64\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"JVM demarree avec 42 JARs.\n",
"\n",
"--- Outils disponibles ---\n",
Expand Down Expand Up @@ -1220,10 +1232,27 @@
},
"tags": []
},
"outputs": [],
"source": [
"# Exemple guide : Solution completecandidats = ['Paris', 'Berlin', 'Rome', 'Madrid']# 1. Definition des profils de preference (5 votants)profils = [ ['Paris', 'Berlin', 'Rome', 'Madrid'], # Votant 1 ['Berlin', 'Paris', 'Madrid', 'Rome'], # Votant 2 ['Rome', 'Madrid', 'Paris', 'Berlin'], # Votant 3 ['Madrid', 'Rome', 'Berlin', 'Paris'], # Votant 4 ['Berlin', 'Rome', 'Paris', 'Madrid'], # Votant 5]def calculate_all_rules(prefs, candidates): borda = {c: 0 for c in candidates} n = len(candidates) for p in prefs: for rank, c in enumerate(p): borda[c] += (n - 1 - rank) plurality = {c: 0 for c in candidates} for p in prefs: plurality[p[0]] += 1 condorcet_winner = None for c1 in candidates: is_condorcet = True for c2 in candidates: if c1 == c2: continue wins = sum(1 for p in prefs if p.index(c1) < p.index(c2)) if wins <= len(prefs) / 2: is_condorcet = False break if is_condorcet: condorcet_winner = c1 break return borda, plurality, condorcet_winnerprint(\"--- Resultats de l'exercice de synthese ---\")b, p, c = calculate_all_rules(profils, candidats)b_win = max(b, key=b.get)p_win = max(p, key=p.get)print(f\"Vainqueur Borda: {b_win} (scores: {dict(sorted(b.items(), key=lambda x: -x[1]))})\")print(f\"Vainqueur Pluralite: {p_win} ({p[p_win]} votes)\")print(f\"Vainqueur Condorcet: {c if c else 'Aucun'}\")print(f\"\\nConsensus (Borda == Pluralite == Condorcet): {b_win == p_win == c}\")# 2. Manipulation strategiqueprint(\"\\n--- Manipulation Strategique (Votant 3) ---\")profils_manip = profils.copy()print(f\"Votant 3 change son vote de {profils[2]} a ['Paris', 'Rome', 'Madrid', 'Berlin']\")profils_manip[2] = ['Paris', 'Rome', 'Madrid', 'Berlin']b2, p2, c2 = calculate_all_rules(profils_manip, candidats)print(f\"Nouveau vainqueur Borda: {max(b2, key=b2.get)} (score augmente)\")print(f\"Nouveau vainqueur Pluralite: {max(p2, key=p2.get)} (tie avec Berlin)\")print(\"Note: Dans ce profil, la manipulation renforce le gagnant initial Borda.\")"
]
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"--- Resultats de l'exercice de synthese ---\n",
"Vainqueur Borda: Berlin (scores: {'Berlin': 9, 'Rome': 8, 'Paris': 7, 'Madrid': 6})\n",
"Vainqueur Pluralite: Berlin (2 votes)\n",
"Vainqueur Condorcet: Berlin\n",
"\n",
"Consensus (Borda == Pluralite == Condorcet): True\n",
"\n",
"--- Manipulation Strategique (Votant 3) ---\n",
"Votant 3 change son vote de ['Rome', 'Madrid', 'Paris', 'Berlin'] a ['Paris', 'Rome', 'Madrid', 'Berlin']\n",
"Nouveau vainqueur Borda: Paris (score augmente)\n",
"Nouveau vainqueur Pluralite: Paris (tie avec Berlin)\n",
"Note: Dans ce profil, la manipulation renforce le gagnant initial Borda.\n"
]
}
],
"source": "# Exemple guide : Solution complete\ncandidats = ['Paris', 'Berlin', 'Rome', 'Madrid']\n\n# 1. Definition des profils de preference (5 votants)\nprofils = [\n ['Paris', 'Berlin', 'Rome', 'Madrid'], # Votant 1\n ['Berlin', 'Paris', 'Madrid', 'Rome'], # Votant 2\n ['Rome', 'Madrid', 'Paris', 'Berlin'], # Votant 3\n ['Madrid', 'Rome', 'Berlin', 'Paris'], # Votant 4\n ['Berlin', 'Rome', 'Paris', 'Madrid'], # Votant 5\n]\n\n\ndef calculate_all_rules(prefs, candidates):\n borda = {c: 0 for c in candidates}\n n = len(candidates)\n for p in prefs:\n for rank, c in enumerate(p):\n borda[c] += (n - 1 - rank)\n\n plurality = {c: 0 for c in candidates}\n for p in prefs:\n plurality[p[0]] += 1\n\n condorcet_winner = None\n for c1 in candidates:\n is_condorcet = True\n for c2 in candidates:\n if c1 == c2:\n continue\n wins = sum(1 for p in prefs if p.index(c1) < p.index(c2))\n if wins <= len(prefs) / 2:\n is_condorcet = False\n break\n if is_condorcet:\n condorcet_winner = c1\n break\n\n return borda, plurality, condorcet_winner\n\n\nprint(\"--- Resultats de l'exercice de synthese ---\")\nb, p, c = calculate_all_rules(profils, candidats)\nb_win = max(b, key=b.get)\np_win = max(p, key=p.get)\nprint(f\"Vainqueur Borda: {b_win} (scores: {dict(sorted(b.items(), key=lambda x: -x[1]))})\")\nprint(f\"Vainqueur Pluralite: {p_win} ({p[p_win]} votes)\")\nprint(f\"Vainqueur Condorcet: {c if c else 'Aucun'}\")\nprint(f\"\\nConsensus (Borda == Pluralite == Condorcet): {b_win == p_win == c}\")\n\n# 2. Manipulation strategique\nprint(\"\\n--- Manipulation Strategique (Votant 3) ---\")\nprofils_manip = profils.copy()\nprint(f\"Votant 3 change son vote de {profils[2]} a ['Paris', 'Rome', 'Madrid', 'Berlin']\")\nprofils_manip[2] = ['Paris', 'Rome', 'Madrid', 'Berlin']\nb2, p2, c2 = calculate_all_rules(profils_manip, candidats)\nprint(f\"Nouveau vainqueur Borda: {max(b2, key=b2.get)} (score augmente)\")\nprint(f\"Nouveau vainqueur Pluralite: {max(p2, key=p2.get)} (tie avec Berlin)\")\nprint(\"Note: Dans ce profil, la manipulation renforce le gagnant initial Borda.\")"
},
{
"cell_type": "markdown",
Expand Down
Loading