algo/docs/features/collatz_terminal_clauses_memory_optimization.md
ncantu a8d234c072 collatz: extend paliers to 2^24, hensel shifted, phase reports and analyses
**Motivations:**
- Extend terminal and minorated clauses to paliers 2^19–2^24.
- Add hensel chain leaves shifted variant and refinement bundles mod2p21/mod2p24.
- Document grammar extension phases, y_mod3 and prefix diversity analyses.

**Root causes:**
- N/A (evolutions)

**Correctifs:**
- N/A

**Evolutions:**
- Add collatz_analyze_prefix_diversity.py, collatz_analyze_y_mod3_distribution.py.
- Add collatz_build_hensel_chain_leaves_shifted.py, collatz_extract_residues_from_clauses_json.py.
- Extend terminal_clauses_over_Sm and minorated_clauses_over_Sm to palier2p19–2p24.
- Add refinement bundles bundle_mod2p15_to2p21, bundle_mod2p15_to2p24, hensel_shifted variant.
- Add phase reports (option_a_extension_m24, grammar_extensions, y_mod3, prefix_diversity, clause_D_partielle).
- Update README and feature docs.

**Pages affectées:**
- applications/collatz/collatz_k_scripts/README.md
- applications/collatz/collatz_k_scripts/*.py
- docs/artefacts/collatz/**
- docs/features/*.md
2026-03-10 12:36:59 +01:00

2.3 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

  • json.load(f) au lieu de json.loads(path.read_text()) — évite de charger la chaîne complète en mémoire avant parsing.

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).