Back to Blog

Open-Ended Evolution: The Quest for Systems That Never Stop Surprising

Why most simulations plateau, how novelty search and MAP-Elites push past convergence, and the grand challenge of building systems that generate unbounded complexity.

2025-09-24
Share
Artificial Lifeopen-ended-evolutionnovelty-searchmap-elites

Terminology

Term Definition
Open-Ended Evolution (OEE) An evolutionary process that continually produces novel, increasingly complex entities without converging to a fixed state or exhausting its capacity for innovation
Novelty Search An evolutionary algorithm that selects for behavioral novelty rather than fitness, rewarding individuals that do something different from what has been seen before
MAP-Elites Multi-dimensional Archive of Phenotypic Elites: a quality-diversity algorithm that maintains a grid of the best-performing individual in each behavioral niche
Quality-Diversity (QD) A family of algorithms that seek a diverse collection of high-performing solutions rather than a single optimum
Behavioral Descriptor A low-dimensional vector characterizing what an individual does (its behavior), as opposed to what it is (its genotype) or how well it does (its fitness)
Deceptive Fitness Landscape A landscape where the gradient of fitness leads away from the global optimum, causing fitness-driven search to get stuck in local optima
Stepping Stone An intermediate solution that is not itself optimal but enables the discovery of better solutions later, like how eyes evolved from simple light-sensitive patches
Niche A region of behavior space occupied by a distinct type of solution, analogous to an ecological niche in biology
Minimal Criterion A threshold that a solution must meet to be considered viable (e.g., "the robot must reach the goal"), used in minimal criterion novelty search to combine novelty with basic competence

What & Why

Biological evolution has been running for roughly 4 billion years and shows no signs of slowing down. It produced bacteria, then eukaryotes, then multicellular organisms, then brains, then language, then civilization. Each major transition opened up new possibilities that did not exist before. This is open-ended evolution: a process that keeps generating genuinely novel complexity.

No artificial system has achieved this. Every evolutionary simulation, no matter how clever, eventually plateaus. Populations converge, diversity collapses, and nothing new appears. This is the central grand challenge of artificial life: build a system that keeps surprising you forever.

Why do simulations plateau? Several reasons:

  • Fixed fitness landscapes: If the environment does not change, evolution converges to a peak and stops.
  • Limited genotype space: If the representation cannot express new kinds of structures, evolution runs out of things to invent.
  • No ecological dynamics: Without predators, parasites, and environmental change, there is no pressure to keep innovating.
  • Deceptive landscapes: Fitness-driven search gets trapped in local optima, unable to reach distant but superior solutions.

Novelty search and quality-diversity algorithms are partial solutions. They do not achieve true OEE, but they demonstrate that abandoning pure fitness optimization can unlock exploration that fitness-driven search cannot reach.

How It Works

Why Fitness Optimization Fails

Consider a maze-solving robot. The fitness function is distance to the goal. A fitness-driven evolutionary algorithm will push robots toward the goal, but if the maze has a dead end that is close to the goal (a deceptive trap), the entire population converges there and gets stuck.

The problem is that the stepping stones to the solution (going away from the goal to navigate around walls) have lower fitness than the dead end. Fitness-driven search discards them.

Novelty Search

Kenneth Stanley's novelty search (2011) replaces fitness with novelty as the selection criterion. Instead of asking "how good is this solution?", it asks "how different is this solution from everything we have seen before?"

Each individual is characterized by a behavioral descriptor \mathbf{b} \in \mathbb{R}^d (e.g., the final position of a robot). Novelty is measured as the average distance to the k nearest neighbors in an archive of previously seen behaviors:

$\text{novelty}(\mathbf{b}) = \frac{1}{k} \sum_{i=1}^{k} \|\mathbf{b} - \mathbf{b}_i^{\text{nn}}\|$

Individuals with high novelty scores are selected for reproduction. The archive grows over time, creating an expanding frontier of explored behaviors.

The counterintuitive result: novelty search often solves deceptive problems faster than fitness-driven search, because it does not get trapped in dead ends. It explores the entire behavior space, and the solution is found as a side effect of thorough exploration.

MAP-Elites

MAP-Elites (Mouret & Clune, 2015) combines quality and diversity. It discretizes the behavioral descriptor space into a grid of niches. Each cell in the grid stores the single best-performing individual for that behavioral niche.

MAP-Elites: 2D behavior space, color = fitness Behavior dimension 1 Behavior dimension 2 high fit med fit low fit empty

The algorithm:

  1. Generate a random individual, evaluate its fitness and behavioral descriptor.
  2. Map it to a grid cell based on its behavioral descriptor.
  3. If the cell is empty or the new individual has higher fitness than the current occupant, replace it.
  4. Select a random occupied cell, mutate its occupant, and repeat from step 2.

MAP-Elites produces a diverse repertoire of high-quality solutions. For a robot, this might be a collection of different walking gaits (fast, energy-efficient, stable on slopes, etc.), each the best of its kind.

Toward True Open-Ended Evolution

Current approaches to OEE combine several ingredients:

  • Co-evolution: Agents evolve in response to each other, creating an ever-shifting fitness landscape.
  • Environmental complexity: The environment itself changes or grows, opening new niches.
  • Compositional representations: Genotypes that can express hierarchical, modular structures (like biological development) rather than flat parameter vectors.
  • Major transitions: Mechanisms for individuals to merge into higher-level entities (cells into multicellular organisms, organisms into societies).

No system has achieved all of these simultaneously at scale. This remains the defining open problem of artificial life.

Complexity Analysis

