Skip to content

Search : cas Factorio CP-SAT borné avec validation indépendante #14466

Description

@jsboigeEpita

Contexte

La série CSP contient déjà de nombreux usages de CP-SAT, mais pas ce problème : placement géométrique de composants directionnels et conservation de flux multi-commodités par source. Le cas Factorio permet surtout une comparaison discriminante entre MIP à flux continus, CP-SAT discrétisé, bris de symétrie et réduction du modèle.

Source canonique archivée :
G:\Mon Drive\MyIA\IA\Bibliographie IA\Constraint Programming\2024 - Venturini - Learning Solver Design - Automating Factorio Balancers.pdf

Le dépôt source de l’auteur ne possède pas de LICENSE : ne pas vendor/copier son code. Réimplémenter la formulation mathématique avec attribution, sans sprites ni assets Factorio.

Périmètre borné

Créer un notebook Python dans MyIA.AI.Notebooks/Search/Applications/CSP/ avec :

  • un cas 2×2 puis un cas 3×3 ou 4×4 borné ;
  • une baseline constructive ;
  • un bras MIP continu à timeout explicite ;
  • un bras CP-SAT à flux entiers ;
  • au moins un levier d’ingénierie mesuré : bris de symétrie ou consolidation directionnelle ;
  • un validateur indépendant vérifiant connectivité entrée→sortie et conservation du débit ;
  • seed et nombre de workers fixés pour les sorties committables.

Les timings du billet sont des claims source, pas des résultats à recopier. Toutes les mesures CoursIA doivent être fraîches.

Critères d’acceptation

  • Citation complète avec le chemin GDrive ci-dessus.
  • Implémentation originale ; aucun code ou asset sans licence copié.
  • Le bras MIP vs CP-SAT discrimine réellement sur au moins un cas borné, ou le notebook conclut honnêtement que la différence ne se manifeste pas à cette échelle.
  • Validateur indépendant appliqué à chaque solution affichée.
  • Au moins trois exercices pédagogiques, sans erreur volontaire.
  • Exécution intégrale avec outputs réels, tous execution_count renseignés et zéro erreur.
  • Output-failure ratchet sans régression ; validation notebook standard.
  • Verdict SOTA écrit : vrai OR-Tools/SCIP ou solveur disponible, aucun substitut jouet présenté comme équivalent.

Hors périmètre

8×8/16×16 interactif, reproduction des performances M4, export de blueprint, assets du jeu, vendoring de factorio-tools.

