Breast Stroke 1373KB |
Corkscrew 1 2064KB |
Corkscrew 2 911KB |
Dolphin-Snake 753KB |
Flipper 1048KB |
Flipper-Snake 882KB |
Hammerhead 2755KB |
Long Nosed Snake 942KB |
Tadpole 1343KB |
Two Legs 964KB |
Worm 1304KB |
Archer 680KB |
Arrowhead 3313KB |
Crab 708KB |
Crab-Dog 1888KB |
Spider 2398KB |
A technical description of the system's design can be found in Sims' papers, but the general idea is as follows:
Each creature is built up from a genetic description which is written as a nested directed graph. The genetic information describes both the creature's morphology and its control architecture. This representation provides modularity to the mapping from genotype to phenotype, and naturally leads to features such as duplication and recursion of body parts. One difference between our work and Sims' is that we used cylinders with hemispherical ends ('sphyls'), rather than cuboids, as the basic body parts, because it is much easier to do collision detection on sphyls.
A run was started by randomly generating a population of genotypes. Each genotype in turn was translated into a physical creature, and then evaluated in a physically simulated environment for its performance at a given task. We used two basic environments, sea and land, as demonstrated by the example creatures presented above. The sea environment included a simplistic model of fluid drag, while the land environment included gravity, a ground plane, and frictional forces for ground contacts. We used a number of different criteria for scoring the success of each creature in its environment, but they all basically rewarded creatures for movement.
The first, randomly generated population of creatures typically performed poorly at the designated task, although a few would, by chance, have some degree of success. Each creature was scored according to its performance, and when all creatures had been evaluated the population was ranked according to score. The best individuals were kept to form the basis of a new generation. This new population was filled up by adding mutated forms of these best genotypes and genetic crosses of pairs of genotypes.
By repeating this process, efficient creatures evolved surprisingly quickly. We typically used populations of 300 individuals and ran the experiments for 50-100 generations. A single run of this size would take between 4-8 hours on a single PC.
One of the nice properties of systems such as this is that each run generally produces a very different result due to the stochastic nature of the evolutionary process. We only selected for high-level behaviours such as the ability to move forwards, but within the vast space of different creature designs describable with the genetic system used, there are countless forms which can competently perform such behaviours. The evolutionary process is therefore a tool for exploring interesting regions of this vast space of creature designs; it is a creative machine for generating suitable and interesting forms and behaviours, not limited by the preconceptions of a human designer's imagination.
Document last updated: Tim Taylor, Wednesday, 14 August 2013