chrxh / alien

ALIEN is a CUDA-powered artificial life simulation program.
https://alien-project.org
BSD 3-Clause "New" or "Revised" License
3.48k stars 106 forks source link

Adding a phylogenetic tree? #94

Open Gardene-el opened 3 months ago

Gardene-el commented 3 months ago

This is a feature request/suggestionl in order to better visualize and track the mutations.

I suggest that add a phylogenetic tree to show every mutations and their relationship in simulation on the statistics window. Once a mutation happened, it will be recorded into the phylogenetic tree. For the details of phylogenetic tree and it's naming rule, I suggest:

Presume a speices X, any mutation happened on X's offspring, add a branch on X on the phylogenetic tree. Assum it is the nth time of mutation. Name the subspecies of the nth time of mutation of X X-n. Hence for the mth time of the mutation of X-n, name it X-n-m. For easier use, I suggest that using Base62 numbering system, also allow user to make custom name instead of X-n-m-z... on display.

If it is excessively consuming resources to store the phylogenetic tree, maybe adding a check to decide if adding a new branch. For example set a standard genome for each branch, if the genetic difference between the offspring and the standard genome of this branch exceeds a certain preset standard deviation, then compare if it exceeds other subspecies preset standard deviation then decide if determine it to be a new species or add it to the compared subspecies.

On query aspect, I suggest that user could find a creature's position on phylogenetic tree by itself in simulation, also could highlight all creatures with specific position on phylogenetic tree.

On display aspect, the phylogenetic tree maybe look like this:

    CustomName-qwert123-asda

    X-CustomName-0
     |     |-1
     |-sada
     |-fafs-0-weq-0
               |-1

I suggest that make it able to expand or collapse some of them, like collapse all extincted, collapse all only one generations.

chrxh commented 3 months ago

Thanks for the suggestion! I agree that it would be a great feature. What you have to consider, however, is the extreme amount of data and how manageable the visualization would be. You can already run simulations with 100K individuals for tens of thousands of generations. This results in a huge phylogenetic tree (with possibly millions of entries). As a user, I would interested in reverse tracking: For example, I have a certain individual and would like to have all the mutations listed that led from the initial state to it.