该 Scenario 面向“给定目标分子,能否在有限计算预算内找到连接到固定可购库存的完整多步路线”。它评价的是搜索系统,不只是单步模型:相同 expansion policy、filter policy、stock snapshot 和预算下,不同搜索策略如何组合局部断键、处理 AND-OR 依赖、避免循环并返回多样路线。
与只要求 planner 返回若干“看起来像路线”的基础任务相比,本场景的特殊条件是库存与资源预算同时冻结:路线必须在严格 AND 语义下让所有叶节点命中同一 stock,而且不能通过增加模型调用、深度或墙钟时间换取更高 solved rate。它因此真正比较 budgeted search policy,而不是比较谁使用了更强的单步模型、更多供应商数据或更长运行时间。
Benchmark 采用 PaRoutes 的 n1/n5 目标、参考路线和库存。PaRoutes 是为多步逆合成规划设计的公开框架,提供 10,000 个目标的两种难度设置、两个固定 stock、参考路线和路线相似性/聚类工具。正式主榜只在冻结的公开子集上开发,在隐藏目标子集上最终评分;参考路线和 route fingerprints 不提供给 Harness。
solved 是严格的图语义:一条反应的全部前体分支都必须递归到达库存,才能称完整路线。搜索到一个库存分子、生成一条看似合理的部分树或 forward model 恢复目标,都不能替代 solved 判定。
1.0.0,记录 API 明确声明数据许可为 CC BY 4.0,提供 n1/n5 targets、stocks、reference routes、约 150k 训练路线及上游 MD5。文件候选清单见 test_cases 来源核验;这不代表维护者已准入或本地 SHA256 已验证。SHA256(target_smiles + benchmark_seed) 划分 public-development 与 private-evaluation,目标不跨 split。预算受控的多步规划场景 基础路线生成
冻结目标 + stock + policy + budget 输入目标
│ │
▼ ▼
规范化与库存身份冻结 调用 planner
│ │
▼ ▼
AND-OR 搜索与逐次 expansion 返回若干路线
│
├── 每次调用/扩展/状态写审计
▼
solved、partial、timeout 明确区分
│
▼
冻结所有候选树与资源使用
│
▼
私有 evaluator 计算恢复率、相似性、多样性与成本
给定冻结的 PaRoutes n1/n5 匿名目标、固定库存、固定单步 expansion/filter policy 和统一计算预算,请设计并执行多步逆合成搜索,对每个目标返回完整 solved 路线、未解决部分树或明确失败,并在不访问参考路线的情况下优化求解率、参考路线覆盖、多样性与计算成本。
目标: 确认所有系统使用同一分子身份、库存和预算。
输入: targets.csv、stock.smi、policy manifests、scenario config。
输出: canonical target/stock、配置哈希和冲突报告。
技术: 用固定 RDKit 规范化、去 atom map 并保留立体化学。重复 stock 合并但记录来源;target 若已在 stock,按预注册规则单独统计 trivial solved,不混入路线搜索指标。
目标: 验证 expansion/filter policy 与 planner 可复现且无参考路线泄漏。
输入: checkpoints、代码 commit、配置。
输出: admission report。
技术: 校验 checkpoint 哈希、训练集声明、许可证、模型输入输出契约;阻止读取 private route 文件、预计算 target-specific cache 或在线检索。
目标: 在固定预算内递归组合单步提案。
输入: target、stock、policy、搜索算法与预算。
输出: 搜索事件流、开放/关闭状态、候选树和资源统计。
技术: 分子节点是 OR,反应的全部前体是 AND。每次 expansion 记录 parent、候选、policy score、filter 结果、累计调用数和时间。检测循环与重复状态,不把 transposition 当新发现重复计数。
目标: 用确定性规则区分完整路线、部分路线和系统失败。
输入: 搜索树与 stock membership。
输出: 每条 route 的 solved、未解决叶节点和终止原因。
技术: 自叶向根验证所有 AND 分支。终止原因至少包括 solved、budget_exhausted、timeout、no_expansion、invalid_output 和 backend_error。
目标: 去除完全重复路线,同时保留真正不同的合成策略。
输入: 原始 route trees。
输出: 规范化路线、重复来源和固定 Top-N 候选。
技术: 以规范化反应/分子树签名去重;使用 PaRoutes route fingerprint/cluster 计算路线差异。多样性选择不能改变 solved 状态或补入超预算路线。
目标: 在参考路线可见前冻结搜索轨迹和候选路线。
输入: 全部搜索结果。
输出: routes.jsonl、search_events.jsonl、intermediate_results.json。
技术: evaluator 计算 solved rate、Top-N route recovery、与参考路线最近距离、cluster coverage 和成本。参考未恢复不等于生成路线错误,因此 route quality 与 exact recovery 分开报告。
input/
├── targets.csv
├── stock.smi
├── expansion_policy_manifest.json
├── filter_policy_manifest.json
├── planner_config.json
└── environment_manifest.json
private_evaluator/
├── reference_routes.json
├── route_clusters.json
├── target_source_mapping.json
├── split_audit.json
└── evaluation_config.json
参考路线、cluster 和目标来源不得进入 Harness。公开 stock 可以读取,但不得替换或联网补充。
intermediate_results.json 最低要求{
"scenario_id": "multistep_paroutes_budgeted_v1",
"paroutes_release": "<release>",
"input_hashes": {},
"planner": {"id": "<planner>", "commit": "<commit>"},
"policies": {"expansion": {}, "filter": {}},
"budget": {},
"targets": [],
"aggregate": {"solved": 0, "partial": 0, "failed": 0},
"warnings": []
}
每个 target 至少记录 route 数、solved 数、最佳未解决叶数量、扩展数、模型调用数、耗时、终止原因和原始输出路径。
reference_repository/
├── README.md
├── environment.yml
├── pipelines/
│ └── 02_multistep_route_planning.py
└── test_cases/
├── install.py
├── evaluate.py
├── database_sources.json
└── 02_multistep_route_planning.json
仓库中的实际参考实现位于 scenarios/pipelines/ 与
scenarios/test_cases/。Pipeline 只消费公开 target、stock、budget 和模型输出;
reference routes 只由冻结输出之后启动的 evaluator 读取。
全流程可离线自动化:输入/库存冻结 ✓ → policy 准入 ✓ → AND-OR 搜索 ✓ → 完整性验证 ✓ → 路线规范化 ✓ → PaRoutes 私有评分 ✓。最大工程成本是大规模模型推理和公平的资源计量,不是指标实现。
仓库已提供 retrosynthesis_planning.multistep_benchmark:严格校验 target/stock,按 molecule-OR 与 reaction-AND 重新计算库存闭合,记录预算超限、终止原因、重复路线,并按 target 计算 solved rate、参考路线恢复和路线相似度。它不包含 AiZynthFinder checkpoint、PaRoutes 数据或模型推理本身。
检查 stock 冻结、policy 准入、AND-OR 语义、预算审计、失败分类、全路线保存和私有参考隔离。
检查全部输入/模型/config 哈希、planner commit、环境版本、event log、随机 seed 和单一重跑入口。
solved=false。