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