diff --git a/deploy/profile-scripts/evolution_daily.py b/deploy/profile-scripts/evolution_daily.py index c03ff038..3e4d6e53 100644 --- a/deploy/profile-scripts/evolution_daily.py +++ b/deploy/profile-scripts/evolution_daily.py @@ -1,28 +1,36 @@ # -*- coding: utf-8 -*- -"""evolution_daily.py — 策略进化引擎 cron 入口(每周六 22:00,hermes cron) +"""evolution_daily.py — 策略进化机制 cron 入口(每周六 22:00,hermes cron) 放在 deploy/profile-scripts(硬链接进 cron scripts 目录), -内部调用 evolution/evolution_engine.py(真正逻辑所在,含单例守卫)。 +内部串行调用: + 1. evolution/evolution_engine.py — 进化引擎(退化检测+假设归纳+变体验证+推送,含单例守卫) + 2. evolution/precompute_evolution.py — 进化中心预计算(假设归纳/B组/资格 → evolution_center.json,供研究Tab展示) -设计依据:docs/decisions/2026-08-15-策略自我进化闭环重构.md -- 每周六 22:00 运行(策略评估 21:00 之后) -- 无退化/变体不达标 → 静默 -- 达标变体 → strategy_evolution + XMPP 推送老莫(永不自动 promote) +设计依据:docs/decisions/2026-08-15-策略自我进化闭环重构.md + 2026-08-16 老莫自我进化两方向 """ import subprocess, sys, os REPO = "/home/hmo/MoFin" ENGINE = f"{REPO}/evolution/evolution_engine.py" +PRECOMPUTE = f"{REPO}/evolution/precompute_evolution.py" PY = f"{REPO}/venv/bin/python" def main(): - if not os.path.exists(ENGINE): + # 1. 进化引擎(退化→假设→验证→推送) + if os.path.exists(ENGINE): + r1 = subprocess.run([PY, ENGINE], cwd=REPO, capture_output=False, timeout=3600) + else: print(f"evolution_engine.py 不存在: {ENGINE}", flush=True) - sys.exit(1) - # 单例守卫在 engine 内部(fcntl),这里直接调用 - r = subprocess.run([PY, ENGINE], cwd=REPO, capture_output=False, timeout=3600) - sys.exit(r.returncode) + r1 = None + # 2. 进化中心预计算(研究Tab展示数据) + if os.path.exists(PRECOMPUTE): + r2 = subprocess.run([PY, PRECOMPUTE], cwd=REPO, capture_output=False, timeout=3600) + print("进化中心预计算完成", flush=True) + else: + print(f"precompute_evolution.py 不存在: {PRECOMPUTE}", flush=True) + r2 = None + sys.exit((r1.returncode if r1 else 1) or (r2.returncode if r2 else 0)) if __name__ == "__main__":