[Paper Review] Phylotrack: C++ and Python libraries for in silico phylogenetic tracking
Phylotrack introduces a high-performance C++ library (Phylotracklib) and a Python wrapper (Phylotrackpy) for tracking and analyzing phylogenetic relationships in in silico evolutionary simulations. Built for efficiency and scalability, it enables exact, complete lineage tracking in digital populations of tens of thousands of agents, supporting advanced phylogenetic metrics and memory-optimized operations like pruning and abstraction.
In silico evolution instantiates the processes of heredity, variation, and differential reproductive success (the three "ingredients" for evolution by natural selection) within digital populations of computational agents. Consequently, these populations undergo evolution, and can be used as virtual model systems for studying evolutionary dynamics. This experimental paradigm -- used across biological modeling, artificial life, and evolutionary computation -- complements research done using in vitro and in vivo systems by enabling experiments that would be impossible in the lab or field. One key benefit is complete, exact observability. For example, it is possible to perfectly record all parent-child relationships across simulation history, yielding complete phylogenies (ancestry trees). This information reveals when traits were gained or lost, and also facilitates inference of underlying evolutionary dynamics. The Phylotrack project provides libraries for tracking and analyzing phylogenies in in silico evolution. The project is composed of 1) Phylotracklib: a header-only C++ library, developed under the umbrella of the Empirical project, and 2) Phylotrackpy: a Python wrapper around Phylotracklib, created with Pybind11. Both components supply a public-facing API to attach phylogenetic tracking to digital evolution systems, as well as a stand-alone interface for measuring a variety of popular phylogenetic topology metrics. Underlying design and C++ implementation prioritizes efficiency, allowing for fast generational turnover for agent populations numbering in the tens of thousands. Several explicit features (e.g., phylogeny pruning and abstraction, etc.) are provided for reducing the memory footprint of phylogenetic information.
Motivation & Objective
- To enable complete, exact observability of evolutionary lineages in in silico simulations by tracking parent-child relationships across generations.
- To address the computational and memory overhead of maintaining full phylogenies in large-scale digital evolution experiments.
- To provide a performant, extensible software stack that integrates seamlessly into existing digital evolution frameworks.
- To support advanced phylogenetic analysis through standardized metrics and abstraction techniques.
- To offer both low-level C++ performance and high-level Python usability via Pybind11.
Proposed method
- Implementation of Phylotracklib as a header-only C++ library under the Empirical project, optimized for speed and memory efficiency.
- Use of Pybind11 to create Phylotrackpy, a high-level Python interface exposing the core C++ functionality.
- Incorporation of explicit phylogeny pruning and abstraction features to reduce memory footprint during long-running simulations.
- Design of a public-facing API for integrating phylogenetic tracking into digital evolution systems with minimal code changes.
- Support for measuring standard phylogenetic topology metrics (e.g., Robinson-Foulds distance, others) via a stand-alone interface.
- Leveraging C++'s performance for fast generational turnover in agent populations numbering in the tens of thousands.
Experimental results
Research questions
- RQ1How can phylogenetic tracking be efficiently integrated into large-scale in silico evolutionary simulations?
- RQ2What computational and memory optimizations are necessary to maintain complete lineage histories in populations of tens of thousands of agents?
- RQ3To what extent can a dual-language (C++/Python) software stack balance performance and usability in digital evolution research?
- RQ4How do standardized phylogenetic metrics perform when computed on dynamically evolving in silico phylogenies?
- RQ5Can abstraction and pruning techniques significantly reduce the memory overhead of full phylogenetic tracking without losing analytical fidelity?
Key findings
- Phylotracklib enables fast generational turnover in digital evolution simulations with populations numbering in the tens of thousands, due to its C++-based low-level optimizations.
- The integration of phylogeny pruning and abstraction features allows for significant reduction in memory usage while preserving essential lineage information.
- Phylotrackpy provides full access to the C++ functionality through a user-friendly Python interface, enabling rapid prototyping and analysis.
- The system supports the computation of standard phylogenetic topology metrics, such as Robinson-Foulds distance, directly on evolving in silico trees.
- The dual-language design successfully balances high-performance computation with accessible, high-level scripting for researchers.
- The libraries are production-ready and designed for seamless integration into existing digital evolution frameworks via a clean, documented public API.
Better researchstarts right now
From reading papers to final review, dramatically reduce your research time.
No credit card · Free plan available
This review was created by AI and reviewed by human editors.