Files
mcm-26-b/.zcode/plans/plan-sess_cf390556-4ef3-4ce6-b91e-782aee1718f9.md
T
2026-09-11 21:00:39 +08:00

7.5 KiB
Raw Blame History

分层强化学习(HRL)实施计划 — 2026 高教社杯 B 题第三、四问

0. 现状与复用决策

仓库已有生产级基建,全部复用、不重写:

现有组件 位置 用途
SimulatorClient(HTTP+JSON、幂等重试、截止时钟、JSONL 日志) src/mcm26b/protocol/ 模拟器对接(prompt 第 1 步已完成)
本地评测机(内存回环,一局秒级) referee/ + harness.LocalSimTransport 本地简化环境内核
网格幸存集滤波(真源保留定理已证明) src/mcm26b/particles.py 每频道信念后验
凸候选集 + 五状态机 src/mcm26b/belief/ 频道状态观测
信息增益选点、TSP 2-opt、六边形覆盖、清除证书、后备清除 src/mcm26b/planner/ 候选生成器 + 证书审批兜底 + 启发式基线
单步 MaskablePPO 全套(特征/掩码/BC/训练/审计) src/mcm26b/rl/ + scripts/ 代码模式模板 + 端到端对照基线

改进方向(来自 v2 审计文档已知局限):单步 RL 只做选点、学不到全场调度;Q4 后备清除偏多、尾部退化(13778s→11797s,距 4000s 目标远)。HRL 高层正是补跨频道全场调度决策。

已确认的三个决策:① 代码集成到 src/mcm26b/hrl/(README 给出与 prompt 目录树的映射表);② 低层为字面 8 方向 PPO + 直线控制器对照(诚实预期:部署时只提交终点,低层对虚拟时间增益≈0,价值在架构完整性与消融验证);③ 本次跑通全流程 + 短程训练(1–2h),完整课程训练交付脚本由用户自行启动。

1. 新建文件

src/mcm26b/hrl/
├── __init__.py
├── constants.py        # HRL 接口常量:N_CANDIDATES=96、观测维度,feature_version=3
├── candidates.py       # 高层候选生成:待清除源/信息增益探索点/覆盖验证点/Q4 扇区探测点 + 动作掩码
├── features.py         # 高层观测(20 频道×14 统计 + 全局标量 + 96×6 候选特征 ≈864 维)、低层观测
├── policy.py           # HighLevelPolicy/LowLevelPolicy 加载器(沿用 PointSelectionPolicy 元数据校验模式)
├── low_level_env.py    # 低层训练环境:随机起点→子目标,Discrete(8),逐步计费,奖励=−Δd−转向+到达
├── hierarchical_env.py # 高层整场环境:10–16 源,动作=子目标槽位,内嵌低层执行器,域随机化+课程参数
└── executor.py         # 子目标执行器:低层 PPO 步进(本地计费)或直线控制器(可切换),终点提交模拟器

scripts/
├── train_hrl_low.py    # 低层:BC 克隆直线控制器热启动 → MaskablePPO 微调;直线对照评估
├── train_hrl_high.py   # 高层:4 阶段课程(--stage --resume --timesteps),SubprocVecEnv 并行
├── pretrain_hrl_expert.py  # 可选:从 BayesLoop 调度器克隆 (obs, 子目标) 对热启动高层
├── tune_hrl.py         # Optuna TPE(prompt §10 搜索空间,预算 15–20 trials,初值复用 bayes 已调参数)
├── benchmark_hrl.py    # 配对消融:HRL vs bayes/directional/单步 PPO,dev(700-702)/val(91000-91005)/stress 固定场景
└── ablate_hrl.py       # 四项消融:无信息增益奖励/无动作掩码/无课程/无粒子滤波

src/mcm26b/planner/hrl_loop.py  # HRLLoop 运行时闭环(Q3/Q4),保留证书审批与异常留痕
src/mcm26b/cli.py               # 新增 --strategy hrl / --q4-strategy hrl / --hrl-model
tests/test_hrl.py               # 特征布局、掩码、环境形状、奖励恒等式、训练-部署观测一致性
docs/hrl.md                     # 设计文档 + prompt 目录树映射表
docs/paper/ 增补                # 算法流程图、伪代码、超参表、训练曲线

