Genetic programming: a paradigm for genetically breeding populations of computer programs to solve problems

Many seemingly different problems in artificial intelligence, symbolic processing, and machine learning can be viewed as requiring discovery of a computer program that produces some desired output for particular inputs. When viewed in this way, the process of solving these problems becomes equivalent to searching a space of possible computer programs for a most fit individual computer program. The new Ògenetic programmingÓ paradigm described herein provides a way to search for this most fit individual computer program. In this new Ògenetic programmingÓ paradigm, populations of computer programs are genetically bred using the Darwinian principle of survival of the fittest and using a genetic crossover (recombination) operator appropriate for genetically mating computer programs. In this paper, the process of formulating and solving problems using this new paradigm is illustrated using examples from various areas. Examples come from the areas of machine learning of a function; planning; sequence induction; symbolic function identification (including symbolic regression, empirical discovery, "data to function" symbolic integration, "data to function" symbolic differentiation); solving equations, including differential equations, integral equations, and functional equations); concept formation; automatic programming; pattern recognition, time-optimal control; playing differential pursuerevader games; neural network design; and finding a game-playing strategy for a discrete game in extensive form. 1 . INTRODUCTION AND OVERVIEW Many seemingly different problems from artificial intelligence, symbolic processing, and machine learning can be viewed as requiring the discovery of a computer program that produces some desired output when presented with particular inputs. Depending on the terminology of the particular field involved, the Òcomputer programÓ may be called a robotic action plan, an optimal control strategy, a decision tree, an econometric model, a set of state transition equations, the transfer function, a game-playing strategy, or, perhaps more generically, a "composition of functions." Similarly, the ÒinputsÓ to the Òcomputer programÓ may be called sensor values, state variables, independent variables, attributes, or, perhaps merely, "arguments to a function." However, regardless of different terminology used, the underlying common problem is discovery of a computer program that produces some desired output when presented with particular inputs. The purpose of this paper is to show how to reformulate these seemingly different problems into a common form (i.e. a problem requiring discovery of a computer program) and, then, to describe a single, unified approach for solving problems formulated in this common form. 1 . 1 . EXAMPLES OF PROBLEMS REQUIRING DISCOVERY OF A COMPUTER PROGRAM The following problems are among the many problems that can be viewed as problems of discovering a computer program that produces some desired output when presented with particular inputs: ¥ Machine learning of a function requires discovering a composition of functions that can return the correct value of a function after seeing a relatively small number of specific examples associating the value of the function with particular combinations of arguments. The problem