Repository navigation
fix(search,#14824): A* optimalite exige h consistante pour la variante sans re-open - #14967
Conversation
…e sans re-open Closes #14824. La cellule 16 ferme definitivement les etats explores : la consistance est la condition qui achete l'optimalite, pas l'admissibilite seule. Enonces reconcilies (c19, c25, c38, c39, c54, c70 + Search-03d c0 + jumeau C# c0/c9/c20/c24/c34), ligne tuiles mal placees (case vide exclue). Nouveau contre-exemple 4 noeuds : h admissible partout (verifie exhaustivement contre h* Dijkstra), 2 arcs non consistants, A* du notebook rend 4.0 vs optimum 3.5. Re-exec papermill complete, 0 erreur. Co-Authored-By: Claude-Code <noreply@anthropic.com>
|
Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
Golden-Set Execution (H.7 P3)✅ 8/8 notebooks passed (certified reproducible)
Pinned lockfile: |
jsboige
left a comment
There was a problem hiding this comment.
[Hermes] — Issue-First Method Match + re-dérivation firsthand au head b30eb6e. La voie du PR correspond exactement à celle de l'issue #14824 (restreindre l'énoncé à la condition correcte, pas re-plumber l'implémentation) :
- Contre-exemple re-dérivé de zéro, indépendamment (mon propre Dijkstra inverse + mon propre A* sans re-open) : h* to-go = {S:3.5, B:2.5, A:2.0, G:0}, admissible 4/4 états, 2 arcs violant la consistance (S->A, B->A), A* rend S->A->G 4.0 vs optimum S->B->A->G 3.5, écart 14.3 %. La sortie committée (cell 41, ec=15) matche ligne pour ligne.
- Énoncés réconciliés vérifiés au notebook : c38 théorème maintenant « consistante ... variante Graph-Search qui ferme définitivement les états », c39 table « Insuffisante pour cette variante (contre-exemple ci-dessous) », c25 « Garantie (avec heuristique consistante) », c42 interprétation pédagogique correcte (g de A : 2 -> 1.5 ignoré car A fermé). La md 42 note justement la symétrie avec le contre-exemple #12465.
- Twin C# : c9 théorème HNR 1968 correctement qualifié (admissible exige ré-ouverture ; sans ré-ouverture il faut consistante), c24 h1 tuiles mal placées « case vide exclue » admissible ET consistante (justification du mouvement d'une seule tuile — correct), c34 conclusion x2.
- Exécution : 27/27 cellules code ec 1..27 non-null, 0 erreur. Twin C# markdown-only, sorties précédentes valides (exception C.2 documentée).
- Security/hygiène : 0 credential, 0 CR, 0 path-leak sur les deux notebooks.
- Résiduel signalé honnêtement (Search-03d-Csharp c3/c4 même famille) — correct de le garder hors périmètre avec grain séparé si arbitre.
Fix complet, cause racine traitée (l'énoncé contredisait l'implémentation), témoin Dijkstra qui rougit présent. Rien de bloquant. (contrainte token : COMMENT only)
…rs, 9 audits) Merge origin/main: 8 intent YAMLs conflicted (branch stripped audits / main appended new ones). Resolution: took main side (inline audits intact), then --migrate-audits per pair re-enumerated 1..N -- old audits overwrite their files byte-identically, the 9 new audits (po-2023/po-2024/po-2026 lanes, incl. #14967 rebaselines) land at next indices. One today()-stamped duplicate of an undated legacy audit (gametheory-3-topology2x2 0001) removed by hand. Intent files byte-identical to pre-merge branch form (diff vs 08fdef5 empty). --verify-recorded-sha: 34 MISMATCH pre-existing baseline. pytest twin suite: 63 passed. Audit files: 1166 -> 1175.
…atus/conclusion (#15013) Un check-run fige a status=in_progress avec une conclusion terminale (mesure #14967 : 90 min apres son propre completed_at) etait pollue jusqu'a STARVED par le test status-first. Conclusion est desormais autoritatif ; status ne decide que si conclusion est nul. Chaque constituant pending rend son couple observe (nom [status/conclusion]), et le message STARVED nomme le geste de reparation (rerun le run ENFANT, jamais le gate). Controle positif : tests nouveau rouges sur le code non-fixe, verts apres (113 tests pr_gate). Co-authored-by: Claude-Code <noreply@anthropic.com>
Grain: MED/notebook-python -- lane myia-po-2026:CoursIA -- prev: MED/tooling #14929
Quoi: Search-03-Informed enoncait « Theoreme : A* avec une heuristique admissible est optimal » alors que l'implementation Graph-Search (c16) ferme definitivement les etats — pour cette variante, la consistance est la condition qui achete l'optimalite (la cellule 15 le disait deja). Contre-exemple pedagogique ajoute, twin C# corrige dans le meme mouvement.
Preuve: papermill complet 0 erreur, exec_count partout. Cellule contre-exemple executee : « admissible partout ? True » (verification EXHAUSTIVE contre h* calcule par Dijkstra), « A* du notebook -> S -> A -> G 4.0 », « Optimum (Dijkstra/UCS) -> S -> B -> A -> G 3.5 » — le controle qui rougit est present. check_twin_parity : les 2 paires rebaselinees, verdict [OK] sur les deux. Hooks pre-commit H.3 Passed.
Perimetre: 5 fichiers : Search-03-Informed.ipynb (enonces c19/c25/c38/c39/c54/c70 + 3 cellules nouvelles), Search-03-Informed-Csharp.ipynb (markdown c0/c9/c20/c24/c34), Search-03d-WeightedAstar.ipynb (c0, une ligne), scripts/notebook_tools/twin_pairs.d/search-03-informed.yaml et search-14-weighted-a.yaml (rebaseline post-commit, --verify-recorded-sha OK).
Closes #14824
Constat (re-verifie firsthand sur origin/main frais 26f6bc4)
a_star_search:explored.add(current.state)puisif child.state not in explored:— aucun chemin de code ne re-ouvre un etat ferme ;g_scoresne retient que les ameliorations vers la frontiere.if (explored.Contains(child.State)) continue;), memes reductions dans c0/c9/c20/c24/c34.Acceptance — couverture
Contre-exemple — sortie committee (cellule counterexample-demo, exec 15)
Twin registry
search-03-informed: audit 2026-09-07 ajoute (python_sha/csharp_sha post-commit 4a3bb61), raison documentee.search-14-weighted-a: audit 2026-09-07 ajoute (python seul change, 1 ligne markdown).--verify-recorded-sha: OK sur les deux paires (les MISMATCH residuels du balayage fleet-wide sont preexistants a ma base, non touches).Residuel signale (hors enumeration de l'issue)
Search-03d-WeightedAstar-Csharp.ipynbc3 (« W = 1 → A* (optimal, admissible) ») et c4 (label console « A* admissible → reference d'optimalite ») : meme famille de reduction, non enumerés par l'issue ; corriger c4 exigerait une re-exec .NET — grain separe si arbitre.Gate de sequencement
#14790 (renommage Search-N → Search-0N) MERGED 2026-09-06T15:06Z — travail pose sur les chemins post-renommage, verifie firsthand.