2. 核心设计

高层动作空间 Discrete(96) + 掩码:槽位按固定顺序填充(已定位待清除源 ≤16 → PF 驱动探索点 → 覆盖网格未验证点 → Q4 扇区探测点),空槽/已清除频道/接收盘外候选掩码 −∞。

高层观测(≈864 维,参照 v2 的 401 维布局模式):20 频道 × 14 特征(六状态 one-hot、MEC μx/μy、σx/σy/ρ、log 幸存格数、期望信息增益、距离、频道号)+ 全局 8 维(位置、时间比例、已清除数、最近检测结果编码/示向度/距离)+ 96×6 候选特征。

step 语义:高层选子目标 → executor 步进(低层 8 方向,每步 ≤100m,本地按 Δd/5 计费;部署时仅终点调模拟器)→ 按子目标类型执行 /measure 或 /clear → belief+PF 更新 → 奖励。

奖励:r = −Δ虚拟耗时/100 + 100·清除 + 5·新检测 + w_info·ΔH − 冗余惩罚,主口径与目标函数(虚拟时间)一致;w_info 可消融。

课程 4 阶段(prompt §7.1):1 源/5 频道/无噪 → 3 源/10 频道/±0.5° → 8 源/16 频道/±1° → 10–16 源/20 频道/±1°;每阶段迁移上阶段权重,Q4 从 Q3 权重微调(定向比例递增),域随机化贯穿(源位置/频道/r_eff/朝向/噪声种子)。

运行时闭环 HRLLoop:初始覆盖相位(快速发现信号)→ 主循环高层决策(证书达标自动 /clear,与 BayesLoop 同语义)→ 全清即 /exit。不触碰候选集更新与清除判定的守恒性(真源保留定理依赖),异常留痕兜底保留。

3. 实施顺序(对应 prompt §12)

  1. constants.py + candidates.py + features.py(候选/掩码/观测)+ 单元测试
  2. low_level_env.py + train_hrl_low.py:低层短程训练,验证收敛到近直线(报告与直线最优的差距)
  3. hierarchical_env.py + executor.py + hierarchical_env 单元测试(奖励恒等式:回合回报 = f(虚拟时间、清除数))
  4. train_hrl_high.py + 课程 + 域随机化 + SubprocVecEnv;pretrain_hrl_expert.py BC 热启动
  5. 短程课程训练(每阶段 2–5 万步,总计 1–2h),产出训练曲线
  6. hrl_loop.py + CLI 接入,--local-judge 本地演练验证全清正确性
  7. benchmark_hrl.py 配对对比(沿用 benchmark_rl.py 的 all_valid 有效口径)+ ablate_hrl.py 四项消融
  8. tune_hrl.py 受限 Optuna;产出最佳超参表
  9. 本地 referee 演练 ×3/题,表 1 格式结果(案例编码/清除数/平均定位清除时间/程序运行时间),日志 JSONL 原样归档 output/hrl/
  10. docs/hrl.md、README 更新、论文素材(流程图/伪代码/超参表/对比分析,含"为什么分层 PPO、为什么非端到端、为什么非多智能体"论证)

4. 验收标准

  • 全部 pytest 通过(现有 243 项 + 新增 HRL 测试)
  • benchmark_hrl.py 输出 all_valid=true(真值全清、缺席无误判、零异常、正常 exit、计时复算一致)
  • 短程训练下 Q4 HRL 相对 directional 有可测改进方向(对标单步 RL 的 −14.38%);Q3 如实报告与 bayes 的差距(v2 审计口径:Q3 RL 无稳定增益)
  • 所有实验固定种子、命令可复现;消融表含均值±方差(≥5 种子)
  • 完整训练只需用户执行 scripts/train_hrl_high.py --full 级别的命令

5. 风险与对策

  • 高层整场回合过长(100–200 决策步)不收敛 → γ=1 + 密集 Δcost 奖励 + BC 从 bayes 调度器热启动
  • 低层增益≈0 → 如实消融报告(直线对照差异≈0),论文定位为架构必要性验证而非性能来源
  • Q3 可能无增益 → 与 v2 口径一致如实报告,主打 Q4 调度收益;两种策略可共存(HRL 不改默认策略,仅在胜出后由用户决定切换默认)