Devblog #20: Let's Try to Solve Evolution

EDITOR'S NOTE: Before we begin, we're happy to announce that the release candidate for Thrive 0.4.2 is now available. Download and post your bugs/thoughts here, and while you're at it, scream wildly into the void as your hype for the upcoming release consumes you here. Now, back to regularly scheduled programming.

Hey guys, Nick here, and today we've got an update for you on one of the essential components of Thrive, evolution.

The oldest unanswered question of Thrive's game design is: How will we create an evolution simulation that is both realistic and fun? It was one of the ideas that originally inspired the game, and it is one of the fundamental selling points of the first half of Thrive. Yet, it's still a looming obstacle that we have just never been able to overcome.



I think this algorithm looks great and is important progress, as it is fundamental to Thrive (which you noted in the post). My current largest concern is that this evolution algorithm has no evolution, i.e. its species’ characteristics are static. As you noted, however, that will be addressed in a future rendition, so my concern is moot.

I wonder how the algorithm will handle creatures in different media. Swimming, running, flying, burrowing, etc. require different adaptations. The algorithm, of course, will need to be very general in order to accomodate all in-game environments (including ones dynamically produced by the game, presuming that will someday be possible). As such, the algorithm probably shouldn’t have a section where something too specific is calculated (e.g. wind speed), as that would only be applicable to some organisms and result in unused calculations for many organisms. This algorithm will be the law of evolution in the Thriverse, and it I think it should avoid being like Napoleonic law (i.e. making separate and specific laws for every situation instead of vague laws that can be broadly applied).

An animal with only flippers and no legs should not do well on land, and the algorithm needs to be able to simulate that without knowing about land or flippers. I suppose a general stat called “movement speed” could be introduced, but even that would be needless for sedentary organisms. Autotrophs don’t need to move to find sustenance (excluding minor movement like a sunflower turning to face Sol), while heterotrophs must move. How can an algorithm be made that accomodates both groups while minimizing needless calculations? Also, whenever categories are made, exceptions usually appear. A venus flytrap, for example, both photosynthesizes and catches prey.

I have no answers to the ideas I am presenting; these are merely thoughts I had while reading the thread. I have not thought of a way to write such an algorithm, but I am at least certain that it should be as general as possible in order to create complexity via emergence, not scripting.


This is all very exiting to see, and I can’t wait to see how this progresses.
I have to wonder how you’ll calculate the overlap of species in separate environments. A species may encounter a number of other species, but isn’t likely to encounter every member of those species, nor is every species likely to encounter every other species.
Perhaps this will be calculated though average distance. Assuming how often a species member would encounter a member of another species and calculating interactions between them at that point, making it so species interactions on the other side of the world would be impossible. Perhaps mode of movement would also dictate the amount of interactions different species would have.

I’ve been discussing this with Nick - “can I reach the target?” is the first question for determining predation.
One generalized condition could be “defense” - run a combat simulation for the two organisms if they are aggressive past a certain point and weight it based on the chance to encounter. This would also simulate the more common case of territorial animals - the outcomes being that one organism either flees, or gets eaten (when there’s a huge combat stat disparity, and the creatures are of similar mass)
Since flies are fast and aerial, they encounter a lot of organisms - including the venus fly trap, which will get a lot from eating it.


Intraspecific competition at this stage in the auto-evo algorithm is zero-sum (there’s no fighting, just races for resources). Heading directly for any food that can be reached is the best strategy. Nutrients received within the population of a species should follow a nice statistical distribution, and otherwise intraspecific competition can be disregarded.

Whether the portion of the species that doesn’t get enough food is just killed off or whether some kind of hunger factor is tracked from month to month is essentially up to the preferences of the creator (Nick).

Also, did anyone else find it odd that efficiency wasn’t included in the swimming speed calculations?

1 Like

There is fighting though? It’s not within a cell’s own species, but cells can and will attack other species they can attack. (Hell, up until recently they’d even try to attack cells they couldn’t attack)

The auto-evo algorithm presently doesn’t include fighting. That will be added in later.

I see, I thought you meant it the other way, since you used ‘can be assumed’

I’ll edit to make that clearer.

What do you mean efficiency? Like muscle efficiency?

1 Like

The efficiency of the swimming action itself. Not all of the energy of the movement will be translated to forward thrust; some of it gets lost in the form of eddies and whatnot. I imagine the efficiency would be quite low for an undulating sphere; it’s about 9% for a cup shaped jellyfish.

Oh yeah, I forgot to mention but that’s something I’ll introduce when I expand on swimming to introduce the different types of swimming.