Creature Evolver

Click on the images below to view animations showing the creatures' movement

Ever since I first saw Karls Sims' evolving creatures project I have wanted to replicate and perhaps expand on it. However, the computing resources required for a physically accurate three dimensional simulation have not been available in a personal computer until recently. My first attempt at a similar program was Stickers. Stickers was two dimensional, had no collision detection, and only attempted (badly) to replicate the physics of swimming.

After Stickers, I still wanted to work in three dimensions and with good physics. In 2003 I discovered Breve, by Jon Klein. Breve provides a three dimensional rendered simulation with an underlying physics engine (the open source ODE). Using Breve and personal computers with a degree of power that only became available at about the same time, I finally had the system I had desired for so long. Creature Evolver is my second attempt (where Stickers was the first) to produce the evolution of both physical morphology and an underlying neurology to control that morphology, in other words to create fantastical imaginary creatures that move in realistic believable ways.

The phenotypic structure of a creature consists of a set of rectangular blocks, jointed at the centers of opposing faces with either one, two, or three degrees of freedom in the joint (or potentially zero degrees of freedom for rigid joints but I haven't implemented that yet). In Sims' model, blocks could be joined anywhere on any face. In my system I limited joints to the centers of faces just to keep things simple. The topology of the blocks is always ultimately tree-like, with five possible directions in which a block may potentially have one child, on each of the five faces that does not correspond to a block's "parent" face, the face attaching a given block to the block that is its parent. Obviously, the root block has no such parent face.

The phenotype also includes a neural structure. Each block can house a small number of neurons. These neurons can receive signals from other neurons in the same block or in the parent block or in any direct child block, in other words in any phenotypically adjacent block. In this way the potential is in place for signals to propogate throughout the body. A single neuron might be a motor actuator as well, which means its output signal drives one of the available degrees of the freedom between the block and the joint to the block's parent. The root block has no such actuators since it has no joint to a parent. I was planning on adding physical sensors that would enable a creature to sense things about its environment but I haven't done that yet.

The genotype is a directed graph very similar to Sims' original design. The genome has a set of block descriptions. Each block contains the physical dimensions of the block and connections for its child faces that point to other block descriptions stored elsewhere in the genome. A connection may point back to the same block as well, in order to produce recursive phenotypic structures. In addition, each block description contains a description of its contained neurons. One block is designated by a particular gene to be the root block. A phenotype is grown outward from that first block by recursively generating phenotypic expressions of genotypic block descriptions. Notice that this design generates phenotypes in which each phenotypic expression of a block has the same neural structure associated with it.

To evolve the creatures I ran a fairly basic genetic algorithm with the primary source of fitness being linear distance traversed in a given testperiod. Most runs do not produce very interesting forms of movement. I believe that stricter constraints on the legality of resulting physical structures would alleviate this problem to some degree. Reproduction was a combination of sexual reproduction of directed graphs in a fashion similar to Sims' along with mutation on the offspring.

As you can see from the movies presented here, I was able to evolve a few fairly interesting creatures. What I would like to do is more narrowly constrain the simulation so as to reject most of the boring creatures and then let a seething ecosystem of multiple creatures live and evolve simultaneously in a large world. At the moment, this dream is quite beyond the capability of a personal computer, but in the near future such a vision will be possible.