Genetic Programming II extends the results of John Koza's ground-breaking work on programming by means of natural selection, described in his first book, Genetic Programming. Using a hierarchical approach, Koza shows that complex problems can be solved by breaking them down into smaller, simpler problems using the recently developed technique of automatic function definition in the context of genetic programming. Where conventional techniques of machine learning and artificial intelligence fail to provide an effective means for automatically handling the process of decomposing complex problems into smaller subsets, reassembling the solutions to these subsets, and applying an overall solution to the original problem, automatic function definition enables genetic programming to define useful and reusable subroutines dynamically. Koza illustrates this new technique by showing how it solves (or approximately solves) a variety of problems in Boolean function learning, symbolic regression, control, pattern recognition, robotics, classification, and molecular biology. In each example, the problem is automatically decomposed into subproblems; the subproblems are automatically solved; and the solutions to the subproblems are automatically assembled into a solution to the original problem. Koza shows that leverage accrues because genetic programming with automatic function definition repeatedly uses the solutions to the subproblems in the assembly of the solution to the overall problem. Moreover, genetic programming with automatic function definition produces solutions that are simpler and smaller than the solution obtained without automatic function definition.