任务
每个 Case 是边长 20–40 的方形森林,包含入口、花朵、固定树木和一名冒险者。每次冒险者移动前,Policy 可以在尚未揭示的格子上永久放置 Treant。
一组放置会被原子执行,并且必须保证入口和冒险者当前位置都仍与花朵连通。随后冒险者揭示视线范围,并沿确定性最短路径前往私有目标。
Policy 接口
第一次 Observation 发布静态森林;后续 Observation 只发布变化中的公开状态,同一 Episode 内的 Policy 记忆可以保留地图和历史放置。
| Observation 字段 | 含义 |
|---|---|
turn | 当前回合索引 |
adventurer | 冒险者当前坐标 |
newly_revealed | 上一步移动新揭示的格子 |
revealed_cells / placed_treants | 公开的进度计数 |
initial | 尺寸、入口、花朵和固定树木;仅第一次 Observation |
返回一组原子化放置。空集合表示不放置 Treant,直接让冒险者继续移动。
| Action | 含义 |
|---|---|
{"placements": [[row, column], ...]} | 在合法、未揭示且为空的格子上放置互异的 Treant |
{"placements": []} | 本回合不放置 |
评估
| 量 | 定义 |
|---|---|
| Episode 计分 | 合法冒险者移动次数,上限为 2,048 |
| Benchmark 得分 | 所有 Episode 计分的算术平均值 |
| Policy failure | 计为 0 |
Feedback
Feedback 汇总所有评估 Case 的延迟、放置数量、终止结果、失败与 trace 覆盖。
| 字段 | 含义 |
|---|---|
capped_mean_turns | 主要 Benchmark 得分 |
mean_placed_treants | 永久放置数量的平均值 |
flower_reached / turn_cap_reached | 终止结果计数 |
policy_failures | 失败 Episode 数量 |
trace.jsonl | 有界的语义 trace,包含公开 Observation、放置集合与终止结果。 |
使用 distribution
从仓库根目录构建这个可独立安装的叶子 project:
uv sync --project environments/atcoder/ahc054/treants_forest --extra dev
uv build environments/atcoder/ahc054/treants_forest该 package 导出:
from treants_forest import TreantsForestBenchmark, baseline_program
benchmark = TreantsForestBenchmark()
program = baseline_program()