In his book, The Blind Watchmaker, Richard Dawkins makes a powerful case for evolution, while debunking the all too common misconceptions regarding the role of “chance” in evolution. Dawkins shows that evolution is a fundamentally non-random process. Chance is important in that it provides a kind of “fuel” to this process, but it is the non-random role of cumulative selectionthat accounts for evolution’s creative ability. It is this cumulative selection operating on chance variations that allows complex, seemingly “designed” characteristics to emerge. To illustrate his point, Dawkins conceived of and programmed what he termed, “biomorphs.”In the FreethoughtDebater implementation of the Biomorphs program, there are 9 biomorphs on the screen at any one time. The center one is the “parent,” and she is surrounded by each of her 8 offspring.
Each biomorph itself is a drawing, the final appearance of which emerges from the cumulative developmental effects of that particular biomorph’s “genetic code.” Each biomorph has 9 genes, and each gene is some positive, integer value.
The biomorph’s genes control the “development” of the biomorph in a way that is analogous to the way in which biological genes control the development of an embryo. The biomorphs are drawn (developed) by a very simple drawing rule that keeps calling itself over and over (a process called “recursion”). The rule is something like, “draw a line this long in this direction; at the end of that line draw another line in a direction that is to the left of the first line’s direction by a certain amount; return to the start of that line and draw another similar line but now in a direction to the right by a certain amount.” Reading through this rule, you’ll realize that it draws a Y shape.
Now we could rerun that same rule twice more, but starting at each of the top ends of the original Y, which gives me two more Y’s sticking out of the tips of the first Y. I could then run it again for each tip of each of the new Y’s, etc., etc., always applying the drawing rule to the tips of all the Y’s from the last round. If you look at “Eve” in the middle of the biomorph screen, you’ll recognize this recursive pattern, where the rule “run the drawing rule on all the exposed tips” was applied 4 times. In other words, the “depth” of the drawing (or the “depth of recursion”) was 4.
Now, each gene affects the final form of the biomorph by determining such things as the number of times to keep calling the drawing rule (the depth), and how long to make the line currently being drawn, which is programmed to depend on the direction in which the current line is pointing. There are 8 possible directions (defined by dividing up a circle into eighths).
As you can image, this simple rule can turn a simply Y-shape into an extremely complex pattern, if it is applied enough times. What’s more is that there really is no way to look at that final drawing and say which part of it was drawn by which gene. It’s important to see that every gene contributed to every part of it, much like every ingredient in a cake recipe affects all parts of the cake. And just like a cake recipe, the same ingredient can have very different effects depending on what the other ingredients are and when they are added. This is very similar to the way in which genes work on a developing embryo. Genes work much more like a recipe than like a blueprint.
This recursive drawing approach shares another thing in common with biological development. As Dawkins put it, “…all embryos grow by cell division. Cells always split into two daughter cells. And genes always exert their final effects on bodies by means of local influences on cells, and on the two-way branching patterns of cell division.” The recursive splitting of the straight line to form the Y is analogous to this recursive cell division in embryological development. For real embryos, the final form of the organism “emerges because of lots of little local cellular effects all over the developing body” in a way that is analogous to the biomorph emerging because of lots of little effects of the drawing rule being applied all over the developing biomorph.
Biomorph “evolution” from one generation to the next also shares something in common with actual biological evolution. First, random mutation—that is, chance—plays an important role. In the biomorph example, random chance mutations provide the only source of genetic variation, without which evolution cannot occur. In most biological organisms—and unlike in our biomorphs—additional genetic variability is provided though sex, which creates random recombinations of genetic information.
In the interest of simplicity, our biomorphs simply reproduce by trying to clone themselves. Each parent produces 8 offspring. However, each of the 8 offspring has one of its genes randomly selected and “mutated” by having its value either increase or decrease by 1. The decision whether to increase or decrease is also a random chance decision—just like a coin toss.
This is why each of the offspring, while often not identical to its parent, stills bears a parental resemblance (since only one gene mutates). You, acting in the role of nature, will decide which child survives to become the parent of the next generation. You get to decide what makes one child more “fit” than the other (maybe its resemblance to a bug, or a helicopter, or whatever). In this sense, the biomorph program is much more like artificial, rather than natural, selection; that is, you’re acting more in the roll of an animal breeder.
Nonetheless, the point of the demonstration is to show how change depends on chance coupled with cumulative selection. Chance creates the variability from which you can choose slightly “improved” varieties. By saving up those small improvements over many generations, the descendents’ kinship with “Eve” is almost impossible to recognize, with remote descendents being as different from Eve as a sparrow is from a T-Rex.
The difference between artificial and natural selection is not a large one: instead of a breeder “deciding” which offspring will breed and which will not, the decision is left to the mathematical effects of reproduction in some unique local environment. Those offspring that have whatever increases their chance of survival in their current local environment (e.g., more sensitive eyes, a thicker coat in some environments, a thinner one in others, etc.) will end up being parents more often than those that don’t share these traits—this is just a statistical fact. This means their children will tend to resemble them but will have variations of their own, perhaps a slighter thicker coat for some. And as in the biomorph example, these slight improvements can be saved up over generations to create radically different looking animals that seem curiously “designed” for their environments.
My implementation of the biomorph program below is my own. My implementation derives from my understanding of Dawkins’ discussion in his book and from some variations of his approach that I’ve studied in C++. I programmed this implementation in Java as an applet.
Please note that if you do not see a red line drawing in the middle panel, or if nothing happens when you click the
red drawing, then your browser may be too old to support this program.