Skip to content
— CH. 1 · INTRODUCTION —

Evolutionary computation

11 min listen · Ch. 1 of 7
7 sections
  • Evolutionary computation begins with a question that stopped engineers cold: what do you do when the problem is so complex that no one can write a solution directly? The answer, it turns out, was already running in every living cell on Earth. Alan Turing glimpsed this possibility as early as 1948, when he proposed a method of genetic search. His unpublished notes described machines whose neural connections were shaped by something resembling a genetic algorithm, and other machines that learned through signals of pleasure and pain. Turing died in 1954. His paper sat unread until 1968. By then, others had arrived at the same idea independently, building it from scratch across three continents.

    The field that emerged asks a deceptively simple thing of a computer: generate a crowd of possible answers, keep the best ones, mutate them slightly, mix them together, and repeat. Do this long enough and the crowd will evolve toward something that works. What began as separate experiments in the 1950s and 1960s grew into a unified discipline by 1991, when the term "evolutionary computing" was coined to name it. Today it spans everything from fluid dynamics to pattern recognition to the automatic writing of programs. The deeper questions this script will explore: who built these ideas, why they kept reinventing each other's work, and what it means that evolution itself may be a form of computation.

  • In 1962, Lawrence J. Fogel launched a research program in the United States that he framed as an artificial intelligence endeavor. He called it Evolutionary Programming. His core idea was to represent candidate solutions as finite state machines, small computational devices that read inputs and produce outputs. Each generation, those machines were mutated by adding or deleting states, or by changing the rules governing how states transition. The survivors of this selection pressure were mutated again in the next generation, and the process continued until a machine emerged that could generate reliable predictions.

    Two years later and across the Atlantic, Ingo Rechenberg and Hans-Paul Schwefel were grappling with a different kind of problem in Germany. Traditional gradient descent, the standard mathematical tool for finding optimal solutions, had a crippling weakness: it could get trapped in local minima, pits in the landscape of possible answers that look like the bottom but are not. Rechenberg and Schwefel proposed that random mutations applied to every parameter of a solution could jolt the system out of those pits. They tested this on fluid dynamics problems. Initially, they determined their random mutations not by computer but by rolling dice. By 1965, the calculations had moved entirely to machines.

    John Henry Holland took a different angle entirely when he introduced genetic algorithms in the 1960s at the University of Michigan, developing them further through the 1970s. Where Fogel wanted predictions and Rechenberg wanted better engineering designs, Holland primarily wanted to understand adaptation itself. He represented candidate solutions as strings of bits, treating individual bits as "alleles" in a chromosome. Crucially, Holland's method tracked large populations of organisms competing simultaneously, rather than a single best candidate competing against its own children. That population-level thinking allowed interactions between chromosomes, simulating the kind of DNA recombination that occurs between different organisms. These three approaches developed separately for roughly fifteen years before researchers began to notice how much they shared.

  • By the early 1990s a fourth branch had taken shape, and it was more radical than the three that preceded it. Genetic programming, advocated for by John Koza among others, proposed that the thing being evolved should not be a parameter vector or a state machine but an actual program. The subject of evolution was code itself.

    Earlier attempts to evolve machine code had been tried as far back as 1958 but met with little success. Koza's version worked in Lisp, using a structure called an S-expression, which can be visualized as a tree of nested sub-expressions. That tree structure was critical. Trees can be split at any branch point, and subtrees from two parent programs can be swapped to produce offspring. This gave genetic programming a natural version of genetic mixing, analogous to the chromosomal recombination Holland had simulated with bit strings but now operating on executable logic.

    Programs were scored by how well they completed a defined task, and that score drove selection. Sequence induction, pattern recognition, and planning were all demonstrated as successful applications. The arrival of genetic programming also helped push the older branches toward each other. By the 1990s, the distinctions between evolutionary programming, evolution strategies, and genetic algorithms had started to blur. The coining of the term "evolutionary computing" in 1991 acknowledged that these four paradigms had grown into a single, recognizable field.

  • Not every important figure in evolutionary computation fits neatly into the four major branches. Nils Aall Barricelli conducted what appear to be the earliest computational simulations of evolution using evolutionary algorithms and artificial life techniques, doing this work in 1953, with his first results published in 1954. Alex Fraser, another pioneer from the 1950s, published a series of papers focused on simulating artificial selection. Their work built a foundation that the better-known branches would later stand on.

    A network analysis of the broader community was published in 2007, mapping the relationships among active researchers. The roster of notable practitioners that the field recognizes today includes Kalyanmoy Deb, Kenneth A De Jong, Peter J. Fleming, David B. Fogel, Stephanie Forrest, David E. Goldberg, John Henry Holland, Theo Jansen, John Koza, Zbigniew Michalewicz, Melanie Mitchell, Peter Nordin, Riccardo Poli, Ingo Rechenberg, and Hans-Paul Schwefel. The journals dedicated to the field started arriving in 1993, when both Evolutionary Computation and Artificial Life were founded by MIT Press. IEEE Transactions on Evolutionary Computation followed in 1997, and Genetic Programming and Evolvable Machines in 2000 under Springer Nature.

  • Two forces drive every evolutionary system, and they pull in opposite directions. Recombination and mutation generate diversity, which is the raw material for novelty. Selection increases quality by preferring solutions that score better on the fitness function. Without diversity, the population stagnates; without selection, it drifts randomly. Every variant of evolutionary computation balances these two pressures.

    Many aspects of the process are deliberately stochastic, meaning governed by chance. The specific pieces of information that get changed by recombination or mutation are chosen randomly. Selection can be either deterministic or probabilistic. When probabilistic, individuals with higher fitness have a better chance of being chosen as parents, but even weak individuals retain some chance of surviving into the next generation. That residual chance for poor performers is not a bug; it prevents the population from converging prematurely on a solution that merely looks good locally.

    The fitness function plays the role of the environment. Candidate solutions live or die by how well they satisfy it. This is also where a critical design choice lives: the fitness function must capture what you actually want, because the algorithm will optimize for exactly what it measures, nothing more. A poorly specified fitness function will produce solutions that technically score well while completely missing the intent of the designer. This challenge has no algorithmic fix; it is a human problem sitting at the center of every evolutionary computation application.

  • Evolutionary computation borrowed from biology, but the traffic has also run the other direction. Genetic algorithms have been used to model biological systems and systems biology, connecting to the theory of dynamical systems and helping predict future states of biological processes. Researchers have argued that biological systems resemble computational machines, processing input information to compute next states, putting them closer to a computational model than to a classical dynamical system.

    This view highlights something specific: biological development has no central controller. Organisms develop through local interactions within and between cells. The analogy between processes inside cells and the low-level operation of modern computers is, in the view of some researchers, more than a loose metaphor. Following concepts from computational theory, micro-processes in biological organisms have been described as fundamentally incomplete and undecidable in the logical sense, implying deep structural parallels between biological and computational systems.

    Evolutionary automata, which are generalizations of Evolutionary Turing machines, were introduced to investigate these parallels more precisely. Evolutionary finite automata, the simplest subclass working in terminal mode, can accept arbitrary languages over a given alphabet, including non-recursively enumerable languages such as the diagonalization language, and recursively enumerable but non-recursive languages such as the language of the universal Turing machine. These results confirmed earlier findings about the undecidability of natural evolution and evolutionary algorithms, suggesting that the connection between biological and computational evolution is not merely analogical but mathematically substantive.

  • The success of evolutionary computation has attracted a particular problem: over recent years, a number of dubious algorithms have appeared in the literature. Many of these turn out to be copies of existing methods, frequently Particle Swarm Optimization, with only the metaphor changed while the underlying algorithm remains identical. The field's response has been direct. A catalogue documenting these cases has been published under the name the Evolutionary Computation Bestiary, and researchers have noted that many of these supposedly novel algorithms also suffer from poor experimental validation.

    The major conferences where legitimate work is presented include the ACM Genetic and Evolutionary Computation Conference, the IEEE Congress on Evolutionary Computation, EvoStar, which itself comprises four sub-conferences covering genetic programming, applications, combinatorial optimization, and music, as well as Parallel Problem Solving from Nature. The journal Swarm and Evolutionary Computation was founded by Elsevier in 2011, adding to a publication landscape that had been growing steadily since 1993. That the field now requires its own Bestiary to track impostors is, in a way, a measure of how much influence evolutionary computation has accumulated since Rechenberg and Schwefel first reached for a pair of dice to test their optimization method in fluid dynamics.

