Lots of good ideas here. I’m wary about choosing “critical developments” though I feel like the end result of a system like that is a far less interesting batch of species, because if we arbitrarily choose toxins as a critical development (and arbitrarily choose other “critical developments” what happens is we always get at least one species that is totally specialized to shooting toxins. I want to have a fundamentally different batch of species each world. Critical developments reduce variety,
Very interesting ideas here! To add my two cents I would like to add what if two different species, under very rare circumstances both mutated into the same species? Would they become the same species or different species but with exactly the same organelles? And how would this be represented in game, how would it affect the binary tree and population?
I think this happens quite a lot in nature, it’s called Convergent Evolution. For example flight has evolved 4 times seperately in birds, bats, pterosaurs and insects. So I think it makes sense to keep them as seperate species that just happen to be similar. The more organelles we have the lower the chance of two species being identical, but under the same evolutionary pressures they may well end up very similar.
Oh yeah, for sure, convergent evolution happens in 0.4.0 already, you could have two differnet genuses and they end up looking very much the same after a few steps right now. I’ve seen it happen quite a bit.
One fun thing ive seen evolve alot is bacteria without anything other then cytoplasm evolving to have really high alpha so that they are almost invisible if you are playing as a species that hunts bacteria alot and arn’t being observant.
I find it pretty humerous whenever i see it happen. And i see it happen alot.
ive also seen some species transition into super aggressive predators from something super docile. And the evolution of toxins so that things dont eat them (because if they eat them the toxins are released) Eg, teh species wont use them at all, they will just have them. (Because its factored into wthey something tagets them, in the predator/prey calculations, and me avoiding eating them lol)
On the subject of species splitting what I’ve got in the OP is what I’m currently thinking. That if there is a single species in a patch it will split over and over until the patch is full of life, species with a very low pop will become extinct. Also if there are neighbouring patches sometimes there will be a split and some part of your species will get moved to the neighbouring patch. I think this sort of splitting is relatively close to what @Untrustedlife is already doing, though feel free to correct me if I have misunderstood.
If anyone has other ideas or contributions to species splitting feel free to post them. This stuff is slated to be implemented this patch so now is a good time to speak up if you want any changes made.
I haven’t fully thought this out but I think species splitting shouldn’t be based on the population.
Some other ideas I’ve had:
- Species splits when a part of the population is cut-off from the rest. So if you have 1 species spread to 3 patches and the population of it goes to (near) zero in the connecting patch then both of the populations in patches 1 and 3 get converted to new subspecies.
- A species is split when it has good amount of population, some time has passed since splitting, and auto-evo ends up creating 2 almost as viable mutations. So at that point the main species would take 1 of those and a new subspecies would be created from the other mutation.
- And then there could be some niche detection where separate niches would bet split into different species. I think this is the most similar to just “have a large population to split” approach, but also a lot more involved.
These are much more difficult to implement and depend on a proper auto-evo implementation, which isn’t going to be in 0.4.1. So these can’t be implemented yet, but this is the direction I’d want to take species splitting.
I think species splitting inside a patch is realistic if we want to use it, it’s called Sympatric speciation.
I’m not sure what niches means in this context, could you explain a little more about it?
You’re not the first person to talk about having a single species spread to multiple patches. I may need to relent on this one. I think my questions about it are:
if every species is only in a single patch then we can run auto-evo and population calculations separately for each patch, however if there are single species which exist in multiple patches then we need a more global system
with auto evo what if the species is being pulled in two different directions? For example if a species is in two patches, one which has sunlight and another that doesn’t and auto-evo recommends a chloroplast that seems quite unrealistic for the part of that species that doesn’t live in the sunlit patch.
If anyone has a clear idea how to get this stuff to work I am open to it.
I think that’s what I mean. I just didn’t have the words to describe “living in the same space but managing to split the breeding population”.
This would be one of the places where auto-evo should split the species, by finding two mutations that greatly benefit different parts of the population. Thanks for finding a concrete example for how my idea could work.
My thinking is that each species doesn’t have a global population, only population per patch. So the calculations would only be different in terms of how the effectiveness of a change for a species is calculated, and the migration as I’d like that a species that has low population in some patch but high population in a nearby patch would “reinforce” its numbers from the other patch, and this would be way more common than other migration attempts. And with the effectiveness calculation it would get the overall best mutation for all the patches it inhabits or as I said before the species could split with regards to some criteria.
I think maybe there isn’t so much difference. For example if population and auto-evo are run per patch then the difference is that either you split the species when they transfer patches or you split the species when auto-evo starts diverging them, the result would be similar I think. I can see that having a species across multiple patches would be cool.
One thing is a species could spread to 6 patches and then 3 of them could break off to form new species so it means a binary tree wont work, it needs to be a non-binary tree, which makes things more complicated to implement but not hugely I guess.
I’m looking forward to handing this off for implementation so if you’ve got ideas you’d like to add then go for it. I’ve got the plan in op of this thread and the energy based auto evo here. Hopefully that is enough for a tier 1 implementation and I’m also happy to discuss stuff.
Im not sure that allows for evolutionary radiation
I think that it should be possible for single species to split off multiple subspecies in a patch that take on different niches there. EG if one creature does really well a in a patch and there are many niches available it should be able to split off into those different niches, i think it would make each patch more unique and be more realistic.
Ok I thought about this some more, I think there is something we could do which would give more people more of what they want.
For this post I’m going to rename what is a “species” in the op as a “sub-species” and it just means a group of identical individuals that live in one patch.
I think auto-evo should be run per patch on each sub-species. I haven’t heard any suggestions of how to rewrite it and I am not keen to make it take account of multiple patches because that sounds like a computational nightmare. Each timestep the population of every sub-species is computed in each patch based on the conditions and interactions only in that patch.
One layer up we can have species. So each sub-species has an “species template” which is the organelles that the ancestor that started their species had. Then each time a sub-species is mutated by auto-evo it checks to see how different it is from it’s species template, if it is similar then it is still considered as the same species, if it is sufficiently different then it starts a new species with itself as the new species template.
For example the first sub-species is a single hex of cytoplasm and it’s “species template” will be itself. Maybe this species evolves to add a flagella, then splits into two, then one of them gets another flagella and the other gets some chemosynthesizing proteins but both are still considered the same species. Then maybe the first half gets a pilus and now that it has 2 flagella and a pilus it’s too different from the single hex to be considered the same species anymore so it gets made into a new species with itself as the template. The other half, which has just one chemosynthesizing proteins is still considered the original species.
This would mean that a species can be a larger thing, there can be some variation between sub-species, even in the same patch, however all the sub-species would be related and pretty similar. It would also allow species to spread out over many patches.
Above this we could have other layers, each sub-species could have a “genus template” in a similar way where it is allowed to be further from it before starting a new genus. We could have as many layers as we want.
I think this would give us single species across multiple patches in a pretty simple way which wouldn’t be hard to implement. It would keep all the sub-species interactions local which makes things easy.
Anyone got input? All feedback welcome.
Thats sounds like a great, and deterministic, way to know when a new genus splits and when new species emerge.
While @tjwhale s propoposed system will work great for now, I‘ve come up with a slightly more complex system for the midterm future that offers some advantages in my opinion. I‘d love to hear some feedback. Is it doable or is it too complicated? Do you see the advantages it may offer?
species splitting dynamics.pdf (86.5 KB)
I didn’t read the discussion on discord and I didn’t spend a lot of time reading that pdf, but here’s some points.
This seems very similar to what I suggested. And this doesn’t really address the most difficult calculation: how is the usefulness calculated. My idea solves that by making random mutations that can then be simulated forward in time to determine how good it is.
So I’ll reiterate the main points about my idea:
- Species can have populations in many patches
- Each species is simulated with 5 (roughly) random mutations and their usefulness is calculated based on how much they would gain population overall against other species.
- Based on the usefulness of the mutations the main species will apply the most useful and then the species may split if there is a second very useful mutation.
A few amendments to my idea that I
stole got inspiration / idea for from your plan:
- Each patch’s population tries to send some population to a random connected patch. This will either reinforce the population of the species in that patch or create a new population in a patch which might succeed there and gain a foothold.
- The chance of splitting the species increases as the global population increases.
- It is possible for the species to split in only one patch if it has relatively hugely beneficial mutation it can take there. Otherwise the split would be in all patches at once if there isn’t a mutation that greatly benefits only a part of the species. So for example if the species is trying to establish a foothold in a hydrothermal went and it is also in a bunch of other patches then if one mutation is a chemoplast it would be almost guaranteed to split to a new species in that went.
I’m still convinced my idea (with possible tweaks) is the best one
And while I appreciate this discussion, even if I don’t have the time to properly participate all the time, I think we just have to go with a basic implementation (my idea is good also in that regard that it doesn’t require much that other ideas wouldn’t also need, so no much wasted work) and then see concretely what these different suggestions do to it. So we could stop speculating as to what works, because we all have no experience in making an evolution simulation, so our intuition and ideas are probably not spot on.
I agree with this. I’ve had enough of discussing it as I think we don’t know how it’s going to feel yet. Lets just implement something simple and then iterate on it.
I had an idea last night which might work to keep species together a bit. If you make a species a group of groups which are in multiple patches then when auto-evo works on that species is runs 5 mutations in each patch locally to see the impact on the species.
Then, from the mutations which were beneficial, it chooses the largest subsets of the groups it can, in order to try and keep the species as blobby as possible.
So for example imagine a species is in 5 patches and the mutations tried had results
no change = control
chloroplast : +4, +3, +1, -1, -5
flagella : +1, +1, -1, +2, +2
pilus :+8, -1, -2, -1, -1
In this situation if auto-evo is run only locally, patch 1 will get pilus, 2,3 chloroplast, 4,5 flagella which would split it in to 3 species. If you just average the results the pilus wins in all patches even though it is detrimental in 4 of them, which is mad.
However the largest subsets algorithm would pick flagella for patches 1,2,4,5 and then chloroplast for patch 3. This means it only splits into two species AND every group in every patch definitely gets a beneficial mutation for it, so it is reasonable that it is adapting like that.
The drawbacks are some really beneficial mutations get missed out on, like the +8 pilus is not chosen, and it’s still a bit “spooky action at a distance” because the mutations are being chosen based on patch conditions in other patches however it might be reasonable.
This would be a way of having a species be made of identical groups in many patches, have them all adapt only to their local conditions and try to keep them together for as long as possible.
Exactlly, the way it works right now with populations that go up and down based on successful hunts/death/reproduction etc and split at certain amounts and go extinct at certain amounts, are essentially a stopgap measure for calculating “usefulnes” and if we want to make this work for multiple patches, we need a system that can calculate usefulness and it should do so in a non-biased way (we shouldn’t assign usefulness ourselves because our ideas arent nessessarily the best ones, thats the whole point of an evolutionary algorithm). The reason being s that we cant do proper Darwinian evolution, in a way that would not kill a computer at the moment (at least in thrive, this can be explored easily in smaller simpler games)
Here is some discussion from the discord.
OBPSGToday at 01:01
-In response to the concerns that making migrating between patches incur a Muation Point would force the player to choose between expanding to a new patch and improving their species, I propose avoiding that issue by adding a new currency related to migration, let’s call it migration points for now for simplicity. The way this currency works would be similar to as follows: Each species (including the players’) automatically generates a certain number of migration points based on its total population across all patches at each reproduction cycle/auto evo step. Then when a species wants to colonize a new patch, they pay the cost in migration points associated with the link that gives them access to that patch. This dynamic would allow more successful species to spread across patches faster. We can work out the details for calculating migration point costs of each type of link later, and add additional evolutionary restrictions if we would like.(edited)
Goro von BismarkToday at 01:13
wouldn’t it be easier if that currency was directly the species’ population?
If you migrate to another patch half of your cells go to the new one, spreading your species thin
But over more patches
crodnuToday at 02:24
Maybe we could make it so unsuccessful species get more mutation points and more successful ones more migration points?
1n48ygToday at 03:05
I agree with dividing the population when migrating to a new patch. Because at the scale of microbes, when migrating to a foreign environment, the changes that happen to your cell to adapt to the new environment are probably significant enough to label your new cell as a seperate species from the predecesor it evolved from.
TJWhaleToday at 09:23
I think species spreading between patches has been quite a controversial topic, there was a long discussion here with a lot of different ideas.
What I’d suggest is for now we do the simplest possible thing to get the system working and then we play with it, see how it feels, and iterate to make it feel better. Towards that end I’d suggest for ai species simple select some at random to split and move patches each time the player enters the editor. Let me know if that is not easy for any reason. For the player I think we should just offer them the chance to split every editor session if they want without restriction. If this turns out to be too much then we can have a currency to limit them, or limit them based on population etc. However we don’t know yet how often the player should be able to split, every 2 editor sessions, every 3, 4, 5 etc? The idea of a splitting currency is an interesting one if we need it.
Goro von BismarkToday at 09:32
There should be a risk when spliting to new patches so the player has to make sure to adapt to them first. Loosing a good chunk of your pop when traveling to a hostile patch is a good threat to adapt imo