Rove 是什么?
Rove 是一个用 Rust 编写的系统发育推断项目。它从一个面向形态学数据的似然内核起步,并优先为 ARM CPU 设计。目标是独立推断:不依赖 BEAST,就能从性状矩阵一路运行到树的样本。
这个名字来自探索、漫游与发现路径。
项目状态
早期。似然核心、NEXUS 读取器、模式压缩和数值测试已经实现。已记录一次 BEAST 2.7.8 参考实验。独立推断、SIMD 代码路径和跨引擎性能比较仍是未来的工作。工作进展在 issues 中跟踪。
为什么还要一个内核
小的状态空间和短的形态学比对值得作为一类独立的工作负载来度量。
- Mk 有闭式解
P(t) = e·I + (1 − e)·π,这使得每个模式的子节点更新只需 O(k),而不是完整的 O(k²) 矩阵乘法。当前的 crate 会构建这些矩阵;直接的剪枝路径在计划中。 - 针对 ARM 的向量化以及重复计算的复用是候选的优化。它们的价值需要匹配的基准测试来确认,包括初始化和部分更新的开销。
- 记录在案的 BEAST 2.7.8 参考运行使用的是它的 Java 似然核心。这一观察并不能说明每个 BEAST 版本、安装或模型所使用的后端。
Rove 则从数据出发:一种沿位点模式向量化的布局,以及针对形态学家常用模型的快速路径。设计页逐一说明这些决定。
今天已有什么
代码仓库是一个没有运行时依赖的 Rust crate。
LikelihoodCore:在位点模式主序布局上的 Felsenstein 剪枝,支持速率类别、可选的逐节点重缩放,以及为采样器准备的节点状态存储/恢复。model::Mk:带闭式解转移矩阵的 Mk 模型,支持均匀或自定义的状态频率。reference::Problem:一个朴素的递归实现,在测试中作为参考保留。nexus::parse与data::Matrix::compress:形态学输入、保留的观测、显式分区和带权重的位点模式。见读取 NEXUS。- 属性测试,在 2 到 10 个末端节点、2 到 6 个状态和 1 到 4 个速率类别的随机树上把核心与参考实现比较。
- 一个 20 个分类单元、50 个二态性状的合成阳性对照矩阵,以及生成它和降级变体的脚本。
还没有什么
- 独立推断:树提议、MCMC、先验和时钟模型。
- 内核中的 Mk 闭式解快速路径,以及 Mkv 确认偏差校正。
- NEON 或 AVX2 代码路径。当前内核是标量 Rust;布局已为向量化做好准备。
- 与 BEAST 或 BEAGLE 的跨引擎性能比较。
- 用户界面,以及可选的 BEAST 2 或 BEAGLE 适配器。
本站任何地方都没有把这个清单上的内容记载为可用。路线图给出先后顺序。
作为参考的 BEAST
BEAST 不是依赖。它是验证和基准测试的参考:先在固定状态下比较似然,再比较完整的推断运行。BEAST 2 和 BEAST X 是不同的代码库,其中一个的结果不能说明另一个,因此比较会写明所针对的实现和版本。
