In order to assess the merits of the SMART operator programs and general strategy of SMART operator application and co-evolution we need a base line with which to compare them. This base line is, naturally enough, the kind of recombination operator a researcher might write: a random recombination operator. Random recombination in this representation, within the general recombination paradigm outlined above, chooses two random subsets of random sizes from the two input programs, and then exchanges them as outlined above. A SMART recombination operator, by examining the input programs, may choose two subsets of the two input programs that, when exchanged, are more likely to produce high fitness offspring.
This base-line random recombination operator has been improved since we first wrote it because of things we learned by studying highly fit SMART operators. We noticed that the distribution of sizes of program subsets to be exchanged was much wider and flatter for the SMART recombination operators than for the random recombination operator we originally wrote. When we went back to the random recombination operator code we noticed that to pick a random set of a random size it would place each node IN or OUT of the set (for each of the two programs) with probability 50%. This gives a binomial distribution of sizes of exchange sets. This was not a coding mistake and is not even in hindsight an obviously bad idea. Never-the-less, when we changed the random recombination operator code to pick a number between 1 and ProgramSize-1 and then pick that number of nodes at random to put in the set of nodes to exchange, the ``fitness'' (as defined for the SMART operators, section 3.4.5) of the random recombination operator rose dramatically. It is exactly because these strategies are obvious only in hindsight that we should learn, not design by hand, our recombination strategies.