Skip to content

fix(search,#13778): restore MGS-28 non-regression run - #15647

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/13778-mgs28-nonregression
Sep 12, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/13778-mgs28-nonregression

Conversation

@jsboige

@jsboige jsboige commented Sep 11, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/research-code — lane myia-po-2025:CoursIA — prev: LIGHT/readme #15642

Résumé

  • Restaure l’exécutabilité de MGS-28-BareBonesPSO-vs-Mealpy.ipynb après le déplacement refactor(search,#13777): isoler les face-a-face MGS vs mealpy en sous-serie dediee #13959 en corrigeant les trois références d’assemblies ../MetaGeneticSharp vers ../../MetaGeneticSharp.
  • Réexécute intégralement le face-à-face Bare-Bones PSO sur le gitlink MetaGeneticSharp courant 78ce550, avec le vrai kernel .net-csharp, PythonNet 3.1.0 et mealpy 3.0.2.
  • Mesure la non-régression sur les quatre graines et rend un verdict fermé : NO IMPROVEMENT. Le livrable est l’exécutabilité restaurée et l’invariance algorithmique mesurée, pas un gain de performance revendiqué.

Périmètre

Un seul notebook existant est modifié. Aucun nouveau face-à-face, aucun changement du sous-module, du gitlink, de la fonction de coût, de la représentation, des graines, des budgets ou des checkpoints. Les artefacts catalogue et les marqueurs CATALOG-STATUS restent inchangés.

Protocole apparié

  • graines : {0, 1, 7, 42} ;
  • population : 50 ;
  • horizon : 160 générations/epochs ;
  • budgets : 8 000 évaluations MGS et 8 050 évaluations mealpy ;
  • représentation : Sudoku R1 continue à 36 gènes ;
  • coût : nombre de conflits ;
  • checkpoints : 25/50/75/100 % ;
  • bras : MGS BareBonesParticleSwarm, mealpy-mgs et mealpy-kennedy.

La réexécution canonique finale termine les 10/10 cellules code, sans erreur, avec execution_count 1 à 10 et des outputs présents pour chaque cellule. Des passages complets répétés, avant et après la correction finale de cohérence F1, ont confirmé la stabilité des grandeurs algorithmiques ; seuls les timings machine ont varié.

Résultats de non-régression

Graine MGS final MGS checkpoints mealpy-mgs final mealpy-mgs checkpoints
0 31 33/31/31/31 19 32/22/20/19
1 31 31/31/31/31 25 31/26/25/25
7 29 29/29/29/29 26 32/26/26/26
42 30 30/30/30/30 27 32/30/28/27

mealpy-kennedy reproduit les mêmes conflits et checkpoints que mealpy-mgs sur ces quatre graines. Médianes finales : MGS 30,5, mealpy-mgs 25,5, mealpy-kennedy 25,5. Déterminisme : 12/12 combinaisons bras × graine stables. Budgets et trajectoires restent identiques à la baseline committée.

Les ratios de temps ne fondent pas le verdict : ils varient entre passages kernel sur ces très petites durées absolues. La prose du notebook reprend uniquement les ratios de la sortie finale committée (0,38× ms/éval entre bras mealpy ; 6,30× Python/C#) et explicite leur dépendance machine.

Diagnostic dérive

Verdict C.4 : CAUSE_FIXED. Le notebook a été déplacé d’un niveau dans MGS-vs-mealpy/ par #13959, mais ses trois directives #r ont conservé l’ancienne profondeur. Les outputs gelés masquaient cette rupture. La cause est corrigée dans la source, les DLL net9.0 Debug ont été reconstruites depuis le gitlink courant, puis le notebook a été réexécuté de bout en bout ; aucune sortie n’a été éditée à la main. Seul strip_probe_banner.py --apply, normalisateur autorisé après exécution .NET, a retiré les adresses de probe.

Verdict performance : NO IMPROVEMENT. Les résultats algorithmiques sont invariants contre le moteur mis à jour : cette égalité est constatée par les réexécutions, jamais supposée à partir du protocole. Le correctif restaure la preuve exécutable de non-régression demandée par #13778.

Le diagnostic corrige aussi trois contradictions historiques entre prose et sorties : R1 compte 36 gènes et non 51 ; les profils des graines sont persistants/mixtes plutôt que tous « en croisement » ; six variantes PSO mealpy exposent w/c1/c2 ou leurs variantes, tandis que P_PSO utilise des coefficients sin/cos dynamiques. Aucune des sept variantes n’est bare-bones.

Verdict SOTA : SOTA-OK. Le notebook invoque les moteurs réels MetaGeneticSharp et mealpy via PythonNet ; aucune réimplémentation de substitution n’est committée.

Validations post-fix

  • validate_pr_notebooks.py origin/main <notebook> : 1/1 passed, 10 cellules code .net-csharp.
  • Exécution finale exec_dotnet_persist.py <notebook> 300 : 10/10 cells, 0 errors, 44,5 s.
  • check_output_failure_text.py origin/main : 1 notebook modifié, 0 régression.
  • check_output_collapse.py origin/main : 0 finding.
  • C.1 : aucune erreur volontaire ; aucune sortie d’erreur.
  • C.2 : execution_count 1..10 et outputs présents sur 10/10 cellules code.
  • strip_probe_banner.py : 0 bannière résiduelle après normalisation autorisée.
  • Aucun chemin machine, aucun changement de gitlink, un seul fichier modifié.
  • git diff --check origin/main...HEAD : succès.

Limite hors périmètre

Le README de la sous-série conserve d’anciens ratios issus d’autres passages. Leur réconciliation est un suivi séparé : l’élargir ici rendrait la PR composite et mélangerait une non-régression exécutable avec un audit de série.

See #13778.

🤖 Generated with Claude Code

Les trois directives #r de la cellule socle pointaient ../MetaGeneticSharp,
une profondeur calculee quand le notebook vivait a la racine de
Part4-Metaheuristics/. L'isolation des face-a-face MGS vs mealpy dans
MGS-vs-mealpy/ (cause #13959) a ajoute un niveau : la cellule ne resolvait
plus rien, et les sorties -- transportees telles quelles, jamais
re-confirmees -- s'etaient figees.

Corrige en ../../MetaGeneticSharp (memes DLLs net9.0 Debug, meme gitlink
78ce550) et re-execute de bout en bout au kernel .net-csharp reel (pont
PythonNet 3.1.0 vers mealpy 3.0.2). Aucune sortie n'est editee a la main ;
le seul normalisateur applique est strip_probe_banner.py (post-re-exec).

Detection Clerc re-alignee. L'introduction et le commentaire de la cellule
de detection affirmaient que les sept variantes PSO de mealpy 3.0.2 portent
w/c1/c2 ; le catalogue imprime le contredit pour P_PSO (aucun parametre
liste). Six variantes exposent explicitement w/c1/c2 ou leurs variantes
(w_min/w_max/ci/cf/c_local) ; la septieme, P_PSO, porte des coefficients
sin/cos dynamiques sur la meme mise a jour de vitesse. La conclusion
("aucun n'est bare-bones") tient ; la raison invoquee est corrigee dans les
deux loci (cellule 0/7/8/9 du notebook).

Prose re-alignee sur les sorties fraiches (C.4/C.5), trois contradictions
qui avaient survecu au gel : R1 annoncait 51 genes alors que la sortie en
compte 36 ; les graines 1/7/42 etaient dites "en croisement" alors que le
classifieur imprime les donne *mixtes* (graine 0 *persistante*, MGS deja
derriere au cp25, 33 contre 32) ; les temps muraux absolus sont retires au
profit des seuls rapports de ce passage (0,38x ms/eval ; 6,30x Python/C#),
ces rapports variant eux-memes d'un passage kernel a l'autre. Section
## Diagnostic derive ajoutee, verdict CAUSE_FIXED pour la cause et
NO IMPROVEMENT pour l'axe performance (invariance mesuree contre le moteur
mis a jour ; livrable = executabilite restauree + non-regression mesuree).

Non-regression mesuree sur sept executions completes : conflits finaux
par graine (31/31/29/30 MGS, 19/25/26/27 mealpy), checkpoints, budget
d'evaluations (8000/8050) et drapeau 12/12 bras-graines stables sont
identiques au baseline committe. Seuls les temps muraux et la version
patch de Python (3.13.3 -> 3.13.12) different.

See #13778

Co-Authored-By: Claude Code <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2025:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-09-11) :

G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@github-actions

Copy link
Copy Markdown
Contributor

Golden-Set Execution (H.7 P3)

✅ 8/8 notebooks passed (certified reproducible)

Notebook Status Time
2.1-Workflow-ML.ipynb ✅ SUCCESS 12.0s
2.2-Descente-de-gradient.ipynb ✅ SUCCESS 7.5s
2.3-Regression-lineaire-logistique.ipynb ✅ SUCCESS 10.8s
2.4-Arbres-Forets-Ensembles.ipynb ✅ SUCCESS 11.3s
Search-01-StateSpace.ipynb ✅ SUCCESS 8.8s
SL-1-LogicalLearning.ipynb ✅ SUCCESS 5.6s
rl_4_multi_armed_bandits.ipynb ✅ SUCCESS 67.0s
GameTheory-04c-NashExistence-Python.ipynb ✅ SUCCESS 8.5s

Pinned lockfile: scripts/notebook_tools/golden_set.lock.txt (H.7 P3, axe A #4208)

@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Prose/output review needed in the notebooks this PR changed: a numeric value is not anchored, an explicit relation is contradicted, or its evidence is missing. These cases remain distinct in the JSON report; the signal is advisory, NOT a merge gate.

Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit claim-check relations resolve only against named CLAIM_METRICS from the local output window and are classified SUPPORTED, CONTRADICTED, or UNPROVEN.
The markdown-claims-output-report run artifact contains the structured JSON report. See python scripts/check_markdown_claims_output.py --help for re-running locally.
Detector rationale: c.290 / c.331 / PR #11435 numeric pathology, extended with low-noise relational evidence.

@github-actions

Copy link
Copy Markdown
Contributor

Notebook PR Validation: PASS

  • Notebooks checked: 1
  • Code cells validated: 10
  • Result: All passed

Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns)
Non-Python kernels (.NET/Lean): C.1 + errors only (execution_count advisory)
QuantConnect notebooks: C.1 + errors only (require QC Cloud for execution)

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

VERDICT: LGTM (vérifié: fetch du notebook au head 3b2e71e — 3 refs #r corrigées, 10/10 cellules exécutées, grandeurs du tableau présentes dans les outputs)

[Hermes] — #15647 review du head 3b2e71e (fix #13778, restore MGS-28).

Vérifications firsthand sur le notebook au head :

  • Cause racine et complétude du fix : les 3 directives #r pointent bien ../../MetaGeneticSharp/.../net9.0/*.dll ; les 6 occurrences restantes de ../MetaGeneticSharp en simple profondeur sont toutes dans la prose markdown (diagnostic « Cause (a) », citation de l'ancien chemin cassé) — application symétrique vérifiée, aucun chemin de code résiduel.
  • Exécution authentique : 10/10 cellules code, execution_count 1..10, 0 erreur, outputs présents (~4,9K chars), pas de trace d'ename/traceback. La rupture était masquée par les outputs gelés — exactement le diagnostic C.4 du body.
  • Cohérence claims ↔ outputs : les finales du tableau de non-régression (MGS 31/31/29/30, mealpy-mgs 19/25/26/27) et les médianes 30,5 / 25,5 apparaissent toutes dans les outputs réels. Le verdict NO IMPROVEMENT est une conclusion du body, pas une chaîne cherchée dans les sorties — honnête (le livrable revendiqué est l'invariance mesurée, pas un gain).
  • Périmètre discipliné : 1 fichier, aucune touchée au gitlink/DLL paths en dehors des 3 refs, marqueurs catalogue inchangés. strip_probe_banner.py --apply = normalisateur autorisé post-.NET.
  • Security scan : 0 match (HF_TOKEN|API_KEY|BEARER|PASSWORD|SECRET|TOKEN\s*=).

Issue-First Method Match : #13778 demande la preuve exécutable de non-régression — la méthode livrée (réexécution appariée complète, verdict fermé NO IMPROVEMENT) est la méthode documentée, pas une substitution.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants