Chapter 1

         1.1    Features

         1.2    Kernel

         1.3    Specification of Problems

         1.4    Multiple Populations

         1.5    Availability

         1.6    Author

Introduction

lil-gp is a C language system for developing genetic programming applications based on the LISP work of John Koza at Stanford University. lil-gp evolves trees whose nodes are C function pointers, so tree evaluation is done entirely with complied code. This gives us a manyfold speed increase, allows us to handle much large problems (bigger populations, more generations), and is portable to a wide variety of platforms. lil-gp individuals can be composed of multiple trees, some of which can evaluate the others to give ADF capabilities. This system is the first (that we know of) to support multiple-population runs with arbitrary interchange topologies. lil-gp has many many options for controlling breeding, and is capable of emulating the "Simple LISP Code," given in the appendix of Koza's book [3 ], as well as the parameters given in Chapter 7, "Detailed Description of Genetic Programming," of that book.

1.1 Features

lil-gp features include:

- ease-of-use: options are specified via a flexible format parameter file; command line arguments lend the system to batch operation for long series of runs

- supports multiple subpopulations with arbitrary exchange topologies
- written in C for portability to a wide variety of Unix/DOS/Mac platforms
- 7 selection methods: fitness proportionate, greedy overselection, inverse fitness, variable size tournament, random, best, worst
- 3 genetic operators: crossover, reproduction, mutation
- writes and restarts from checkpoint files
- optional node and/or depth limitations on tree size
- support for ephemeral random constants
- extensive output, including statistics files ready for import into plotting/analysis packages

1.2 Kernel

At lil-gp's core is a tree representation that is compact yet amenable to extremely fast evaluation. Trees are stored as preorder expressions, with special symbols inserted to indicate ephemeral random constants and conditionally evaluated subtrees. The compactness of the representation allows larger populations to be stored in real memory, and the fact that trees are stored as contiguous blocks of memory minimizes the impact of paging on performance. The selection methods and genetic operators are implemented in an object-oriented fashion, allowing new routines to be added easily. Checkpoint files save the entire state of the run, allowing a promising run to be extended, or an interrupted run to be completed. A portable random number generator provides consistent results across platforms.

1.3 Specification of Problems

Creating a program in lil-gp is done with a minimum of code writing. The use must provide one C function for each GP function and terminal, in addition to a fitness evaluation function. Several callback hooks are provided for initialization, customized output, and reading and writing user state information to checkpoint files. Once the user code is written, the executable need only be compiled once_all parameters and operators are available_even switch between single and multiple population runs_just by modifying the parameter file.

1.4 Multiple Populations

lil-gp's support for multiple population problems includes user-specified exchange topology and exchange interval. The parameter file specifies how the individuals to be exchanged from each subpopulation are selected, and where they go. The output files include statistics on fitness and tree size for each subpopulation and for the entire population, both for the current generation and the entire run to that point.

1.5 Availability

This is version 1.0 of lil-gp. The distribution includes implementations of three of the problems from Koza's first book [3]--the Boolean 11-multiplexer, symbolic regression, and the artificial ant. Two problems from the second book [4] using ADFs are also implemented: the two-boxes problem and the lawnmower problem. This documentation covers building and running the sample problems, writing your own applications, and extending the kernel.

1.6 Author

lil-gp was written by Douglas Zongker, under the direction of Dr. Bill Punch. Mike Boers, Mike Raymer, Dr. Erik Goodman, and the rest of the MSU GARAGe (Genetic Algorithms Research and Applications Group) also provided valuable assistance.

Other users of lil-gp have provided suggestions and solutions for compatibility problems. Thanks especially go to Nigel Dodd, Kayvan Sylvan, Pierce T. Wetter III, and Glen Ropella.

We want to hear about your experiences with lil-gp. We welcome your questions, comments, sugges- tions, and, of course, bug reports.1 lil-gp related e-mail can be sent to zongker@isl.cps.msu.edu. You should always be able to find any new information on lil-gp on the World Wide Web, at the URL http://isl.cps.msu.edu/GA/software/lil-gp. Paper mail may be sent to:

> Computer Science Department

> A-714 Wells Hall

> Michigan State University

> East Lansing, MI 48824

> USA

1 Well, we don't actually welcome bug reports, but send them anyway.