by Jim Manzi
Jerry Coyne has a fairly scathing review of Robert Wright’s book Evolution of God in The New Republic. Here’s how the review begins:
Over its history, science has delivered two crippling blows to humanity’s self-image. The first was Galileo’s announcement, in 1632, that our Earth was just another planet and not, as Scripture implied, the center of the universe. The secondand more severelanded in 1859, when Charles Darwin published On the Origin of Species, demolishing, in 545 pages of closely reasoned prose, the comforting notion that we are unique among all speciesthe supreme object of God’s creation, and the only creature whose earthly travails could be cashed in for a comfortable afterlife.
But there are some for whom the true evolutionary tale of human life is not sufficiently inspiring or flattering. After all, the tale seems to hold no moral other than this: like all species, we are the result of a purely natural and material process. While many religious people have been persuaded by Darwin’s overwhelming evidence, there still remains a need to find greater meaning behind it allto see our world as part of an unfolding and divinely scripted plan. …
And so the faithfulthe ones who care about science at allhave tweaked the theory of evolution to bring it into line with their needs, to make it more congenial. Although life may indeed have evolved, they say, the process was really masterminded by God, whose ultimate goal was to evolve a species, our species, that is able to apprehend and therefore to admire its creator.
Coyne is an eminent evolutionary biologist, but here makes an enormous claim about the philosophical implications of science: that evolution through natural selection demonstrates that there is no divine plan for the universe. I think this claim is, in fact, a gigantic leap of faith unsupported by any scientific findings. Let me try to explain why.
I’ll need to begin by considering evolution at a reasonably concrete level. It’s very helpful to look at a representation of the core algorithmic processes that comprise evolution through natural selection, but abstract away, for the moment, many of its biochemical complexities. Genetic Algorithms (GAs) are computer-software implementations of the same kind of information algorithm that takes place in the biological process of evolution through natural selection. Today, GAs are a widely deployed software engineering tool used to solve such prosaic problems as optimally scheduling trucks on a delivery route or identifying the best combination of process-control settings to get maximum output from a factory.
Consider the example of a chemical plant with a control panel that has 100 on/off switches used to regulate the manufacturing process. You are given the task of finding the combination of switch settings that will generate the highest total output for the plant. How would you solve the problem? One obvious approach would be to run the plant briefly with each possible combination of switch settings and select the best one. Unfortunately, even in this very simplified example there are 2^100 possible combinations. This is a surprisingly gigantic number much larger, for instance, than the number of grains of sand on Earth. We could spend a million lifetimes trying various combinations of switches and never get to most of the possible combinations.
But there’s a trick that can help us. Once we start to try combinations, we might begin to notice patterns like “when switches 17 and 84 are set to on,’ production tends to increase when I put switch 53 to the off’ position.” Such insights could help us to narrow down our search, and get to the answer faster. This might not seem to be much help in the face of such an enormous number of possibilities, but the power of these rules is also surprising.
To illustrate this, think of a simple game: I pick a random whole number between one and a billion, and you try to guess it. If the only thing I tell you when you make each guess is whether you are right or wrong, you would have very little chance of guessing my number even if I let you guess non-stop for a year. If, however, I tell you whether each guess is high or low, there is a procedure that will get the exact answer within about 30 guesses. You should always guess 500 million first. For all subsequent guesses, you should always pick the mid-point of the remaining possibilities. If, for example, the response to your opening guess of 500 million is that you are too high, your next guess should be the mid-point of the remaining possibilities, or 250 million. If the response to this second guess is “too low,” then your next guess should be the mid-point of 250 million and 500 million, or 375 million, and so on. You can find my number within about a minute.
A Genetic Algorithm works on roughly the same principle. To return to our problem of the 2^100 possible combinations of switch settings, we can use a GA as an automated procedure to sort through the vast “search space” of possibilities and thus home in quickly on the best one. This procedure has the same three elements as our procedure for guessing the number: a starting guess, a feedback measurement that gives some indication of how good any guess is, and an iterative method that exploits this feedback to improve subsequent guesses.
In order to establish the initial guess for the GA, imagine writing a vertical column of 100 zeroes and ones on a piece of paper. If we agree to let one=“turn the switch on” and zero=“turn the switch off,” this could be used as a set of instructions for operating the chemical plant. The first of the hundred would tell us whether switch 1 should be on or off, the second would tell us what to do with switch 2, and so on all the way down to the 100th switch.
This is a pretty obvious analogy to what happens with biological organisms and their genetic codes and therefore, in a GA, we refer to this list as a “genome.” The mapping of genome to physical manifestation is termed the genotype-phenotype map.
Our goal, then, is to find the genome that will lead the plant to run at maximum output. The algorithm creates an initial bunch of guesses genomes by randomly generating, say, 1,000 strings of 100 zeros and ones. We then do 1,000 sequential production runs at the factory, by setting the switches in the plant to the combination of settings indicated by each genome and measuring the output of the plant for each; this measured output is termed the “fitness value.” (Typically, in fact, we construct a software-based simulation of the factory that allows us to run such tests more rapidly.) Next, the program selects the 500 of the 1,000 organisms that have the lowest fitness values and eliminates them. This is the feedback measurement in our algorithm and it is directly analogous to the competition for survival of biological entities.
Next comes the algorithmic process for generating new guesses, which has two major components: crossover and mutation. These components are directly modeled on the biological process of reproduction. First, the 500 surviving organisms are randomly paired off into 250 pairs of mates. The GA then proceeds through these pairs of organisms one at a time. For each pair it flips a coin. If the coin comes up heads, then organism A “reproduces” with organism B by simply creating one additional copy of each; this is called direct replication. If it comes up tails, then organism A reproduces with organism B via “crossover”: The program selects a random “crossover point,” say at the 34th of the 100 positions, and then creates one offspring that has the string of zeroes and ones from organism A up to the crossover point and those from organism B after the crossover point, and an additional offspring that has the string of zeroes and ones from organism B up to the crossover point and those from organism A after the crossover point. The 500 resulting offspring are added to the population of 500 surviving parents to create a new population of 1,000 organisms. Finally, a soupçon of mutation is added by randomly flipping roughly every 10,000th digit from zero to one or vice versa.