**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
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
-
Itérateur au lieu de liste :
range(1, mod, 2)instead oflist(range(...))— évite d'allouer ~64 Mo pour m=24. -
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
clausesen mémoire pendant la génération
-
Écriture JSON :
json.dump(obj, f)au lieu dejson.dumps()puiswrite()— évite la duplication du string de sortie. -
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 dejson.dumps().
collatz_build_refinement_certificate_over_Sm_multilevel.py
json.load(f)au lieu dejson.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.pyextrait 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).