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.