Algorithm Time per Generation Space Notes
Novelty search $O(P \cdot (C_f + A \cdot d))$ $O(A \cdot d)$ $P$ = pop size, $A$ = archive size, $d$ = descriptor dims
MAP-Elites $O(B \cdot C_f)$ $O(\prod_i n_i)$ $B$ = batch size, grid has $\prod n_i$ cells
Novelty $k$-NN query $O(A \cdot d)$ naive, $O(d \cdot \log A)$ with KD-tree $O(A \cdot d)$ Archive grows over time; KD-tree amortizes lookups
MAP-Elites grid lookup $O(d)$ $O(1)$ Discretize descriptor, index into grid

The novelty archive grows unboundedly, which is both a feature (it remembers all explored behaviors) and a cost (nearest-neighbor queries slow down). Practical implementations cap the archive size or use approximate nearest-neighbor structures.

MAP-Elites grid size grows exponentially with the number of behavioral dimensions:

$|\text{grid}| = \prod_{i=1}^{d} n_i$

For $d = 2$ with 100 bins per dimension: 10,000 cells. For $d = 6$: $10^{12}$ cells. High-dimensional behavior spaces require dimensionality reduction or hierarchical grids (CVT-MAP-Elites).

Implementation

ALGORITHM NoveltySearch(popSize, maxGen, evalFn, descriptorFn, k, archiveProb)
INPUT: popSize: integer, maxGen: integer, evalFn: evaluator,
       descriptorFn: maps individual to behavior vector,
       k: nearest neighbors for novelty, archiveProb: probability of archiving
OUTPUT: archive of diverse behaviors

BEGIN
  population <- InitRandomPopulation(popSize)
  archive <- EMPTY LIST

  FOR gen FROM 1 TO maxGen DO
    FOR EACH individual IN population DO
      individual.behavior <- descriptorFn(evalFn(individual))
    END FOR

    // Compute novelty scores
    FOR EACH individual IN population DO
      pool <- population + archive
      neighbors <- KNearestNeighbors(individual.behavior, pool, k)
      individual.novelty <- AverageDistance(individual.behavior, neighbors)
    END FOR

    // Probabilistically add to archive
    FOR EACH individual IN population DO
      IF RANDOM() < archiveProb THEN
        APPEND individual TO archive
      END IF
    END FOR

    // Select and reproduce based on novelty (not fitness)
    nextPop <- EMPTY LIST
    WHILE LENGTH(nextPop) < popSize DO
      parent <- TournamentSelectByNovelty(population)
      child <- Mutate(COPY(parent))
      APPEND child TO nextPop
    END WHILE

    population <- nextPop
  END FOR

  RETURN archive
END
ALGORITHM MAPElites(gridDims, maxEvals, evalFn, descriptorFn)
INPUT: gridDims: array of bin counts per dimension,
       maxEvals: integer, evalFn: evaluator,
       descriptorFn: maps individual to behavior vector
OUTPUT: grid: map of cell -> (individual, fitness)

BEGIN
  grid <- EMPTY MAP (cell coordinates -> best individual)

  // Seed with random individuals
  FOR i FROM 1 TO initialBatch DO
    ind <- CreateRandomIndividual()
    fitness <- evalFn(ind)
    behavior <- descriptorFn(ind)
    cell <- DiscretizeToCell(behavior, gridDims)

    IF cell NOT IN grid OR fitness > grid[cell].fitness THEN
      grid[cell] <- {individual: ind, fitness: fitness}
    END IF
  END FOR

  evals <- initialBatch

  WHILE evals < maxEvals DO
    // Select random occupied cell
    cell <- RandomOccupiedCell(grid)
    parent <- grid[cell].individual

    // Mutate
    child <- Mutate(COPY(parent))
    fitness <- evalFn(child)
    behavior <- descriptorFn(child)
    childCell <- DiscretizeToCell(behavior, gridDims)

    IF childCell NOT IN grid OR fitness > grid[childCell].fitness THEN
      grid[childCell] <- {individual: child, fitness: fitness}
    END IF

    evals <- evals + 1
  END WHILE

  RETURN grid
END

Real-World Applications

  • Robotics repertoire learning: MAP-Elites generates diverse locomotion gaits for hexapod robots, enabling rapid adaptation when a leg is damaged (the robot searches its pre-computed repertoire for a gait that works with the remaining legs)
  • Game design and procedural content: Quality-diversity algorithms generate diverse game levels, enemy behaviors, and weapon designs that cover the space of player experiences
  • Drug and materials discovery: Novelty search explores chemical space more thoroughly than fitness-driven optimization, finding diverse candidate molecules that a greedy search would miss
  • Aerodynamic and structural design: QD algorithms produce diverse wing shapes, building structures, and mechanical linkages, giving engineers a catalog of trade-offs rather than a single "optimal" design
  • Artificial life research: Open-ended evolution is the benchmark goal for ALife, driving the development of new representations, environments, and selection mechanisms
  • AI safety: Understanding how open-ended systems generate unexpected behaviors informs research on containing and aligning systems that may develop novel strategies

Key Takeaways

  • Open-ended evolution, the continual generation of novel complexity, is the grand challenge of artificial life; no artificial system has achieved it
  • Fitness-driven search fails on deceptive landscapes because it discards stepping stones; novelty search succeeds by rewarding behavioral diversity instead
  • MAP-Elites maintains a grid of the best individual per behavioral niche, producing a diverse repertoire of high-quality solutions
  • Novelty search costs $O(P \cdot A \cdot d)$ per generation due to nearest-neighbor queries on a growing archive; MAP-Elites costs $O(B \cdot C_f)$ with $O(d)$ grid lookups
  • True OEE likely requires co-evolution, environmental complexity, compositional representations, and mechanisms for major evolutionary transitions, all combined at scale