After I finished my postgraduate program at Transmedia Brussels in 2005 with Graphic Cellular Domestication I ran across Tom and Frederik from NodeBox, who at that time had been experimenting with genetic algorithms. By spawning new variations of itself, a genetic algorithm can figure out which variation is more likely to do better in the future, evolve to that generation, and so on.
A collaboration seemed like an ideal and fun way of combining my artwork with their code. The idea was to make the cells from GCD move around and evolve by themselves in a rudimentary "survival of the fittest"-style game. We conveniently dubbed this experiment Evolution. Evolution consists of two main parts: a factory and an arena.
The factory is the place where creatures are born and bred. Each creature is constructed randomly from a pool of components (or body parts). These components we stripped from Ludivine's cells and categorised as heads, tails, cores, flippers or tentacles. The way a creature is constructed determines its behaviour later on in the survival game.
The combination of randomised creature design and derived behaviour makes the environment entirely procedural: there is an endless variation of individuals and therefore an endless variation of behaviour and ways creatures interact with each other.
For example: a big head makes a creature smarter, imbues it with a cunning. This cunning allows the creature to employ better hunting strategies (ambushing and intercepting) or better evasive strategies (deception, hiding in the flock in the hope that the predator loses interest and starts picking on someone else). A tail makes a creature more agile, allows it to take sharper turns - a greater potential when chasing and evading. The complexity of a creature's body influences its fitness and its intelligence. Bigger creatures have a greater health and are more difficult to hurt, more complex creatures have a greater cunning. The drawback of being big is that you become slower and more pacifist. Flippers enhance a creature's velocity. Bigger flippers make a creature faster.
Finally, tentacles are a creature's main weapons. More tentacles not only look cool, but make a creature more ferocious and self-assured. Creatures with a lot of tentacles tend to be very aggressive. Combined with a low cunning you get a sort of brute that relentlessly keeps on chasing a prey. Combined with a high cunning you get a typical tiger-hunter that tries to ambush a flock of prey and hunts down the weakest creatures first.
Creatures then pit their strengths against each other in the arena. Here, they get to fly around, flock together, hunt down enemies, struggle for survival. Some creatures are smart and learn how to ambush or hide, others are very fast, others still learn how to fight together to defeat bigger bullies.
The creatures' motion is handled by a bird flocking algorithm written by Craig Reynolds back in 1987. This algorithm we expandend with strategies for chasing and evading, cooperation and hunting strategy.
Typically, a fight goes a bit as follows. The predator hunts down the flock of preys in search for food. Ideally, if the predator is smart enough, it will quickly try to single out the weakest individual and separate it from the others. The predator can then use strategic maneuvers like predicting where the prey will go next, or try to ambush it. The prey flock around together. They will try to outrun the predator. If they are smart enough and the predator is not too daunting they will attempt to fight back, or even work together in cooperation to beat it. Smart preys that are not strong may attempt to hide in the flock. The predator can discern individuals in a flock. It may decide to lay off and choose a new victim. Dumb preys mill around in confusion without a general strategy.
Let's have another look at the factory. Things get interesting once we have determined a number of creatures that have a high potential of surviving a hostile environment (the arena). These we can then use as ancestors to evolve new creatures that are better balanced and have a higher chance of rising up in the food chain. Internally in the programming code, each creature is stored as a little piece of DNA. Creatures are recombined using a genetic algorithm that constructs a new DNA from the information stored in both ancestors' DNA.
Eventually, countless generations should lead up to an unbeatable creature - unless it is defeated by chance (or rather by a stroke of misfortune). Misfortune (e.g. ice ages, meteorite collisions) is part of natural evolution too. It keeps the creatures alert.
Sadly, the Evolution project uses a rather poor physics model. The environment is vacuum, there is no water or wind that hampers motion. There is nothing to eat besides other creatures. Right now we are working on a gaming project called Creatures, a small ecosystem of evolving plantlife. This way, instead of the arena-like environment in which the Evolution creatures fly around, we have an ecosystem of plants for them to eat, hide in, or get eaten by. Plants will have properties similar to the creatures, for example the amount of sunlight they need, if and how they are edible, how they pollinate and which creatures spread their seeds, and so on.