Here is a brief explanation of how auto-evo currently works in the game. The current implementation is just a prototype and needs a lot of work.
On the outer layer when a species is evolved 5 copies of the patch are made, a change is made in 4 of them, and then best performing patch is kept and the others are discarded.
On the inner layer there’s a function which takes in the list of species in a patch and their “blueprints” (list of organelles they have, what membrane they have, any behavioural values they have etc) and the patch conditions and returns a population value for each species.
This is done in 3 stages currently:
First the primary energy is distributed:
For sunlight: add up the total number of sunlight collecting organelles in all species (thakyloids + chloroplasts currently). Each species is then given a fraction of the incoming sunlight energy based on their fraction of this total which they have.
For example say species A has 3 chloroplasts, B has 2 and C has 1. Then there are 6 chloroplasts total in the patch. Therefore A gets 50% of the sunlight, B gets 33% and C gets 16%.
This is then repeated exactly the same way for the other primary energy sources, iron and hydrogen sulfide. (I’m not exactly sure what is happening with free floating gluces and “marine snow” but these should be factored in here too).
Second there is a predation round:
So each species contributes half the energy they have collected into the “predation pool”.
Then likewise you go round and compute the “predation score” of each species and the sum of all these predation scores for the whole patch. The predation score is currently something like “number of pilus + 2x number of toxin vacuoles or something.”
Then species are given the resources in the predation pool proportionally to their fraction of the total predation score, so it works the same as before but the weapons are seen as the resource collecting organelles.
Thirdly each species computes it’s “individual cost” which is the number of organelles it has to the power of 1.3.
It then computes it’s population which is the amount of energy it collected divided by it’s individual cost.
So basically this is to encourage species to reduce any organelle which isn’t actively helping them get more energy and to keep them streamlined.
So yeah that’s how it’s working at the moment.
Some problems are:
The population numbers never go to 0, so long as a species has some way of getting energy they will always end up with >0 population so there should be some threshold or something for removing them.
Not that many organelles are factored into this scheme, for instance how to include the nucleus or nitrogen fixing plastid?
The predation system is really super simple, it would probably make more sense to try to compute how good each species is at runnign away and also how good it is at fighting to give small ones a chance to evade big, heavily armed, ones.
I am concerned, though we haven’t tested much, that all the species might end up super small, if the 1.3 power on the individual cost is too high.
There are only 2 trophic levels and it would be nice to add more for scavengers and higher order predators I think.
However on the plus side this approach is super fast, we can run hundreds of planets with hundreds of patches with hundreds of species no problem.
I think it is also a reasonable basis for adding in more complex ideas. It conforms the species to the patch conditions, for instance in a patch with no sunlight all thakyloids and chloroplasts will disppear, in a patch with a lot they will appear.
I am really happy for any of it to be redone or changed. And I’m really happy to answer any questions or explain more.