Genetic Programming

Genetic Programming
The history of computer programming is a history of attempts to move away from hand coded programms to the ability to enable computers to learn to program themselves. Since the 1950s, computer scientists have tried to give computers the ability to learn and to program themselves. That goal was for many years too difficult, so the Machine Learning (ML) community focused on more modest goals.

Genetic Programming (GP), as a part of Maschine Learning research, emerged in the late 1980s, shows the most potential to automatically write computer programs. The methodology is inspired by biological evolution. GP achieves the goal of automatic programming by genetically breeding a population of computer programs using the principles of Darwinian natural selection. The operations used during the evolution process are biologically inspired and include reproduction, recombination and mutation. The search space in genetic programming is the space of all computer programs composed of functions and terminals appropriate to the problem domain.

Genetic Programming takes the same approach to problem solving than that of conventional programs. Conventional programs use an algorithmic approach i.e. the computer follows a set of instructions in order to solve a problem. The difference comes from the creation process of a program. For a conventional program the programmer needs to specify all the specific steps to solve the problem. That restricts the problem solving capability of conventional computers to problems that we already understand and know how to solve. But computers would be so much more useful if they could do things that we don't exactly know how to do.

A genetic program is composed in an evolutionary process which learned by examples. The examples must be selected carefully otherwise useful time is wasted or even worse, programs might be functioning incorrectly. Conventional programs use a cognitive approach to problem solving; the way the problem is to be solved must be known and stated in small unambiguous instructions. These instructions are then converted to a high level language program and then into machine code that the computer can understand. Genetic programs use the same set of instructions but here a computer creates the program in an evolutionary process, forming a high level language program which can be executed on every computer.