What you're looking at
Four founding .rappter.egg genomes were minted with maximally distinct trait genomes.
A deterministic merge function combines two parents' genomes into an offspring; mate selection is driven by trait compatibility (sweet spot at ~50% divergence).
The simulation ran for 50 generations with environmental selection that shifts every 10 generations.
The result: a phylogenetic tree showing which traits dominated, which went extinct, and how the four founder bloodlines mixed.
Founders (Generation 0)
Population & Fitness Over Time
Founder Bloodlines (Survivors at Final Generation)
Trait Outcomes
Allele Frequencies Over Time
Click a trait to see its allele frequencies evolve generation by generation.
Phylogenetic Tree
Each column is one generation. Each dot is an individual. Lines connect parents to children. Colors blend by founder ancestry.
Final Survivors
| ID | Gen | Fitness | Genome |
|---|
The Merge Function
Pure function of (parent_a_id, genome_a, parent_b_id, genome_b, generation). Same inputs → same offspring on any machine.
def merge_genomes(parent_a_id, genome_a, parent_b_id, genome_b, generation, mutation_rate=0.04):
"""For each trait:
1. If both parents agree, that allele is inherited.
2. If they disagree, more dominant allele wins 70% of the time
(deterministic via SHA-256 of parent IDs).
3. With probability `mutation_rate`, a random valid allele
replaces the chosen one (also deterministic via SHA-256).
"""
Implementation: scripts/egg_phylogeny.py