Skip to content
Closed
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
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,14 @@
"print(f\"Rondes: {league.rounds}\")"
]
},
{
"cell_type": "markdown",
"id": "5aefbe52-276b-41ac-b7f6-a37ff58459f0",
"metadata": {},
"source": [
"La ligue a été créée avec succès : 6 équipes de football (Paris FC, Marseille FC, Lyon FC, Lille FC, Bordeaux FC, Nantes FC) réparties sur 5 rondes de compétition. "
]
},
{
"cell_type": "markdown",
"id": "6a9d2e83",
Expand Down Expand Up @@ -426,6 +434,14 @@
"display(df_distances)"
]
},
{
"cell_type": "markdown",
"id": "de5f5fc5-55f4-4924-90c6-4dfcd536c329",
"metadata": {},
"source": [
"La matrice des distances entre les villes a été calculée : Paris est à 660 km de Marseille, 391 km de Lyon, et 203 km de Lille. Ces distances guideront l'optimisation du calendrier pour limiter les déplacements. "
]
},
{
"cell_type": "markdown",
"id": "7d53deab",
Expand Down Expand Up @@ -645,6 +661,14 @@
" schedule = {}\n"
]
},
{
"cell_type": "markdown",
"id": "3b9ec11a-f753-4206-9b54-f6f39034d86b",
"metadata": {},
"source": [
"Le solveur CP-SAT a trouvé une solution optimale avec un objectif de 7390 km de déplacements cumulés, démontrant l'efficacité de la programmation par contraintes pour ce problème de planification sportive. "
]
},
{
"cell_type": "markdown",
"id": "ca40ae3e",
Expand Down Expand Up @@ -895,6 +919,14 @@
" f\"({stats['home_games'][i]} D, {stats['away_games'][i]} E)\")"
]
},
{
"cell_type": "markdown",
"id": "c107028f-48c4-4766-84fa-4859d2408d2e",
"metadata": {},
"source": [
"Le calendrier généré montre 5 rondes avec 3 matchs par ronde, chaque équipe affrontant toutes les autres exactement une fois, respectant la structure classique d'un championnat round-robin. "
]
},
{
"cell_type": "markdown",
"id": "fa50afdf",
Expand Down
136 changes: 136 additions & 0 deletions MyIA.AI.Notebooks/Search/Part1-Foundations/Search-02b-NetworkX.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,14 @@
"plt.rcParams['axes.labelsize'] = 10\n"
]
},
{
"cell_type": "markdown",
"id": "07551dfa",
"metadata": {},
"source": [
"L'environnement est prêt pour l'analyse de réseaux : NetworkX 3.6.1 et Matplotlib 3.10.9 sont chargés. Toutes les structures de graphes, algorithmes et visualisations utilisés dans la suite s'appuient sur ces deux bibliothèques."
]
},
{
"cell_type": "markdown",
"id": "e8b0d793",
Expand Down Expand Up @@ -198,6 +206,14 @@
"print(f\"Attribut arête Paris-Lyon : {G.edges['Paris', 'Lyon']}\")\n"
]
},
{
"cell_type": "markdown",
"id": "5ebfb9ae",
"metadata": {},
"source": [
"Le graphe illustratif est construit : 6 nœuds et 7 arêtes, et il est connexe. Les attributs sont riches : Paris porte `population: 2161000` et `region: IDF`, et l'arête Paris-Lyon un `weight` de 465. C'est ce poids en kilomètres qui servira de métrique aux algorithmes de plus court chemin de la section suivante."
]
},
{
"cell_type": "markdown",
"id": "4951f7d2",
Expand Down Expand Up @@ -269,6 +285,14 @@
"print(f\"\\nSous-graphe autour de Paris : {sous_graphe.number_of_nodes()} nœuds, {sous_graphe.number_of_edges()} arêtes\")\n"
]
},
{
"cell_type": "markdown",
"id": "19a1e2e8",
"metadata": {},
"source": [
"L'analyse structurelle donne : degré de Paris = 3, degré moyen = 2.33, densité = 0.467 et diamètre = 3 — toute paire de villes est reliée en au plus 3 trajets. Les voisins de Paris sont Lyon, Lille et Bordeaux ; le sous-graphe induit autour de Paris compte 4 nœuds et 3 arêtes."
]
},
{
"cell_type": "markdown",
"id": "d6995d93",
Expand Down Expand Up @@ -350,6 +374,14 @@
"plt.show()\n"
]
},
{
"cell_type": "markdown",
"id": "992d63e3",
"metadata": {},
"source": [
"Les trois layouts (spring, circular, kamada_kawai) produisent des dispositions distinctes du même graphe : spring tend à écarter les nœuds non adjacents, circular place les villes sur un cercle et kamada_kawai minimise les longueurs d'arêtes. Le choix du layout influence la lecture visuelle, jamais la structure du graphe."
]
},
{
"cell_type": "markdown",
"id": "2579dbbe",
Expand Down Expand Up @@ -433,6 +465,14 @@
"plt.show()\n"
]
},
{
"cell_type": "markdown",
"id": "215b6b0c",
"metadata": {},
"source": [
"La visualisation code la région en couleur et la population en taille de nœud : Paris (2 161 000 habitants, IDF) domine visuellement, ce qui illustre comment NetworkX expose les attributs de nœuds directement dans le rendu."
]
},
{
"cell_type": "markdown",
"id": "19541bc0",
Expand Down Expand Up @@ -573,6 +613,14 @@
"print(f\" Bellman-Ford : {t_bellman*1000:.1f} ms\")\n"
]
},
{
"cell_type": "markdown",
"id": "324ad54d",
"metadata": {},
"source": [
"Le plus court chemin pondéré de Paris à Marseille passe par Lyon pour un total de 780 km, contre un chemin non pondéré identique dans la structure (les poids ne changent pas la topologie ici). A* retrouve exactement l'optimum de Dijkstra : son heuristique vol d'oiseau (660 km) est admissible car inférieure à la distance routière (780 km). Sur 10 000 itérations, Dijkstra termine en 281,1 ms contre 506,2 ms pour Bellman-Ford : sur ce graphe petit et peu dense, l'implémentation à priorités est ~1,8× plus rapide."
]
},
{
"cell_type": "markdown",
"id": "139927f7",
Expand Down Expand Up @@ -648,6 +696,14 @@
" print(f\"{v:<12} {deg_cent[v]:>8.3f} {bet_cent[v]:>10.3f} {clo_cent[v]:>11.3f} {pagerank[v]:>10.3f}\")\n"
]
},
{
"cell_type": "markdown",
"id": "d0bcdbb8",
"metadata": {},
"source": [
"La table des centralités confirme le rôle de Paris : degree 0,600 et betweenness 0,400 maximales, PageRank 0,234 en tête, et closeness 0,714 — ex æquo avec Lyon (0,714). Lyon et Toulouse suivent en betweenness (0,200), tandis que Marseille et Lille ont une betweenness nulle (0,000) : aucun plus court chemin ne les traverse, ce sont des villes périphériques de ce réseau."
]
},
{
"cell_type": "markdown",
"id": "21b52faa",
Expand Down Expand Up @@ -724,6 +780,14 @@
"print(f\"\\nNœud avec la plus grande betweenness : {max(bet, key=bet.get)}\")\n"
]
},
{
"cell_type": "markdown",
"id": "7ab61f59",
"metadata": {},
"source": [
"La visualisation confirme le résultat calculé : le nœud de plus grande betweenness est Paris, qui agit comme pont principal entre le nord et le sud du réseau."
]
},
{
"cell_type": "markdown",
"id": "89a560a3",
Expand Down Expand Up @@ -829,6 +893,14 @@
" print(f\" {u:<10} → {v:<10} : {f}/{cap} tonnes/jour\")\n"
]
},
{
"cell_type": "markdown",
"id": "f5ffdd40",
"metadata": {},
"source": [
"Le flot maximum calculé est de 80 tonnes/jour, réparti à parts égales vers les deux clients (40/50 chacun). Le chemin est goulot quelque part : Source→Usine_A (50/50), Usine_A→Depot_1 (30/30) et Depot_2→Client_Y (20/20) sont saturées, tandis que Source→Usine_B (30/40) et Usine_B→Depot_2 (15/25) conservent de la capacité résiduelle — ce sont les arêtes saturées qui bornent le flot total."
]
},
{
"cell_type": "markdown",
"id": "4d200c85",
Expand Down Expand Up @@ -906,6 +978,14 @@
"plt.show()\n"
]
},
{
"cell_type": "markdown",
"id": "16cf5835",
"metadata": {},
"source": [
"La visualisation encode les capacités maximales en épaisseur d'arête et le flot effectif en autre attribut graphique : on y lit directement quelles liaisons transportent à saturation et lesquelles gardent de la marge."
]
},
{
"cell_type": "markdown",
"id": "8f669564",
Expand Down Expand Up @@ -987,6 +1067,14 @@
"print(f\"\\nModularité : {mod:.3f} (1.0 = parfait, 0 = aléatoire)\")\n"
]
},
{
"cell_type": "markdown",
"id": "a13e6411",
"metadata": {},
"source": [
"Quatre communautés sont détectées dans ce réseau social de 18 personnes : trois de 4 membres (C1 : Alice, Bob, Charlie, Diana ; C3 : Frank, Grace, Hugo, Iris ; C4 : Karim, Léa, Mehdi, Nora) et une plus petite de 2 membres (C2 : Eve, Jules). La modularité de 0,570 indique une structure communautaire nettement meilleure qu'un découpage aléatoire (0)."
]
},
{
"cell_type": "markdown",
"id": "32f58f16",
Expand Down Expand Up @@ -1056,6 +1144,14 @@
"plt.show()\n"
]
},
{
"cell_type": "markdown",
"id": "42f64602",
"metadata": {},
"source": [
"La visualisation par couleurs distinctes rend la structure modulaire lisible d'un coup d'œil : chaque communauté forme un agrégat spatial dans le layout, la petite C2 apparaissant comme un duo isolé."
]
},
{
"cell_type": "markdown",
"id": "0706e562",
Expand Down Expand Up @@ -1133,6 +1229,14 @@
" print(f\" {u:<10} ↔ {v:<10} (préférence : {M[u][v]['weight']})\")\n"
]
},
{
"cell_type": "markdown",
"id": "c12a56c0",
"metadata": {},
"source": [
"Le matching biparti optimal (algorithme hongrois) atteint une somme de préférences de 33 : Alice→P_IA (9), Charlie→P_Robot (9), Bob→P_Bio (8) et Diana→P_Phys (7). Chaque étudiant reçoit un projet distinct et la somme totale ne peut pas être améliorée."
]
},
{
"cell_type": "markdown",
"id": "0f3edd51",
Expand Down Expand Up @@ -1295,6 +1399,14 @@
" f\"({100*(1 - n_explores_a/n_explores_d):.0f}% de moins) : l'heuristique oriente la recherche.\")\n"
]
},
{
"cell_type": "markdown",
"id": "8ef915e8",
"metadata": {},
"source": [
"Le réseau routier généré compte 25 nœuds et 51 arêtes, et il est connexe. La comparaison Dijkstra/A* de coin à coin (0,0)→(4,4) donne le même coût optimal (5,905) et le même chemin de longueur 6, mais A* n'explore que 17 nœuds contre 25 pour Dijkstra — 32 % de moins : l'heuristique oriente la recherche sans sacrifier l'optimalité."
]
},
{
"cell_type": "code",
"execution_count": 15,
Expand Down Expand Up @@ -1351,6 +1463,14 @@
"plt.show()\n"
]
},
{
"cell_type": "markdown",
"id": "ce68948d",
"metadata": {},
"source": [
"La visualisation restitue la géométrie de la grille 5x5 : chaque nœud est une intersection, chaque arête une route pondérée, et la disposition spatiale reflète directement la structure générée."
]
},
{
"cell_type": "markdown",
"id": "d12b8d12",
Expand Down Expand Up @@ -1486,6 +1606,14 @@
"print(f\"\\nChercheurs identifiés comme passerelles : {sorted(inter_links_set)}\")\n"
]
},
{
"cell_type": "markdown",
"id": "298d4e2d",
"metadata": {},
"source": [
"Le réseau de collaborations réunit 30 chercheurs et 102 collaborations réparties en trois communautés thématiques (IA, Bio, Phys). Le PageRank place Bio_06 en tête (0,0454), devant IA_05 (0,0426) et IA_04 (0,0422) ; la betweenness désigne plutôt Phys_08 (0,2185) et Bio_00 (0,2133) comme passerelles : 12 chercheurs au total assurent la liaison inter-communautés. Les deux métriques racontent des histoires différentes — être cité (PageRank) n'est pas être un pont (betweenness)."
]
},
{
"cell_type": "code",
"execution_count": 17,
Expand Down Expand Up @@ -1546,6 +1674,14 @@
"plt.show()\n"
]
},
{
"cell_type": "markdown",
"id": "34d2856a",
"metadata": {},
"source": [
"La visualisation finale combine couleur par communauté et taille par PageRank : les gros nœuds sont les chercheurs les plus cités, les couleurs séparent les trois laboratoires thématiques, et les passerelles apparaissent aux frontières colorées."
]
},
{
"cell_type": "markdown",
"id": "0c0e7d04",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
date: '2026-09-21'
by: myia-po-2025:CoursIA
python_sha: 72accfa9060b9a5402a91f14d06b271f21a1b507
csharp_sha: ae8f80d872996154014b6fd4bc746e5f7b820240
content_python_sha: b5ddb57681ae9be98c49009e7ce91cf69d9c0899f8d82acd9aa9b5852ef8dc07
content_csharp_sha: d7499933e03ca2e5c2d5f88b78b8f6183492c880a2b94cc1f1fe07700f45fff3
reason: >-
Mouvement unilateral du cote python (tranche densite #13410) : +4 cellules markdown
de ce cote, l'autre cote inchange. Controle mesure des DEUX cotes (base origin/main
-> tete) : cellules de code python 17->17 et c# 15->15, aucune ajoutee, aucune
retiree, aucune modifiee de part et d'autre. Le contenu algorithmique est donc
intact et `parity_level: semantic` tient — la parite n'a pas ete reparee, elle a ete
RE-ATTESTEE (cf precedent app-14-connectfour-adversarial/0005). Aucune re-execution,
aucun strip outile en attente.
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
date: '2026-09-21'
by: myia-po-2025:CoursIA
python_sha: 24d6bce2ad2a53fbd24e7f215d0e9aca85372184
csharp_sha: 1ff1d4e73fd7c676c114d61e000e4765c2ccaac2
content_python_sha: 5305acce870abaaf19107b3c27cdac20a9126162aa536c7b3a33db7ab441c678
content_csharp_sha: 0f53b8c39a1c76ff043fe0ef03ca195bbba682ddaeb5c552cca904795a3a0f1b
reason: >-
Mouvement unilateral du cote python (tranche densite #13410) : +42 cellules markdown
de ce cote, l'autre cote inchange. Controle mesure des DEUX cotes (base origin/main
-> tete) : cellules de code python 21->21 et c# 10->10, aucune ajoutee, aucune
retiree, aucune modifiee de part et d'autre. Le contenu algorithmique est donc
intact et `parity_level: semantic` tient — la parite n'a pas ete reparee, elle a ete
RE-ATTESTEE (cf precedent app-14-connectfour-adversarial/0005). Aucune re-execution,
aucun strip outile en attente.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
date: '2026-09-21'
by: myia-po-2025:CoursIA
python_sha: f4200f499d53fc957d92b450549f16190b5b48c5
csharp_sha: 1ff1d4e73fd7c676c114d61e000e4765c2ccaac2
content_python_sha: 74008e0c916e118c44a4622d79fd13486413eb7c27811a56641001d919be69b7
content_csharp_sha: 0f53b8c39a1c76ff043fe0ef03ca195bbba682ddaeb5c552cca904795a3a0f1b
Loading