diff --git a/MyIA.AI.Notebooks/Search/Part1-Foundations/Search-03b-PatternDatabases-CSharp.ipynb b/MyIA.AI.Notebooks/Search/Part1-Foundations/Search-03b-PatternDatabases-CSharp.ipynb
index c41c476e16a..cf26ee6006c 100644
--- a/MyIA.AI.Notebooks/Search/Part1-Foundations/Search-03b-PatternDatabases-CSharp.ipynb
+++ b/MyIA.AI.Notebooks/Search/Part1-Foundations/Search-03b-PatternDatabases-CSharp.ipynb
@@ -895,7 +895,6 @@
]
},
{
- "attachments": {},
"cell_type": "markdown",
"id": "e5944832",
"metadata": {},
@@ -948,7 +947,6 @@
]
},
{
- "attachments": {},
"cell_type": "code",
"execution_count": 9,
"id": "a268f847",
@@ -1034,7 +1032,6 @@
]
},
{
- "attachments": {},
"cell_type": "markdown",
"id": "94251810",
"metadata": {},
@@ -1679,6 +1676,56 @@
"\n",
"| đ [Version Python](Search-03b-PatternDatabases.ipynb)"
]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "finition-03b-csharp-a-retenir",
+ "metadata": {},
+ "source": [
+ "## Ă retenir\n",
+ "\n",
+ "1. **Une PDB échange du calcul contre une table** : 524 160 entrées pour un groupe de 4 tuiles (P(16,4) = 43 680 motifs à 12 positions de la case vide), construites en 2,4 s ; 43 680 pour le groupe de 3. La table n'est pas une estimation : c'est l'optimum d'un problÚme plus facile, calculé une fois.\n",
+ "2. **L'admissibilitĂ© vient du relĂąchement, la somme de la partition de coĂ»ts** : chaque coup ne dĂ©place qu'une tuile, donc ne coĂ»te que dans une seule table â HAdditive = somme des quatre tables reste une borne infĂ©rieure, et HMax = 11 †HAdditive = 28 sur l'instance de dĂ©monstration.\n",
+ "3. **La PDB additive repousse la frontiĂšre du rĂ©solvable** : sur I1 (opt 24) elle explore 732 nĆuds contre 2 114 pour Manhattan (Ă2,9) ; sur I2 (opt 45) et I3 (opt 53), Manhattan dĂ©passe 2 M de nĆuds sans conclure quand la PDB additive rĂ©sout Ă l'optimum (299 773 et 392 168 nĆuds).\n",
+ "4. **« speedup NaN » est une rĂ©ponse, pas un bug** : le facteur n'existe que si les deux heuristiques terminent ; quand Manhattan est hors budget, la comparaison se lit en « rĂ©solu / non rĂ©solu », pas en rapport de nĆuds.\n",
+ "5. **La mĂ©canique ne dĂ©pend pas du langage** : tables `byte[]`, encodage de rang injectif (19 975 Ă©tats abstraits testĂ©s, 0 collision), construction des quatre tables en 5,1 s â la mĂȘme structure qu'en Python, Ă la vitesse prĂšs."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "finition-03b-csharp-verifiez",
+ "metadata": {},
+ "source": [
+ "## Vérifiez votre compréhension\n",
+ "\n",
+ "1. Une table de groupe de 4 tuiles compte 524 160 entrĂ©es alors que P(16,4) vaut 43 680. D'oĂč vient le facteur 12, et pourquoi la case vide doit-elle figurer dans l'Ă©tat abstrait ?\n",
+ "2. Pourquoi HAdditive = somme des quatre tables reste-t-il admissible, alors qu'aucune table ne connaĂźt la position des autres groupes ?\n",
+ "3. Sur I2 et I3, le tableau affiche « speedup NaN ». Que faut-il lire à la place du facteur, et pourquoi le carnet refuse-t-il d'inventer un nombre ?\n",
+ "4. L'encodage de rang est testé sur 19 975 états abstraits avec 0 collision. Quel défaut produirait une collision sur la table, et pourquoi le test est-il placé à la construction plutÎt qu'à l'usage ?\n",
+ "\n",
+ "Réponses
\n",
+ "\n",
+ "1. Un motif de 4 tuiles admet P(16,4) = 43 680 placements ; les coups applicables dĂ©pendent de la case vide, donc l'Ă©tat abstrait est (placement du motif, case vide parmi les douze cases restantes) : Ă 12 = 524 160 â la cellule de lecture du carnet Ă©crit exactement « 524 160 = P(16,4) Ă 12 ». Sans elle, le parcours rĂ©trograde ne saurait pas quels mouvements existent.\n",
+ "2. Chaque coup dĂ©place exactement une tuile, donc appartient Ă un seul groupe : le coĂ»t total se partage sans recouvrement entre les tables, chacune minore sa part, donc la somme minore le total â c'est la version C# du partage de coĂ»ts (section 6b), qui rend HMax †HAdditive toujours vrai (la vĂ©rification des sorties rend `True`).\n",
+ "3. On lit « non rĂ©solu dans le budget » contre « rĂ©solu Ă l'optimum » : NaN signale que le dĂ©nominateur manque â Manhattan n'a pas conclu â, pas une mesure nulle ni une erreur. Inventer un facteur sur une heuristique qui n'a pas terminĂ© serait un chiffre fabriquĂ© ; le carnet prĂ©fĂšre une case vide Ă un nombre faux.\n",
+ "4. Une collision ferait correspondre deux Ă©tats abstraits distincts Ă la mĂȘme entrĂ©e : l'un des deux lirait la distance de l'autre, et l'heuristique pourrait surestimer â un IDA* qui rend une solution sous-optimale sans le signaler. TestĂ© Ă la construction, le dĂ©faut est attrapĂ© avant tout usage en recherche (0 collision sur 19 975 Ă©tats).\n",
+ "\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "finition-03b-csharp-plus-loin",
+ "metadata": {},
+ "source": [
+ "## Pour aller plus loin\n",
+ "\n",
+ "- **Jumeau Python** : [Search-03b-PatternDatabases](Search-03b-PatternDatabases.ipynb) â la mĂȘme technique en Python, avec ses propres mesures (Ă8,4 Ă Ă20,6 sur ses trois instances) et ses sections sur les quotients (information mutuelle, dette Ruzsa).\n",
+ "- **Carnet voisin** : [Search-03c-LimitedDiscrepancySearch-CSharp](Search-03c-LimitedDiscrepancySearch-CSharp.ipynb) â borner l'exploration par la structure du problĂšme plutĂŽt que par une meilleure estimation.\n",
+ "- **Dans la mĂȘme sĂ©rie** : [Search-03-Informed-CSharp](Search-03-Informed-CSharp.ipynb) â la dominance des heuristiques, dont HAdditive â„ HMax est une instance mesurĂ©e ici.\n",
+ "- **Exercices du carnet** : exercice 1 (partition 6-6-3), exercice 2 (PDB symétrique, Felner et al. 2004), exercice 3 (généralisation au 24-puzzle).\n",
+ "- **Lectures** : Korf & Felner (2002), *Disjoint Pattern Database Heuristics* â la partition 4-4-4-3 et la combinaison additive viennent de lĂ ."
+ ]
}
],
"metadata": {
diff --git a/MyIA.AI.Notebooks/Search/Part1-Foundations/Search-03b-PatternDatabases.ipynb b/MyIA.AI.Notebooks/Search/Part1-Foundations/Search-03b-PatternDatabases.ipynb
index 60b6e9a93af..d5599c33501 100644
--- a/MyIA.AI.Notebooks/Search/Part1-Foundations/Search-03b-PatternDatabases.ipynb
+++ b/MyIA.AI.Notebooks/Search/Part1-Foundations/Search-03b-PatternDatabases.ipynb
@@ -2454,6 +2454,62 @@
"| â [Search (racine)](../README.md) | [Partie 4 â MĂ©taheuristiques â](../Part4-Metaheuristics/README.md)\n",
"\n"
]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cec27659",
+ "metadata": {
+ "id": "finition-03b-a-retenir"
+ },
+ "source": [
+ "## Ă retenir\n",
+ "\n",
+ "1. **Une PDB Ă©change du calcul contre une table** : un parcours rĂ©trograde depuis le but abstrait calcule la distance optimale de chaque motif une fois pour toutes â 524 160 Ă©tats pour un groupe de 4 tuiles (P(16,4) = 43 680 motifs Ă 12 positions de la case vide), construits en 12,1 s, et 43 680 pour le groupe de 3.\n",
+ "2. **L'admissibilité vient du relùchement** : le problÚme abstrait est plus permissif (les tuiles jokerisées bougent librement), donc sa distance minore la vraie. La table n'est jamais une estimation : c'est l'optimum d'un problÚme plus facile.\n",
+ "3. **La somme de groupes disjoints reste admissible, et paie** : la partition 4-4-4-3 donne h_additive = 36 contre h_max = 12 sur l'instance de démonstration (§6b, h_saturated = 36 au cap per_group = 15) ; chaque coup ne déplace qu'une tuile, donc ne coûte que dans une seule table.\n",
+ "4. **Le gain croĂźt avec la difficultĂ©** : Ă8,4 (I1, opt 26), Ă10,4 (I2, opt 40), au moins Ă20,6 (I3, opt 52, Manhattan coupĂ© au budget de 20 M de nĆuds) â l'Ă©cart avec Manhattan se creuse Ă mesure que l'instance s'Ă©loigne du but.\n",
+ "5. **La PDB repousse la frontiĂšre du rĂ©solvable** : sur I3, Manhattan plafonne Ă 20 000 000 de nĆuds sans conclure (234,8 s) quand la PDB additive rĂ©sout Ă l'optimum (972 772 nĆuds, 52,1 s)."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "89c0ff16",
+ "metadata": {
+ "id": "finition-03b-verifiez"
+ },
+ "source": [
+ "## Vérifiez votre compréhension\n",
+ "\n",
+ "1. Une table de groupe de 4 tuiles compte 524 160 entrĂ©es alors que P(16,4) vaut 43 680. D'oĂč vient le facteur 12, et pourquoi la case vide doit-elle figurer dans l'Ă©tat abstrait ?\n",
+ "2. Pourquoi h_additive = hâ + hâ + hâ + hâ reste-t-elle admissible, alors qu'aucune des quatre tables ne connaĂźt la position des autres groupes ?\n",
+ "3. Sur I3, Manhattan atteint la limite de 20 000 000 de nĆuds sans conclure et la PDB additive rĂ©sout. Le gain vient-il de la vitesse du calcul ou de la qualitĂ© de l'estimation ?\n",
+ "4. Dans la section 12, I(X_A ; X_B) vaut 2,070 389 bits alors que I(X_A ; X_B | S_B) vaut 0. Que montre ce témoin sur ce qu'un quotient « voit » ?\n",
+ "\n",
+ "Réponses
\n",
+ "\n",
+ "1. Un motif de 4 tuiles admet P(16,4) = 43 680 placements, mais les coups applicables dépendent de l'emplacement libre : l'état abstrait est (placement du motif, case vide parmi les douze cases restantes), soit à 12 = 524 160. C'est ce que la cellule de construction affiche (« 524 160 états »), et le jumeau C# l'écrit explicitement : P(16,4) à 12.\n",
+ "2. Chaque coup du 15-puzzle dĂ©place exactement une tuile, donc appartient Ă exactement un groupe : le coĂ»t total se partage sans recouvrement entre les tables, chacune minore sa part, donc la somme minore le total. C'est le partage de coĂ»ts de la section 6b â et c'est pour cela que h_max (maximum des tables) est †h_additive.\n",
+ "3. De la qualitĂ© de l'estimation : h_additive = 36 contre h_max = 12 sur l'instance de dĂ©monstration. Une borne trois fois plus serrĂ©e Ă©lague les branches avant qu'elles ne s'ouvrent â l'arbre d'I3 tombe de 20 M de nĆuds (plafond atteint) Ă 972 772, et le temps par nĆud reste comparable.\n",
+ "4. Qu'une fois conditionnĂ© par le quotient commun S_B (les cellules occupĂ©es par le groupe B), il ne reste aucune information mutuelle entre les groupes : l'interaction marginale de 2,07 bits est entiĂšrement expliquĂ©e par l'exclusion spatiale, que ce quotient capture. Le contre-tĂ©moin du quotient trop grossier Q' laisse 1,58 bit rĂ©siduel â le quotient doit ĂȘtre choisi exactement (et la commutation S_B est contingente : 80/84 fibres, contre 81/81 pour le groupe Zâ).\n",
+ "\n",
+ " \n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "788f176b",
+ "metadata": {
+ "id": "finition-03b-plus-loin"
+ },
+ "source": [
+ "## Pour aller plus loin\n",
+ "\n",
+ "- **Jumeau .NET** : [Search-03b-PatternDatabases-CSharp](Search-03b-PatternDatabases-CSharp.ipynb) â la mĂȘme technique en C#, avec ses propres mesures (Ă2,9 sur l'instance facile, puis Manhattan hors budget Ă 2 M de nĆuds sur les deux instances difficiles).\n",
+ "- **Carnet voisin** : [Search-03c-LimitedDiscrepancySearch](Search-03c-LimitedDiscrepancySearch.ipynb) â borner l'exploration par la structure du problĂšme plutĂŽt que par une meilleure estimation.\n",
+ "- **Dans la mĂȘme sĂ©rie** : [Search-03-Informed](Search-03-Informed.ipynb) â la dominance des heuristiques, dont h_additive â„ h_max est une instance mesurĂ©e ici.\n",
+ "- **Exercices du carnet** : les exercices 4 à 7 généralisent la section 12 (information mutuelle conditionnelle générique, prix du quotient, commutation de la PDB complÚte, gain de la symétrie dans IDA*).\n",
+ "- **Lectures** : Korf & Felner (2002), *Disjoint Pattern Database Heuristics* â la partition 4-4-4-3 et la combinaison additive viennent de lĂ ; Felner et al. (2004) pour les PDB symĂ©triques.\n"
+ ]
}
],
"metadata": {
@@ -2489,4 +2545,4 @@
},
"nbformat": 4,
"nbformat_minor": 5
-}
\ No newline at end of file
+}
diff --git a/scripts/notebook_tools/twin_pairs.d/search-12-pattern-databases/0018-2026-10-31-myia-po-2024-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/search-12-pattern-databases/0018-2026-10-31-myia-po-2024-CoursIA.yaml
new file mode 100644
index 00000000000..4169f775512
--- /dev/null
+++ b/scripts/notebook_tools/twin_pairs.d/search-12-pattern-databases/0018-2026-10-31-myia-po-2024-CoursIA.yaml
@@ -0,0 +1,6 @@
+date: '2026-10-31'
+by: myia-po-2024:CoursIA
+python_sha: 54191142c7136137139f8b8eed5496edb3034aa4
+csharp_sha: cf26ee6006cf4855b8d327fbb2dec2ea9ed57be9
+content_python_sha: 617a47412252fccd7cf53501a65515c3e79c191d9ceda13bfb77d5990d714511
+content_csharp_sha: b7271010684cfd8c3312294e39a367a900a0fc7dc9a70cf061d15288e7b2b8f1
diff --git a/scripts/notebook_tools/twin_pairs.d/search-12-pattern-databases/0019-2026-10-31-myia-po-2024-CoursIA.yaml b/scripts/notebook_tools/twin_pairs.d/search-12-pattern-databases/0019-2026-10-31-myia-po-2024-CoursIA.yaml
new file mode 100644
index 00000000000..2be4ea84ebb
--- /dev/null
+++ b/scripts/notebook_tools/twin_pairs.d/search-12-pattern-databases/0019-2026-10-31-myia-po-2024-CoursIA.yaml
@@ -0,0 +1,6 @@
+date: '2026-10-31'
+by: myia-po-2024:CoursIA
+python_sha: d5599c3350186c8f5e202c54853d2b57ee8e2d0b
+csharp_sha: cf26ee6006cf4855b8d327fbb2dec2ea9ed57be9
+content_python_sha: 85baba9aaff430a68afae618d76faf95f0542ae6419833ed829a2340e5f0add1
+content_csharp_sha: b7271010684cfd8c3312294e39a367a900a0fc7dc9a70cf061d15288e7b2b8f1