Autoconstructive evolution is a process in which the entities undergoing evolutionary change are themselves responsible for the construction of their own offspring and thus for aspects of the evolutionary process itself. Because biological evolution is always autoconstructive, this term mainly occurs in evolutionary computation, to distinguish artificial life type systems from conventional genetic algorithms where the GA performs replication artificially. The term was coined by Lee Spector.
Autoconstructive evolution is used to address theoretical questions about the evolution of evolvability. Preliminary evidence suggests that the way offspring are generated changes substantially over the course of evolution. The study of these patterns aims to improve the understanding of how evolving systems organize themselves and our ability to apply evolutionary computation in problem solving.
This increased ability for the process of self-replication to evolve is also thought to be important for recreating the open-ended evolutionary process observed on earth
A relatively simple form of autoconstruction occurs in systems such as Tierra and Avida. In these systems, programs replicate themselves by allocating space in memory for their offspring and then looping over all of the instructions in their genome and copying each into the newly allocated space. This is autoconstruction in that the programs are responsible for determining what code ends up in the offspring. Programs most commonly make exact copies of themselves, with changes being introduced exclusively through mutation events. In principle, however, programs can compose a wide range of possible offspring by only copying a subset of their genomes.
PushGP is a genetic programming system which evolves code written in the Push language. Push is a stack-based language designed for easy use in genetic programming, in which every variable type (e.g. strings, integers, etc.) has its own stack. All variables are stored on the stack associated with their type. One of the variable types is executable Push code. As a result, this language design allows for rich autoconstructive evolution by treating all code left on the code stack at the end of program execution as the program's offspring. Using this approach, programs have complete control over the offspring programs that they create, in some cases allowing the variation methods employed by the population to evolve as the system runs.
{{cite book}}: Cite uses deprecated parameter |citeseerx= (help)