From 67b3268b982a9aac0c17ad809e4eb4f12f805bbf Mon Sep 17 00:00:00 2001 From: Codex Date: Wed, 15 Jul 2026 00:27:37 +0200 Subject: [PATCH] malkhut(e2e): memory-efficient + crash-safe 3h run Rolling stats (no episode accumulation), CMA-ES every 10 cycles (3 evals), gc.collect() after CMA, global try/except for crash safety. 100-opponent swarm, 9 assets, 270 scenarios. --- MALKHUT/malkhut/long_e2e_3h.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/MALKHUT/malkhut/long_e2e_3h.py b/MALKHUT/malkhut/long_e2e_3h.py index 3403d96..1394508 100644 --- a/MALKHUT/malkhut/long_e2e_3h.py +++ b/MALKHUT/malkhut/long_e2e_3h.py @@ -385,19 +385,22 @@ def main(): import traceback traceback.print_exc() - # Phase 2: CMA-ES every 5 cycles - if cycle % 5 == 0 and remaining > 600 and recent_episodes >= 20: + # Phase 2: CMA-ES every 10 cycles (memory-heavy — keep infrequent) + if cycle % 10 == 0 and remaining > 600 and recent_episodes >= 20: phase = f"CYCLE {cycle} — CMA-ES" - cma_scenarios = rng.sample(all_scenarios, min(5, len(all_scenarios))) + cma_scenarios = rng.sample(all_scenarios, min(3, len(all_scenarios))) try: best = run_cma_cycle( cwm_factory, cma_scenarios, params, codec, pool, - n_evals=3, + n_evals=2, seed=SEED + cycle * 100, ) cma_bests.append(best) if best.score > params.w_expected_pnl * 10: params = best.params + # Explicitly free CMA-ES state + del best + import gc; gc.collect() except Exception as e: print(f" CMA-ES error (cycle {cycle}): {e}", flush=True) @@ -496,4 +499,10 @@ def _baseline(): if __name__ == "__main__": - main() + try: + main() + except Exception as e: + import traceback + print(f"\nFATAL ERROR: {e}") + traceback.print_exc() + sys.exit(1)