Common questions

What is evolutionary computation and how does it work?

Evolutionary computation is a family of algorithms for global optimization inspired by biological evolution, and a subfield of computational intelligence and soft computing. It works by generating an initial set of candidate solutions, then iteratively updating that population through selection, mutation, and recombination until the solutions improve in fitness.

Who invented evolutionary computation and when did it start?

Evolutionary computation as a field began in earnest in the 1950s and 1960s through several independent efforts. Alan Turing proposed a method of genetic search as early as 1948, though his paper went unpublished until 1968. Lawrence J. Fogel initiated Evolutionary Programming in the United States in 1962, Ingo Rechenberg and Hans-Paul Schwefel introduced evolution strategies in Germany in 1964, and John Henry Holland introduced genetic algorithms in the 1960s at the University of Michigan.

What is the difference between evolutionary programming, evolution strategies, and genetic algorithms?

The three approaches differ in the method of selection, the permitted mutations, and the representation of genetic data. Evolutionary programming used finite state machines and focused on prediction problems; evolution strategies applied random mutations to parameter vectors and were first used to solve fluid dynamics problems; genetic algorithms represented solutions as bit strings and tracked large populations of competing organisms rather than single candidates.

What is genetic programming and how does it differ from other evolutionary computation methods?

Genetic programming, advocated by John Koza among others, evolves actual programs rather than parameter vectors or state machines. Koza used Lisp S-expressions, which can be represented as trees of sub-expressions, allowing subtrees from two parent programs to be swapped to produce offspring. It emerged in the early 1990s as the fourth major branch of evolutionary computation.

