Repository navigation
Fix(search,#23384): App-2 Statistical-Validity -- kernel 3.13 et CP-SAT reproductible par construction - #23454
Conversation
…AT reproductible par construction - Convergence du kernel `python3` 3.11.16 -> 3.13.3, re-execution complete (31/31 cellules, 0 erreur) : les sorties textuelles sont identiques a l'octet a celles commitees (k CP-SAT, IC bootstrap, p-valeurs, r, sweep). - Defaut de reproductibilite repare a la racine : `cpsat_color` etait borne par `max_time_in_seconds` (temps MURAL) avec `num_search_workers = 4`. Sur les 19 instances qui n'atteignent pas l'optimum prouve, la valeur renvoyee est celle trouvee a l'echeance, donc dependante de la charge CPU, alors que la prose promet un rendu byte-a-byte. Passage a `max_deterministic_time` + un seul worker + `random_seed` : la promesse devient vraie par construction, sur toute machine. Mesure : la variante deterministe rend exactement les memes k sur les 21 resolutions (4 passes, 2 processus) et coute moins cher (31,5 s vs 40 s). - Docstring de `cpsat_color` precise le budget ; md[1] nomme le mecanisme ; md[5] ne dit plus "trouvee en 2 secondes" (duree murale machine-dependante) mais "dans le budget de temps imparti (2 unites de temps deterministe)". See #23384 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
|
✅ No unanchored measurement claim detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams). Scope = notebooks CHANGED in this PR, not the whole corpus. The |
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
Golden-Set Execution (H.7 P3)✅ 9/9 notebooks passed (certified reproducible)
Pinned lockfile: |
|
[ADJOINT PREFLIGHT] Une correction de reproductibilité dans Ce que j'ai mesuré, cellule par cellule. Base Le fond est correct, et il est vérifiable dans le carnet. La cellule de tête affiche toujours Quatre imprécisions du corps, toutes dans le corps et non dans le diff.
Le carnet n'appartient à aucune paire de jumeaux, comme l'annonce le corps. Le registre Périmètre. 1 fichier, +204 / -166. Aucun fichier sous Ce que je n'ai pas vérifié. Je n'ai pas ré-exécuté le carnet : la variante déterministe et les « 4 passes de sonde » ne sont pas dans le dépôt. Je n'ai pas rejoué les portes citées par le corps, je reprends leurs verdicts des jobs verts à la tête. Je n'ai pas évalué la qualité pédagogique, ni vérifié que le budget déterministe donne le même résultat sur une autre machine ou une autre version de OR-Tools. Point à lire en priorité : le point 1. La phrase « identiques à l'octet » est celle qu'un lecteur utilisera pour décider si le carnet peut être ré-exécuté ailleurs sans surprise ; elle est fausse au sens strict, et la nuance tient en une ligne. Les points 2 et 3 sont des affirmations de mesure extérieures au diff — elles ne sont pas opposées ici, mais elles ne sont pas opposables non plus. |
Grain: DEEP/notebook-python — lane myia-po-2023:CoursIA — prev: DEEP/notebook-python #23445
Tranche
Search/Part3-Cas-pratiquesdu census #23384 : convergence deApp-2-GraphColoring-Statistical-Validity-Pythonau canon kernelpython33.13, ré-exécution réelle, et reproductibilité réparée à la racine — la prose promettait un rendu byte-à-byte que le code ne garantissait pas.Mesures
execution_countnon nul partout ; 2 figures committées avec leurs sorties.language_info.version: 3.11.16 → 3.13.3 (kernelpython3du siège,C:\Python313\python.exe).main: CP-SATk = [8,8,8,8,8,8,9,8,8,8,8,8,8,8,8,8,8,7,8,8](moyenne 8,00, écart-type 0,32, min/max 7/9), 1OPTIMAL/ 19FEASIBLE, IC bootstrap [10,55 ; 11,35] / [9,15 ; 9,70] / [7,85 ; 8,15], p-values 7,40e-05 / 2,41e-05 / 3,28e-05,r = 1,000sur les trois paires, sweep densité inchangé (1,067 → 2,800). Aucune prose n'a donc eu à être re-dérivée.Défaut de reproductibilité réparé (cause racine)
cpsat_colorbornait CP-SAT parmax_time_in_seconds(temps mural) avecnum_search_workers = 4. Or 19 des 20 instances n'atteignent pas l'optimum prouvé : leur valeur est celle trouvée à l'échéance du chronomètre, donc dépendante de la vitesse et de la charge CPU. La prose affirmait pourtant (md[1]) que relancer le carnet donne « byte-à-byte les mêmes nombres » — une garantie que le code ne fournissait pas.Correction :
max_deterministic_time(budget indépendant de la machine) +num_search_workers = 1+random_seed = SEED. La promesse devient vraie par construction, sur toute machine.Mesure de non-régression : la variante déterministe rend exactement les mêmes
kque la variante murale committée — 2 passes de sonde dans un processus, puis l'exécution complète du carnet dans un autre. Et les 4 passes de la sonde murale, réparties sur 2 processus avec desPYTHONHASHSEEDdifférents (12345 puis 999), sont elles aussi identiques aux valeurs demain. La variante déterministe est en outre moins chère : 31,5 s pour les 20 instances contre 40 s en mural à 4 workers.Seul le paramétrage du solveur change. Les graphes (
SEED = 42), le glouton et DSATUR étaient déjà déterministes et sont intacts.Prose ajustée en conséquence : md[1] nomme le mécanisme (temps déterministe, un worker, graine fixée), et md[5] ne dit plus « une coloration valide trouvée en 2 secondes » (durée murale, machine-dépendante) mais « dans le budget de temps imparti (2 unités de temps déterministe) ».
Diagnostic dérive
Cause (a) — environnement / kernel : carnet épinglé sur
python33.11.16, hors canon global (#19181, 3.13). Cause réparée : la convergence 3.11.16 → 3.13.3 est le correctif, et l'exécution prouve que les sorties ne bougent pas.Cause (e) — stochasticité non garantie : les valeurs CP-SAT dépendaient d'une limite de temps murale à 4 workers. Cause réparée à la racine (budget déterministe, mono-worker, graine fixée), vérifiée par plusieurs passes sur des processus distincts.
Verdict :
CAUSE_FIXEDpour les deux causes. Aucune dérive de valeur à documenter : les sorties du run courant sont identiques à celles demain.Gardes locales (sur le diff committé)
check_kernel_drift.py origin/main --jsoncheck_prose_quantitative_claims.py --diff origin/main...HEADcheck_activity_leak.py --diff origin/main...HEADcheck_output_collapse.py origin/maincheck_source_collapse.py origin/maincheck_c2_compliance.py --path …Hooks pre-commit : gitleaks, H.3 (carnet non exécuté), compilabilité des cellules, scrub des chemins papermill — tous verts.
metadata.papermill.input/output_pathnormalisés au basename.Note de patch :
check_kernel_driftne flague pas le drift patch-only ; le canon effectif de la garde est3.13, atteint ici (kernel du siège 3.13.3).Périmètre
1 fichier :
MyIA.AI.Notebooks/Search/Part3-Cas-pratiques/App-2-GraphColoring-Statistical-Validity-Python.ipynb— 3 cellules de source touchées (paramètres du solveur, docstring, 2 cellules de prose), sorties ré-exécutées.Ce carnet n'est membre d'aucune paire de jumeaux enregistrée (le registre
twin_pairs.dapparieApp-2-GraphColoring.ipynbàApp-2b-GraphColoring-CSharp.ipynb) : aucune parité n'est touchée. Catalogue byte-identique àmain.See #23384
🤖 Generated with Claude Code