Biomorphs

Biomorphs click to try

This is a JavaScript implementation of Richard Dawkins’ famous Biomorphs. Dawkins first described Biomorphs in his book “The Blind Watchmaker” and this implementation is loosely based on his original description.

Each biomorph has of a genome of 11 integers with possible values in the interval [0,20]. Each Biomorph is drawn as a binary tree. The drawing algorithm is influenced by the genes of the individual Biomorph being drawn. For instance, the first gene affects the depth of the tree, three of the genes affect the color of each level, and other genes affect the length of the segments used to draw each level.

The Biomorphs are organized to allow easy surfing through Biomorph space. The Biomorph in the center is the parent and those surrounding it are its offspring: copies which have undergone minor mutations. Selecting one of these offspring by clicking on it will make it the parent of the next generation and its mutated offspring will be shown.

Biomorphs implement a simple model of evolution. In this model, the user selects the individual that survives to the next generation purely for aesthetic reasons. Fitness is the degree to which the Biomorph pleases the eye of the user.

The “Random Monster” button at the bottom will create a parent with a random genome and show its offspring.

Some biomorphs may resemble insects, microorganizms, and all kinds of interesting objects.

Look at the source code for more detail.

I wrote a Biomorphs implementation ages ago when I was in college. It was a Java applet. I’m embarrassed to admit that I lost the source code to that implementation long ago but for so many reasons it’s probably a good thing that it’s lost forever. I always wanted to improve on it and in 2009 I had a free afternoon so I put together a new implementation in JavaScript. This implementation came together a lot faster than the original… partly because JavaScript makes it easy to build software like this and partly because at that point I had 12 years of practice since the afternoon in Cal Poly’s lab when I built the first implementation.