Search code examples
genetic-algorithmheuristicsevolutionary-algorithm

What are the real differences between genetic algorithms and evolutionary algorithms?


I am reading some papers about Genetic Algorithms and often they mention Evolutionary Algorithms in a very similar way. According to Wikipedia, GAs are subset of EAs. However, if we look closer, we can notice that both are metaheuristic optimization algorithms based on natural selection (crossover, selection, mutation) and both don't have a fixed representation (it depends on the problem to solve, even we traditionaly use binary representations for GAs). They are very similar. So, my question is can we consider every evolutionary algorithm a genetic algorithm ? and what are the real differences between them ? Thank you


Solution

  • It sort of depends on who you ask. For the first few decades that such things existed, everyone considered there to be distinct categories (usually listed as "genetic algorithms", "genetic programming", "evolution strategies", and "evolutionary programming". There were, to be sure, significant differences between the subfields, so the distinction did make some degree of sense.

    At some point (around the late 90s or thereabouts), there was a bigger push for unification, as people began to see them as instances of a more general class of algorithms. The major GA conference (ICGA) morphed into GECCO, and the unifying term became "evolutionary computation", encompassing all of the above, and occasionally a few others (you can view things like particle swarm optimization as evolutionary algorithms as well if you're a bit liberal with the definitions).

    So currently, we would generally say "evolutionary computation" (or "evolutionary algorithms") as the catch-all umbrella term. Genetic programming maintains its own identity as evolving code strings directly, and evolution strategies also keep a separate identity as dealing with real-values and often including some sort of self-modification (e.g., covariance matrix adaptation learning search directions at runtime). Evolutionary programming still exists, but only as a much smaller niche. The term "genetic algorithms" has broaded quite a bit. Originally, people thought of them as operating on binary strings operating with generational selection, etc. Over time, one by one, the strictness has fallen away. At this point, you can almost use "genetic algorithm" as a synonym for "evolutionary computation". You shouldn't, because there is an understood subtlety in the terminology that you'd be losing, but in general, if you aren't doing code generation directly, and you aren't evolving real numbers in a very particularly defined way that corresponds with what people think of as evolution strategies, then you're reasonably safe in calling it a "genetic algorithm".