Who were the earliest pioneers in evolutionary computation before the main branches formed?

Nils Aall Barricelli conducted the earliest computational simulations of evolution using evolutionary algorithms and artificial life techniques in 1953, with first results published in 1954. Alex Fraser was another pioneer in the 1950s who published a series of papers on simulation of artificial selection.

When was the term evolutionary computing coined and what does it encompass?

The term "evolutionary computing" was coined in 1991 to denote a field spanning all four major paradigms: evolutionary programming, evolution strategies, genetic algorithms, and genetic programming. By the 1990s the distinctions between the historic branches had begun to blur, making a unifying term appropriate.

All sources

22 references cited across the entry

  1. 1BookEvolutionary Computation: A Unified ApproachKenneth A. De Jong — MIT Press — 2006
  2. 2BookComputational Intelligence: A Methodological IntroductionRudolf Kruse — Springer International Publishing — 2022
  3. 3Soft ComputingDevenda K. Chaturvedi — Springer — 2008
  4. 4Evolutionary Computing: The OriginsA. E. Eiben et al. — Springer — 2015
  5. 5Evolutionary Turing in the Context of Evolutionary MachinesMark Burgin et al. — 2013-04-12
  6. 6BookEvolutionary computation : the fossil recordIEEE Press — 1998
  7. 7DGORThomas Fischer — Springer — 1986
  8. 8BookAn Introduction to Genetic AlgorithmsMelanie Mitchell — The MIT Press — 1998
  9. 9JournalEsempi Numerici di processi di evoluzioneNils Aall Barricelli — 1954
  10. 10JournalMonte Carlo analyses of genetic modelsFraser AS — 1958
  11. 11BookGenetic Programming: On the Programming of Computers by Means of Natural SelectionJohn R. Koza — MIT Press — 1992
  12. 12BookNew Optimization Techniques in EngineeringGodfrey C. Onwubolu et al. — Springer — 2004-01-21
  13. 13JournalTools for intelligent control: fuzzy controllers, neural networks and genetic algorithmsJamshidi M — 2003
  14. 16BookThe Stanford Encyclopedia of PhilosophyMetaphysics Research Lab, Stanford University — 2016
  15. 17JournalElastic Multi-scale Mechanisms: Computation and Biological EvolutionJ.G. Diaz Ochoa — 2018
  16. 18JournalBacteria as computers making computersA. Danchin — 2008
  17. 19Who is the best connected EC researcher? Centrality analysis of the complex network of authors in evolutionary computationJ.J. Merelo and C. Cotta — 2007
  18. 20BookArtificial Intelligence, Evolutionary Computing and MetaheuristicsMark Burgin et al. — Springer-Verlag — 2013
  19. 21JournalEvolutionary Automata: Expressiveness and Convergence of Evolutionary ComputationM. Burgin et al. — 2012
  20. 22Book2009 IEEE Congress on Evolutionary ComputationEugene Eberbach et al. — IEEE — 2009