algo/docs/features/collatz_terminal_clauses_memory_optimization.md
ncantu c71cd4475a collatz: update scripts, conjoncture, hensel_b bundle and certs_shifted
**Motivations:**
- Sync refinement bundle script, hensel chain shifted, conjoncture and artefacts.

**Root causes:** N/A
**Correctifs:** N/A
**Evolutions:**
- collatz_build_hensel_chain_leaves_shifted.py
- collatz_build_refinement_bundle_over_Sm_multilevel.py
- README.md, conjoncture_collatz.md
- bundle_mod2p15_to2p24_hensel_b, certs_shifted

**Pages affectées:**
- applications/collatz/collatz_k_scripts/
- applications/collatz/conjoncture_collatz.md
- docs/artefacts/collatz/refinement_K/
2026-03-10 16:52:28 +01:00

2.9 KiB

Auteur : Équipe 4NK

Optimisation mémoire — génération clauses terminales

Contexte

La génération des clauses terminales pour les paliers élevés (m ≥ 22) provoquait des plantages par manque de mémoire (2^m résidus impairs, chaque clause ~100 octets).

Optimisations appliquées

collatz_generate_terminal_clauses_over_Sm.py

  1. Itérateur au lieu de liste : range(1, mod, 2) instead of list(range(...)) — évite d'allouer ~64 Mo pour m=24.

  2. Mode streaming (automatique si total_roots > 500_000) :

    • Écriture des clauses dans un fichier JSONL temporaire au fur et à mesure
    • Assemblage du JSON final sans garder toutes les clauses en mémoire
    • Pas de liste clauses en mémoire pendant la génération
  3. Écriture JSON : json.dump(obj, f) au lieu de json.dumps() puis write() — évite la duplication du string de sortie.

  4. Option --streaming : force le mode streaming même pour les petits paliers.

collatz_generate_minorated_descent_clauses_over_Sm.py

  • json.dump() vers fichier au lieu de json.dumps().

collatz_build_refinement_certificate_over_Sm_multilevel.py

  • Chargement prioritaire de .residues.json (streaming ijson) au lieu du JSON complet.
  • ResidueBitset pour leaves_by_m et closed quand m ≥ 20 (≈1 Mo par palier au lieu de centaines de Mo).
  • json.load(f) au lieu de json.loads(path.read_text()) pour le fallback.

collatz_build_hensel_chain_leaves_shifted.py

  • Chargement prioritaire de .residues.json pour les clauses terminales (streaming ijson).
  • _ResidueBitset pour leaves_by_m quand palier ≥ 20.
  • D_minor > 50 Mo : chargement en flux (ijson) au lieu de json.load.
  • dminor_leaf_map : stockage compact (k,u,Bk,Akm1,Ckm1,N0), Leaf créé à la demande.
  • --leaf-list-file : chemins lus depuis un fichier (évite CLI trop long).
  • gc.collect() périodique dans la boucle principale.

Format compact .residues.json

Pour les paliers élevés (m ≥ 20), un fichier .residues.json compact est généré ou extrait. Le chargeur multilevel (collatz_build_refinement_certificate_over_Sm_multilevel.py) utilise ce fichier lorsqu'il existe, évitant de charger les JSON de clauses complets (ex. 1,3 Go pour m=24).

  • Génération : en mode streaming, le script terminal écrit automatiquement .residues.json.
  • Extraction : collatz_extract_residues_from_clauses_json.py extrait les résidus d'un JSON existant (par regex en flux pour les fichiers > 100 Mo).

Recommandations pour m=23, m=24

Le mode streaming s'active automatiquement pour m ≥ 20 (2^19 = 524_288 > 500_000). Pour m=23 et m=24, le script peut être exécuté avec :

python3 applications/collatz/collatz_k_scripts/collatz_generate_terminal_clauses_over_Sm.py \
  --repo-root . --palier 23 --k-max 16 --t-max 16

Les temps d'exécution sont approximativement : m=22 ~3 min, m=23 ~6 min, m=24 ~12 min (selon la machine).