What is EC?

The theory of evolution, if defined in very broad strokes, explain how species change over time to adapt to their environment. It is based on the idea that individuals in a population will present variations from the norm. Those variations that make an individual perform better in its environment (for instance, a faster predator, or a prey with better camouflage), will result in the individual producing more offspring, thus spreading its variation further in the population. This concept is defined as natural selection.

Evolutionary Computation is the application of the theory of evolution to an engineering context. Let's imagine the problem of creating a system to predict the weather. To find a solution for this problem, we must begin from a partial solution (tomorrow's weather will be the same as today's weather). Then we modify this solution in several ways (taking into account the weather of regions around ours, and the movement of the wind, for example). We keep those variations that improve our partial solution, throw away those that don't, and repeat the proccess.

More formally, we have to define five things for an Evolutionary Computation system: A phenotype, a genotype, genetic operators, a fitness function, and selection operators.

The phenotype is a solution to the problem that we want to solve. The genotype is the representation of that solution which will suffer variation and selection in the algorithm. Sometimes, but not always, the phenotype and the genotype are the same.

The genetic operators modify the genotype, generating new solutions based on old ones. Usually we have the operators divided in two categories: crossover operators and mutation operators. Crossover operators generate a new solution from a mixture of multiple old
solutions. The new solution will be similar to the old solutions it was generated from. Mutation operators modify a single solution to generate a new one. Usually they are thought to give a wider margin of variation than crossover operators.

The individuals created by the genetic operators are evaluated using the fitness function. This function takes a solution as its input, and outputs how well this function solves our problem. Using the fitness function we can tell which variations on the solutions helps or hinders the effort to reach a good solution. Using the selection operator, the solutions with the best fitness values are used in the crossover and mutation operators. In this way improvements from genetic operators are preserved, and the solutions generated by the system progress towards the desired solution to the problem.

The exact implementation of the genotype, fitness function, and operators will change, depending on the problem that needs to be solved. Some introductory textbooks that provide ideas of actual operators and fitness functions include the Field Guide to Genetic Programming and An Introduction to Genetic Algorithms.