逆向路径搜索:以目标分子为根,逐层把广义规则逆向应用(亦尝试正向)展开搜索树, 直到所有前体落入汇集合。
BeamSearch
00 Remarks
三个核心机制(readme.md §3):
- 束剪枝:每层按 (待分解数, 原子总数, ΔG) 确定性排序,只保留前 beam-width 个状态;
- 循环消除:每条分支维护已见化合物指纹集合,前体重复即剪枝;
- 状态去重:同一 Pending 集合只保留一次。
束搜索并非完备搜索,提高 SearchOptions.BeamWidth 与 SearchOptions.MaxDepth 可提升召回。
01 Syntax
02 Methods
| Name | Overloads | Summary |
|---|---|---|
| .ctor | 1 | 构造搜索器。 |
| Search | 1 | 主入口:从目标分子出发做逆向搜索,返回全部完整路径(深度 ≤ maxDepth)。 |
| ExpandUnit | 1 | 展开单个工作单元:把一个规则双向应用到某个待分解化合物上,产出新状态。 单元内部的顺序(先正向后逆向、碎片按原序)与串行版本严格一致。 |
| PathKey | 1 | 路径内容指纹 = 各步(规则 + 被分解物 + 前体集合)的多重集。 步骤字符串排序后拼接,使"分解顺序不同但反应集合相同"的等价路径合并为一条。 |
| Preference | 1 | 导向优先级:0 = 本分支已触达导向键(如起点化合物 A),1 = 尚未触达。 未配置导向键时恒返回 0,即退化为原有的纯 (pending, atoms, ΔG) 排序。 |
03 Fields
| Name | Overloads | Summary |
|---|---|---|
| _preferKeys | 1 | 导向键集合(可选):束剪枝时优先保留「本分支已经触达过其中某个化合物」的状态。 用于 SynthesisRoute(A→B) 把 A 的分子指纹放进来,使通往 A 的分支不被剪掉。 为 Nothing 或空集时,剪枝排序与历史行为完全一致。 |
| _pathKeys | 1 | 已收录完整路径的内容指纹(消除对称臂等同构重复路径) |
| _mergeLock | 1 | 并行区归并共享结果列表时的锁 |
| Stats | 2 | 本次搜索的运行统计(尝试次数、生成状态数、到达深度等)。 |
04 Members
构造搜索器。
| Name | Type | Description |
|---|---|---|
rules | List(Of Rule) | 广义反应规则集。 |
sinkKeys | HashSet(Of String) | 底盘内源代谢物的分子指纹集合(汇)。 |
currencyKeys | HashSet(Of String) | 货币/辅底物的分子指纹集合(产生即忽略,不计入前体)。 |
opts | SearchOptions | 搜索参数(策略、束宽、深度、路径上限、匹配上限、并行度)。 |
preferKeys | HashSet(Of String) | 可选的导向键集合:束剪枝时优先保留本分支已触达这些指纹的状态(用于「必须从 A 出发」的定向搜索)。 传 Nothing 时与历史行为完全一致。 |
主入口:从目标分子出发做逆向搜索,返回全部完整路径(深度 ≤ maxDepth)。
| Name | Type | Description |
|---|---|---|
target | Molecule | 目标分子(源)。 |
完整路径列表(每条为一个 SearchState,其 Pending 为空)。 若目标本身已属于汇集合,返回空列表——因为"目标已内源"不存在待设计的通路。
展开单个工作单元:把一个规则双向应用到某个待分解化合物上,产出新状态。 单元内部的顺序(先正向后逆向、碎片按原序)与串行版本严格一致。
路径内容指纹 = 各步(规则 + 被分解物 + 前体集合)的多重集。 步骤字符串排序后拼接,使"分解顺序不同但反应集合相同"的等价路径合并为一条。
导向优先级:0 = 本分支已触达导向键(如起点化合物 A),1 = 尚未触达。 未配置导向键时恒返回 0,即退化为原有的纯 (pending, atoms, ΔG) 排序。
导向键集合(可选):束剪枝时优先保留「本分支已经触达过其中某个化合物」的状态。 用于 SynthesisRoute(A→B) 把 A 的分子指纹放进来,使通往 A 的分支不被剪掉。 为 Nothing 或空集时,剪枝排序与历史行为完全一致。
已收录完整路径的内容指纹(消除对称臂等同构重复路径)
并行区归并共享结果列表时的锁
本次搜索的运行统计(尝试次数、生成状态数、到达深度等)。