Another variation which would have reduced the load substantially is reducing the number of child processes by having each child search multiple potential moves rather than having one process per potential move. The downside of this approach is that it would have increased the complexity and decreased the efficiency of the algorithm. This was to be done through the use of a genetic algorithm. The Perl programming language was chosen for its simple syntax and its powerful text handling features. Before detailing the actual implementation of the GA, some background information on genetic algorithms in general will be given.
Genetic algorithms work over a set of gene strings called a population.
Each gene string is a fixed sized set of values that determines the characteristics of a population member. At each step through the GA, each gene string is rated relative to the other members of the population. After the population is ranked, two members are selected to be parents. The selection process is a random process, but higher ranked members of the population are given a higher probability of being selected. In practice, the process works by randomly selecting a gene string, then testing it, based on its ranking, to see if it should become a parent.