The first session I attended at ECAL2015 was the Open Ended Evolution (OEE) session.
It was one of the most interesting sessions, on par with the “Measuring Embodiment” session. Yet I didn’t start thinking seriously about OEE until 3 days later. It happened because of an accumulation of little nudges from totally unrelated talks. One game-theory speaker mentionned that their simulation used ongoing evolution, as opposed to some other genetic algorithms that choose the best individual and kill all others at the same time. A researcher in artificial biology said that parasites created ecological niches. I had a small discussion with my professor about the definition of “environment” in real and artificial worlds. And in the middle of Justin Werfel’s keynote about evolved death, I was suddenly scribbling a plan for a simple OEE project.
Open Ended Evolution
It’s easy to have tons of ideas when you’re illiterate in a field, like I am towards OEE: I don’t know what other people did before me, what worked and what didn’t, so each of my ideas sounds OK to myself. It’s easier to start something when you’re ignorant, than when you know how many people with smart ideas have already been working on the same problem (and failed). So today I will organize my ramblings here, before I become unable to read my own dirty notebook. I haven’t surveyed the field, which is not good; but I always prefer to build plans first and survey after – it gives me an idea of what I should be googling for. And it prevents me from being de-motivated before I have even started anything!
But first, what does OEE mean? If there’s one thing I learned from ECAL, it’s that nobody agrees on definitions except when they’re translated into clean mathematical equations.
There is no equation for OEE. A lot of people agree that Earth is probably an Open Ended world. It means that from the time life appeared, it has always grown more and more complex with time, constantly producing new innovations. Today we have very complex forms of life, which appeared from simpler forms of life as an effect of evolution and natural selection.
The dream of OEE researchers is to build such a world in simulation. But it is much more difficult than it sounds: judging by the critical talks at ECAL, no one so far has been able to build a simulation that produces more and more complex beings with novel adaptations. Or at least no one seems to have convinced others that their own model leads to OEE. What usually happens is that the simulated world evolves fast at first, then reaches an equilibrium where you no longer get innovation or increased complexity. There usually exists such a state, where each species reaches a fitness value that allows for equilibrium, and stays there. Imagine a world with only wolves and sheep. The wolves might evolve over generations to run faster and faster to catch as many sheep as possible. But if wolves kill all the sheep because they are so fast, with no more preys to eat they will starve to death. And your world will have no more sheep and no more wolves. A different species of wolves, living in a different world, might be eating enough sheep to survive but not so much as to make the sheep go extinct. Maybe the wolves are getting faster, but so are the sheep, allowing for an equilibrium. In both cases, you do not achieve OEE. The first world is dead; the second one has reached an equilibrium.
There are some hypotheses about why it is so difficult to achieve OEE. The oldest and probably most popular one says that simulated worlds are not complex enough. In the real world, you have millions of species interacting with each other, competing, collaborating, forcing life out of any long term equilibrium.
Therefore if we could build an extremely complex simulation with lots of computers, maybe we would get OEE. Some say that computational power is not the issue – maybe we just haven’t discovered yet how to design simulations allowing for OEE, and in that case using more computers will not solve the problem. Some say that the issue is not unbounded complexity, but unbounded novelty. But we don’t have unanimous definitions of “complexity” and “novelty”.
My own problem is the concept of “environment”. In many simulations, you have species of interest (like wolves and sheep), and around that you have “the environment”. Often, the environment is not submitted to evolutionary pressure, and sometimes it cannot be modified by the species. I am not quite sure why it is like that. Of course in real life, “the environment” is constituted by other organisms who also undergo evolution, and of non-biological features that can be affected and can affect the organisms around it.
My second problem is the concept of “fitness”. The fitness is a measure of how well adapted an individual is to its environment. In virtual worlds, evolution (almost) means that the fittest individuals will have more chance to reproduce than other less fit individuals. More often than not, it means that the species will reach an optimal, stable value of fitness (at which its stops evolving); or the fitness will oscillate around a constant value. I think it could be interesting to run a simulation where the environment would be subjected to evolutionary pressure, and where long term optimal fitness would not be reachable.
The second point is of course, the most difficult. We could start by making fitness an extremely local property – both in time and space, creating niche environments. Firstly , we could make inter-individual interactions such as to prevent any “good global solution” to the problem of survival. Secondly, evolution should be biased as to make mutants from newer species “fitter” than mutants from “old” species, without any reference to “complexity”. Finally, to ensure that the world would never be stuck, evolution should focus on affecting a net of inter-species interactions and the properties they rely on.
So here is the model.
First, I do not define species. Speciation will emerge from the model, as you will see. But for the sake of clarity, just in this explanation, I will give names to some groups of individuals. The static part of my “environment” is just a map (Hey! You’re doing exactly what you said isn’t good! (Not really, see next paragraph. But yes, I will change that in the next draft)). A 2D space with a grid and cells, like cellular automatons, very classical. The rules of the model are: there are individuals on the map. Each individual can store energy. An individual with 0 energy dies. Moving to a different cell requires speed and costs energy. Producing offspring costs energy. Sensing costs energy. Energy can be gained from parents when being born or by eating other individuals (but eating also costs a small amount of energy). Each individual can have simple “sensors” to detect other individuals who are on the same cell: a map of conditions on “others” to actions (if “property”=”value” then “act on individual”; example : if max energy<7 then eat individual). The complete set of actions is eating, mating, running away. If two individuals try to eat each other, the one with highest current energy level will win. New individuals are produced by cloning (with a probability of mutation) or by mating (randomly mixing the properties of parent individuals) when the parent(s) energy has reached its max value.
(Beware, in the following I absolutely do not care about the realism of the simulated world – light is born and dies, reproduces and turn into animals.)
At the beginning of the world, I place on some patches of cells (not all cells) individuals (one per cell) with these properties: the individual cannot move, has a random lifespan and stores a maximum of 1 unit of energy. If for some reason one of these individuals disappears from a cell and the cell is left empty, it is immediately replaced. Because each of these replacing individuals is essentially born from nothing, they represent a constant source of free energy in the model – I call this group of individuals “light”. Light is defined as: [speed=0, max energy=1, current energy=1, number of offspring=1, reproduction cost=1, sensors=[if max energy=1, eat], lifespan=random]. The reproduction cost defines how much energy will be transmitted from a parent to its offspring. You can see that when a “light” is born at a timestep, it has already reached the reproduction cost. It will therefore produce an offspring at the next timestep, but then (current energy – reproduction cost) will be 0 and the individual will die. In short, each light individual will clone itself and die at each timestep. Furthermore, light can eat other light that appears on the same cell but it has no effect except preventing 2 light individuals to exist on the same cell. (which will “eat” which is decided at random – either way the winner’s current energy cannot change and become greater than the max energy.)
Mutations randomly happen each time a light individual is cloned. Mutations can increase or decrease the max energy, the number of offspring, the reproduction cost, the sensors map. It is easy to see that in these conditions, the only set of mutations that can at first lead to a viable branch of individuals is an improved energy storage (max energy = 2). These mutants will then often be able to eat the “normal” light, as they can store more energy. This branch gets energy from light, stores it, reproduce but does not move – I call it grass. Of course, it is not a proper species – it is not very different from normal light and a mix of the two, if they mated, would still be viable.
The next successful mutation could be storing more and more energy (leading to slower reproduction but competing with grass for light resources… shall I call it trees?), having more offspring, or more interestingly, moving. Moving costs energy, but it is also a good way to store lots of energy without having to wait standing at the same place. Storing energy fast would allow the individuals to afford more sensors, more offspring who are born with higher energy levels. On the other hand, eating only light should not provide enough energy to move at reasonable speeds. Eating grass or tress would be better, but then you need a mutation in your sensors to be able to detect grass.
This group could be our first herbivores – since it costs less to have 1 sensors than 2, completely herbivore species would likely be more successful than species having a sensor to eat light and another to eat grass. If we let this world evolve for long enough, we might see interesting things.
First, you can see that evolution in this world is directed: grass can appear once, then trees may appear from grass, then herbivores appear from trees, but not the other way around. Secondly, the interactions do not rely on species identification. They rely on the properties of the individuals. You cannot detect a “species”, you must rely on detecting how much energy an individual can store, or how fast they can move. Therefore a strategy that was successful at some point in time and space might be(come) completely irrelevant in another niche or at another time: you can detect “grass” by its speed of 0 and try to eat it, but then come across a giant tree with speed 0, but much more energy than yourself (and you’ll die trying to eat it).
What could “open ended” mean in that world? I guess it could simply be the fact that what defines the state of the world at some place and time is only the interactions between individuals, and not the particular species existing there. Therefore there is a tiny hope that the world will continue to be “interesting” for some time, as each change in interactions (due to a mutation or to niche merging/niche division) would force the complete sate of the world to change.
Infinite possibilities for species or individuals is not necessary, as even a limited amount of both can lead to virtually limitless type of interactions between all different kinds of individuals.
A world about speciation in this simulated world. If we except the number of sensors, all individual have the same structure for their “genome” (the set of properties defining an individual). So any pair of individuals can, provided they can detect each other, reproduce and give birth to offspring that would inherit a mix of its parents’ genomes. But if the parents are very different, the offspring might end up with properties that does not allow it to survive. For example, a mix of “parentA’s low energy storage” and “parentB’s high moving speed” would die almost instantly by using all its limited energy at once.
Therefore, we can use the most basic definition of “species” in this world: if 2 individuals cannot mate, or if their offspring cannot reproduce, then the two “parents” individuals are from different species.
- So, could this world be open ended? Let’s be realistic: it is still a very simple simulation, and you shouldn’t count on 1 month of programming by an excited student to suddenly solve one of the oldest problem of ALife. So no OEE for you just now!
- Then what is interesting in this simulation? I think I will have fun seeing big innovations emerging (motion, reproduction…) and their consequences; it will be interesting to see conflict emerge between the big groups of similar individuals, and to compare the diverging evolutionary paths in two niches separated from each other. I predict that there will be mass extinctions (wolves invading a niche of sheep? leading to an invasion of grass? and the survival of only grass-eating wolves?), and even several false starts before I even see the emergence of herbivores. I am also curious to see how the different sensors will be combined to find a heuristic to the big problem: how to identify who I should eat/avoid/mate with if there is no proper concept of species in this world?
In conclusion… I have a fun project for this summer vacation.