I’ve only heard of genetic algorithms in the context of optimization problems. That is to say, you have a set of parameters which can take some values, and some figure of merit which is derived in some complicated way from those values, and you want to find the set of values which will give you the largest (or smallest, depending on the problem) value for the figure of merit. For instance, if you own a company that makes widgets, the parameters might be how durable you make your widgets, how much you charge for them, how much money you spend on advertising for them, and what color (or colors) to make them, and the figure of merit would be the profit you earn. Even if you have some sort of formula or other way to calculate how much the profit will be, it’s not necessarily easy to go from that formula to the set of values that would give you the most. This is where you use the genetic algorithms.
The basic idea of a genetic algorithm is that you start with a set of “organisms”, each of which has a full set of values for the parameters. These values correspond to the DNA. In each generation, you calculate the figure of merit for each organism, and you take some number of the best organisms. Combine the DNA from these best organisms in some manner, to come up with new parameter values, and give them some small chance to change further (mutations). The result of these is new organisms, which you use as the next generation. Calculate the fitness for each of these, and repeat.
There are, of course, many variations on this basic theme. The programmer typically chooses how large to make each generation, and how many organisms from each generation “mate” to produce the next generation, as well as the probability of mutation. And, of course, there are a number of different ways to combine the “DNA” of the parents. You might simply average the values, for instance, or you might pick one of each, or you might pick each bit of the child’s DNA from one of the parents.
In the case of the checkers-playing programs, I suspect that someone first wrote a checkers program with a bunch of free parameters, representing how much the program should value certain moves. These parameters formed the DNA. The programmer could have just chosen values for the parameters himself, or he could have asked for advice from expert human checkers players, but instead, he decided to evolve them. So he started with a bunch of programs with different values, and decided their value by having them play against each other, with the winner of each match mating more often than the loser (and maybe even “killing” the loser). Repeat for many generations, and you’ll end up with a very good set of values for those parameters, probably close to the values the human players actually use.