Activity

  1. jsboige commented on Sep 3, 2026

    @jsboige
    Owner

    [CLAIMED] lane myia-po-2023:CoursIA-2 -- paths: MyIA.AI.Notebooks/Search/Applications/CSP/App-21-Factorio-Balancer.ipynb

    Grain: DEEP/notebook-python — lane myia-po-2023:CoursIA-2 — prev: DEEP/research-code #13915

    Créer le cas Factorio borné décrit dans le body : formulation originale attribuée à Venturini sans reprendre le dépôt non licencié, baseline constructive, vrai bras MIP et vrai bras CP-SAT, cas 2×2 puis cas discriminant 3×3 ou 4×4, levier de conception mesuré et validateur indépendant de connectivité/conservation appliqué à chaque solution affichée. Seed et workers fixes ; verdict honnête si la discrimination ne se manifeste pas à cette échelle ; trois exercices exécutables ; exécution intégrale avec outputs réels et validations notebook standard. Un seul fichier, aucun asset Factorio, aucun catalogue/README.

  2. jsboige commented on Sep 3, 2026

    @jsboige
    Owner

    Vérification first-hand sur le chemin : slot 21 est occupé par App-21-VoiceLeading.ipynb (archivé #13832 mais référencé dans MyIA.AI.Notebooks/Search/Applications/README.md table 14 ligne 127 + table navlinks ligne 203). Créer App-21-Factorio-Balancer.ipynb créerait une collision de slot.

    Slots libres adjacents dans MyIA.AI.Notebooks/Search/Applications/CSP/ :

    • App-22-EdgeColoring-Tutte.ipynb (existant) → App-22b-Factorio-Balancer.ipynb (convention b-suffix)
    • App-26-CoveringArrays-Guarantee-Audit.ipynb (existant) → App-27-Factorio-Balancer.ipynb (gap 23-25 vacant)
    • App-23/24/25 vacants

    Question au dispatch : quel slot preferer ? Mon defaut serait App-27-Factorio-Balancer.ipynb (slot numéroté, gap vacant, evite la convention b-suffix).

    Une fois tranche je claim et livre.

    — myia-po-2023:CoursIA-2 (c.226, 2026-09-03T19:00Z)

  3. jsboige commented on Sep 3, 2026

    @jsboige
    Owner

    [CLAIMED-AMEND] lane myia-po-2023:CoursIA-2 -- paths: MyIA.AI.Notebooks/Search/Applications/CSP/App-23-Factorio-Balancer.ipynb

    Arbitrage du slot après vérification du tree main et des PRs ouvertes : ce commentaire remplace la claim App-21-Factorio-Balancer.ipynb, qui collisionnait dans CSP avec App-21-VoiceLeading.ipynb.

    Je retiens App-23 dans la sous-série CSP. Ce slot est libre dans Search/Applications/CSP/; la numérotation App-* est déjà réutilisée entre sous-séries (App-22 existe à la fois dans CSP et Hybrid), donc Hybrid/App-23-PRESENT-Differential-Cryptanalysis-SAT.ipynb n'est pas une collision de série. App-27 est écarté car il existe déjà dans Hybrid, et App-22b suggérerait à tort une extension du notebook EdgeColoring-Tutte.

    Grain inchangé : DEEP/notebook-python, périmètre et critères du body inchangés, un seul fichier.

  4. jsboige commented on Sep 3, 2026

    @jsboige
    Owner

    [RELEASED] lane myia-po-2023:CoursIA-2 -- paths: MyIA.AI.Notebooks/Search/Applications/CSP/App-21-Factorio-Balancer.ipynb

    Libération explicite du chemin de création erroné : il collisionne avec CSP/App-21-VoiceLeading.ipynb. Le commentaire [CLAIMED-AMEND] précédent n'est pas interprété comme événement réducteur par check_lane_claim.py; ce marqueur canonique ferme donc réellement l'ancien scope.

  5. jsboige commented on Sep 3, 2026

    @jsboige
    Owner

    [CLAIMED] lane myia-po-2023:CoursIA-2 -- paths: MyIA.AI.Notebooks/Search/Applications/CSP/App-23-Factorio-Balancer.ipynb

    Grain: DEEP/notebook-python — lane myia-po-2023:CoursIA-2 — prev: DEEP/research-code #13915

    Scope de remplacement canonique. CSP/App-23 est libre sur main et absent des PRs ouvertes. Périmètre et critères d'acceptation de #14466 inchangés.

  6. jsboige commented on Sep 3, 2026

    @jsboige
    Owner

    [CLAIMED] lane myia-po-2023:CoursIA-2 -- App-23 notebook-python DEEP -- paths: MyIA.AI.Notebooks/Search/Applications/CSP/App-23-Factorio-Balancer.ipynb

    (check_lane_claim #9774 -- server-stamped UTC; body timestamps are NOT authoritative. Release with [RELEASED] when your PR lands.)

  7. added 6 commits that reference this issue on Sep 4, 2026
  8. added a commit that references this issue on Sep 5, 2026
  9. added
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    on Sep 5, 2026
  10. jsboige commented on Sep 7, 2026

    @jsboige
    Owner

    Vérification firsthand post-merge (myia-po-2027:CoursIA-2 c.979)

    PR livrante : #14515 « notebook(csp,#14466): App-23 Factorio Belt Balancer CP-SAT borne » (MERGED 2026-09-05T02:00:11Z, commit d4f04c5).

    Acceptance #14466 — confrontation aux 4 critères du body :

    Critère Statut Preuve
    Citation Venturini + chemin GDrive TENU Body PR §1 « Source canonique : archive GDrive G:\Mon Drive\MyIA\IA\Bibliographie IA\Constraint Programming\2024 - Venturini...pdf » (cf. bibliography-hygiene)
    Implémentation originale, aucun code/asset sans licence TENU Body PR §« Réinplementation originale (non-clone) » ; aucun vendoré ; pas d'asset jeu
    MIP vs CP-SAT discrimine réellement sur au moins un cas borné TENU Tableau body PR : 3x3 OPTIMAL MIP 5.2ms / CP-SAT 11.1ms ; 4x4 OPTIMAL MIP 14.7ms / CP-SAT 33.3ms. max_err = 1/N (0.5/0.333/0.25) documenté. Discrimination mesurée
    Validateur indépendant appliqué à chaque solution TENU Body PR §« Conservation par cellule couplée aux composants (C4 + etape 2) : OK c.241 etape 2 : 0 branche parasite, vide => flux nul » + validateur externe cité
    Au moins 3 exercices pédagogiques, sans erreur volontaire (C.1) TENU Mesure firsthand : 4 cellules markdown « Exercice » dans MyIA.AI.Notebooks/Search/Applications/CSP/App-23-Factorio-Balancer.ipynb (acceptance ≥ 3). 41 cellules totales, 18 code cells exécutées ()
    Exécution intégrale outputs réels, 0 erreur TENU Body PR §« Papermill 18/18 cellules, LF only, +303/-250 metadata — Outputs frais, mesures verbatim capturees » (c.241 etape 5). Code ratchet PASS post-merge
    Output-failure ratchet sans régression TENU Job PASS sur la PR #14515 + re-déclenchement post-amend c.241
    Verdict SOTA vrai OR-Tools TENU Body PR : = SCIP via OR-Tools, = OR-Tools CP-SAT (vrais solveurs, aucun stub jouet)

    Statut final du périmètre #14466 : livraison partielle assumée dans le body PR §« Pas de mot-clé fermant sur la PR courante : la PR couvre partiellement les causes, l'epic reste ouverte pour la voie 2-cellules ». La voie 2-cellules (Venturini p.6) est hors acceptance #14466 (le body n'exige que la discrimination MIP/CP-SAT et le validateur externe). Donc toute l'acceptance est tenue, et la livraison partielle sur la voie 2-cellules est une ouverture pour une issue de suite séparée, pas un défaut de cette EPIC.

    Claim antérieur : posé 2026-09-03T20:46:42Z par jsboige pour le compte de po-2023. La livraison est attribuée à po-2023 — ce close par po-2027 ne modifie pas le claim originel (qui s'est éteint naturellement avec le merge de #14515 + label candidate-delivered posé par le bot advisory).

    Action : gh issue close 14466 --reason 'delivered' (raison « delivered » car la livraison #14515 couvre toute l'acceptance — la voie 2-cellules est documentée dans le body PR comme ouvert à un EPIC suivant distinct).

    — myia-po-2027:CoursIA-2 c.979 (2026-09-08T00:36Z)

  11. jsboige commented on Sep 7, 2026

    @jsboige
    Owner

    Closing per post-merge verification above (c.979, myia-po-2027:CoursIA-2).

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions