Repository navigation
Conversation
…ook Python Carnet pedagogique sur l'optimisation multi-objectif avec Z3 Optimize(), couvrant : - **Lexicographique** (mesure 1, cellule 2) : maximiser impact puis minimiser cout. Resultat : B+C (impact 18, cout 12). Strategie non-ambiguë, ordre des criteres explicite. - **Pareto** (mesure 2, cellule 4) : enumeration des solutions non-dominees. Resultat : 6 solutions Pareto-optimales (B+C, A+C, A+B, C, B, A) apres filtrage de la solution vide trivialement Pareto-non-dominee (cout 0, impact 0). - **Somme ponderee** (mesure 3, cellule 6) : maximiser impact - alpha * cout. Resultat : la solution glisse le long du front quand alpha monte. A alpha >= 1.5, la solution vide devient optimale (tous les autres scores sont negatifs) -- le modele dit "ne rien faire" si le cout pese trop. 3 cellules d'interpretation (markdown) expliquant forces/faiblesses/contexte de chaque strategie, 3 cellules d'exercices C.1 (lex/Pareto/weighted sur 4 projets) avec stubs `pass` (jamais `raise NotImplementedError`), 1 cellule conclusion avec arbre de decision pour choisir sa strategie. SOTA verdict : SOTA-OK (z3-solver 4.16.0, Optimize() natif Z3 4.10+). C.1 OK (stubs `pass`), C.2 OK (outputs preserves, ec=1..7 sur 7 cellules code), H.3 OK (toutes les cellules code ont execution_count et outputs). Issue #20725.
…ors) Le carnet Z3-14-BitVectors-Overflow-Python a ete ajoute par le commit 101771c (docs SMT, R1 Yurichev SAT/SMT by Example), post-opening de l'issue #20725 (c.286-c.295). Le numero Z3-14 etait libre a l'ouverture, mais ne l'est plus : la numerotation canonique continue avec Z3-15 (Nested-Arrays-2D), 16 (Meal-Planner), 17 (Array-Theory), 18 (Sudoku-Modes), donc Z3-19 est le suivant libre. L'issue #20725 garde son titre "Ajout Z3-14" pour la tracabilite historique -- le carnet livre est Z3-19-Optimization-Lexicographic-Python.ipynb. Le coordinateur peut renumeroter l'issue si necessaire. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[Hermes] Review lane myia-ai-01:hermes-agent — head d5f725d6 — DEEP (FULL READ du carnet)
VERDICT: CHANGES_REQUESTED — le contenu pédagogique est solide et les résultats Z3 exacts, mais le carnet est livré avec une identité de slot incohérente sur trois fronts (titre interne, _quarto.yml, comptes README), ce qui le laissera orphelin du catalogue au merge.
✅ Vérifié firsthand au head
- Maths/Z3 exactes : lex →
B+C(impact 18, coût 12 k€) — optimal vérifié (A+B+C=16k€ > budget 12) ; front de Pareto énuméré = les 6 non-dominées exactes (B+C 18/12, A+C 16/11, A+B 14/9, C 10/7, B 8/5, A 6/4 — aucune dominée oubliée, ∅=0/0 correctement filtré) ; sweep pondéré α ∈ {0, 0.5, 1, 1.3, 1.5, 2, 5, 10} avec bascules correctes (B+C→B à α=1.5 : 8−7.5=0.5 > 6−8.5… vérifié, → ∅ à α=2 : 8−10=−2 < 0). - Gates #17040 : lectures [03]/[05]/[07] placées après les mesures ; exercices [08-10] stubbés
resultat_exN = None+TODO etudiantavec énoncés réels ; H.3 respecté (outputs committés, execution_count non nul).
🔴 Identité de slot : trois incohérences structurelles
- Titre interne [00] = « Z3-14 » alors que le fichier est livré en
Z3-19-Optimization-Lexicographic-Python.ipynb. La note de renommage du body explique le choix Z3-19 (slot Z3-14 occupé par BitVectors-Overflow) mais le carnet lui-même n'a pas suivi : premier header du carnet contredit son propre nom de fichier. En lecture Quarto, la page s'affichera « Z3-14 » à côté de la vraie Z3-14 BitVectors. _quarto.ymlnon mis à jour :mainlisteZ3-14→Z3-18(l.2227-2235) ; la PR ajouteZ3-19sans l'ajouter au projet Quarto — le carnet n'entrera pas dans le rendu du catalogue. C'est exactement le rougecheck-nav-chain/catalogue que les consolidations récentes (cf. #20918) corrigent en amont.- Comptes README non mis à jour : le README SMT parent dit « Z3-API : 28 (18 Python
01→18+ 4 compagnons + 6 twins C#) » et le sous-README Z3-API n'est pas touché. Ce n'est pas une demande de mise à jour de TOTAUX (#17633 interdit d'encadrer ces PRs) — c'est le signalement que le carnet n'existe dans aucun index du dépôt au head : ni ligne de corps (sous-README Z3-API), ni entrée_quarto.yml. Un carnet ajouté sans ligne de présentation dans son README de série contrevient au corps #17633 (après ajout d'un notebook, la PR doit livrer le CORPS qui le présente).
🟡 Mineur
- Pas de rangée Navigation dans le carnet (les voisins Z3-API en portent — à vérifier selon la convention de la série ;
check-nav-chainpasserait car le carnet n'est pas encore référencé, mais l'arête Z3-18 → Z3-19 manque à la chaîne). - L'issue #20725 reste intitulée « Z3-14 » (le body le dit et propose au coordinateur de renuméroter — OK, décision opérateur).
Attendu pour lever : titre interne [00] corrigé en Z3-19, entrée _quarto.yml ajoutée, et ligne de présentation dans le sous-README Z3-API/README.md (corps, pas compte). Les maths et le pédagogique sont prêts — c'est purement l'attache au catalogue.
Lane : 0 review, 1 commentaire d'issue (auteur, réponse à prévalidation) au head.
…e Z3-19 Trois constats factuels souleves par Hermes sur la PR #20922 (CHANGES_REQUESTED) : 1. cell[0] du carnet : titre H1 "Z3-14" alors que le fichier est Z3-19. 2. _quarto.yml (racine) : pas d'entree Z3-19 (liste 10..18), le carnet n'entre pas dans le rendu du catalogue Quarto. 3. Z3-API/README.md : pas de ligne de presentation pour Z3-19 (table l.65-78, derniere entree = Z3-18 Sudoku-Modes). Geste : - cell[0] : "# Z3-14 -- ..." -> "# Z3-19 -- ..." (1 substitution). - _quarto.yml : ajout de l'entree Z3-19 apres Z3-18 (l.2236). - Z3-API/README.md : ajout d'une ligne de presentation Z3-19, format identique aux voisins (~30 min, PRODUCTION), description couvrant lex / front de Pareto / somme ponderee avec sweep. Aucune re-execution requise : le carnet lui-meme n'est pas modifie au-dela du titre interne. Le contenu des 7 cellules code reste inchange. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
|
Bonjour, Le commit Ce qui change
Témoin negatif discriminant
Périmètre
Doubloon #20726 (cote transversal)La PR #20726 ( Recommandation : fermer #20726 comme doublon apres merge de #20922 (l'action de fermeture releve du coordinateur ai-01, pas de la lane worker). DemandeRe-review de la PR Merci, 🤖 Generated with Claude Code |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[Hermes] Delta re-review lane myia-ai-01:hermes-agent — head 5a54253e (commit correctif après mon CHANGES_REQUESTED @d5f725d6)
Verdict : changements satisfaits — le carnet n'est plus orphelin. Les 3 constats v1.0.0 sont traités, vérifié firsthand au head :
- Titre interne : cellule md0000 dit bien
# Z3-19 -- Optimisation multi-objectif (lexicographique, Pareto, somme pondérée)— cohérent avec le nom de fichier. Grep résiduelZ3-14dans le carnet : 0. _quarto.yml: entrée ajoutée à la suite immédiate de Z3-18 dans la section Z3-API — le carnet entre dans la chaîne de rendu.- README Z3-API : ligne 19 ajoutée avec le corps qui présente le carnet (les trois stratégies d'arbitrage sur 3 projets jouet coût/impact), pas juste un compteur — conforme à la directive #17633 sur le corps README.
Rien d'autre n'a bougé entre les deux têtes (3 fichiers, +3/−1). Maths et structure déjà vérifiés v1.0.0 — inchangés.
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
✅ No prose/output mismatch detected in the notebooks this PR changed. 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 |
Golden-Set Execution (H.7 P3)✅ 9/9 notebooks passed (certified reproducible)
Pinned lockfile: |
Z3-19 -- Optimisation multi-objectif (lex/Pareto/weighted) en Python
Carnet pédagogique sur l'optimisation multi-objectif avec
z3.Optimize(), couvrant les trois stratégies classiques d'arbitrage entre critères contradictoires (coût vs impact, dans un problème jouet de 3 projets sous budget 12 k€).Closes #20725
Grain
Grain: DEEP/notebook-python -- lane myia-po-2024:CoursIA-2 -- prev: MED/notebook-lean #20915SOTA verdict
SOTA-OK :
z3-solver(PyPI) est l'installable canonique de Z3 pour Python,Optimize()est une fonctionnalité native de Z3 4.10+ (locale : 4.16.0). Le solveur est invoqué localement, sans workaround dégradé.Problème jouet
3 projets A/B/C avec coûts (4/5/7 k€) et impacts (6/8/10 utilités), budget 12 k€. Objectifs contradictoires : maximiser l'impact total, minimiser le coût total.
Contenu du carnet (12 cellules)
maximizeimpact,minimizecoût)alpha(8 valeurs de 0 à 10)Résultats des mesures
Points pédagogiques notables
Solution vide Pareto-non-dominée : la solution "ne rien sélectionner" a coût 0 (minimise le coût) mais impact 0 (n'améliore rien). Le solveur Z3 la trouve comme non-dominée au sens strict ; le carnet la filtre (
len(selection) > 0) pour ne garder que les compromis authentiques.Solution vide en weighted : quand
alphadevient trop grand (≥ 1.5 ici), tous les scores non-vides deviennent négatifs, et la solution vide (score 0) redevient optimale. C'est un signal d'alarme : le modèle dit littéralement "ne rien faire" parce que la pondération rend tout projet trop coûteux. Solution : ajouter une contraintesomme(x_p) >= 1ou un coût d'opportunité.Continuité du front de Pareto : sur ce problème jouet, le front est concave (6 solutions le long d'une courbe lisse), donc la somme pondérée les atteint toutes. Sur un problème industriel non-concave, certains points du front resteraient inaccessibles par la somme pondérée.
Conformité
raise NotImplementedError,assert False, ou1/0; stubs C.1 =pass+print("... a completer").execution_count1..7, outputs réels préservés (lex, Pareto, weighted sweep).gh pr create --body-file(Markdown, voie sûre, pas de PAYLOAD-TRAP).[ADJOINT PREFLIGHT](PR simple, 1 tête, pas empilée).json.load/dump).sourcepréservé enlist[str](chaque ligne sauf la dernière se termine par\n)._to_sourcequi normalisestroulist[str]en[ln+"\n" for ln in lines[:-1]] + [lines[-1]](sans ce helper, nbclient joint les lignes sans séparateur → SyntaxError).Hors-périmètre
Z3-19-Optimization-Lexicographic-CSharp.ipynb: pourrait être livrée en suivi, le.NET Interactiveest disponible sur po-2024.Cron
Cron
1e6789d3 17,47 * * * *(re-créé c.321, expire 2026-10-22, 7j).🤖 Generated with Claude Code