Introduction

Imagine teaching a robot to walk by giving it a score for distance traveled. Simple enough — except that, on many terrains, the highest-scoring intermediate postures are dead ends. The robot learns to hold a stable crouch that scores well but never leads to actual walking. It is stuck in a deceptive local optimum: a plateau where every small step seems to make things worse.

Novelty Search (Lehman & Stanley, 2011) attacks this problem with a radical idea: stop rewarding fitness entirely. Instead, reward an agent for doing something behaviorally different from everything that has been tried before. The novelty score of a candidate is its average distance to its kk nearest behavioral neighbors in an ever-growing archive of past behaviors.

The result is surprising. By never explicitly chasing the goal, novelty search often finds the goal — and finds it faster than a fitness-driven search on problems where the fitness landscape is deceptive. It is a counterintuitive lesson about non-convex optimization: sometimes the best way to reach a peak is to stop staring at it.

Try It

The maze below has a deceptive trap: the direct path toward the exit is blocked by a wall, so agents that follow the fitness gradient (get closer to the exit) pile up in a dead end. Novelty search, which rewards going somewhere new, wanders around the trap and eventually stumbles out.

<!-- {{c_layout_comment}} -->
<div id="app">
  <div id="left-panel">
    <div class="panel-label">{{label_maze}}</div>
    <canvas id="maze-canvas" width="220" height="220"></canvas>
    <div class="legend">
      <span class="dot fitness-dot"></span> {{legend_fitness}}
      <span class="dot novelty-dot"></span> {{legend_novelty}}
      <span class="dot exit-dot"></span> {{legend_exit}}
    </div>
    <div id="status" class="status">{{status_ready}}</div>
    <div class="btns">
      <button id="btn-fitness" type="button">{{btn_fitness}}</button>
      <button id="btn-novelty" type="button">{{btn_novelty}}</button>
      <button id="btn-reset" type="button" class="ghost">{{btn_reset}}</button>
    </div>
  </div>
  <div id="right-panel">
    <div class="panel-label">{{label_archive}}</div>
    <div id="archive-list"></div>
  </div>
</div>
/* {{c_base_styles}} */
* { box-sizing: border-box; margin: 0; padding: 0; }
body { font-family: system-ui, sans-serif; color: #222; font-size: 14px; }
#app { display: flex; gap: 12px; padding: 8px; }
#left-panel { flex: 0 0 auto; }
#right-panel { flex: 1 1 auto; min-width: 0; }
.panel-label { font-size: .75rem; font-weight: 700; text-transform: uppercase;
               letter-spacing: .06em; color: #5a7088; margin-bottom: 4px; }
canvas { display: block; border: 1px solid #cdd9e3; border-radius: 6px; }
.legend { display: flex; align-items: center; gap: 8px; margin-top: 5px;
          font-size: .78rem; color: #555; flex-wrap: wrap; }
.dot { display: inline-block; width: 10px; height: 10px; border-radius: 50%; }
.fitness-dot { background: #e63946; }
.novelty-dot { background: #2a9d8f; }
.exit-dot { background: #f4a261; border: 2px solid #e76f51; }
.status { font-size: .92rem; font-weight: 600; min-height: 1.4em;
          margin: 6px 0; color: #1d3557; }
.btns { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 4px; }
button { font: 600 13px system-ui, sans-serif; padding: .4rem .75rem;
         border: 1px solid #1d3557; background: #1d3557; color: #fff;
         border-radius: 7px; cursor: pointer; }
button.ghost { background: #fff; color: #1d3557; }
button:disabled { opacity: .45; cursor: default; }
#archive-list { display: flex; flex-direction: column; gap: 4px;
                max-height: 210px; overflow-y: auto; }
.arch-item { font-size: .78rem; padding: 3px 7px; background: #e8f4f1;
             border-radius: 5px; color: #1a6b5e; }
.arch-item.exit { background: #fde8d8; color: #b84c1a; font-weight: 700; }
// Code not found

Press Run Fitness Search to watch the fitness-driven population converge on the dead end. Then press Run Novelty Search to see how rewarding behavioral novelty disperses the population and finds the exit. The archive panel on the right records every distinct endpoint novelty search has visited — the exit appears there once it is reached.

The Real Complexity

Novelty Search sounds almost magical, but it carries real costs and hard limits.

  • No convergence guarantee. Because novelty search ignores the objective, it can explore forever without ever solving the task. It works well on deceptive problems; on straightforward fitness landscapes it is often worse than plain hill-climbing.
  • Growing archive. Every behavior that passes a novelty threshold is added to the archive. The archive can grow without bound, and the novelty score of every new candidate must be computed against all archived behaviors — O(karchive)O(k \cdot |\text{archive}|) per evaluation, which slows as the archive balloons.
  • Behavior characterization is manual. Someone must decide what counts as a "behavior." For a maze robot the natural choice is the xyxy-endpoint; for a legged robot it might be the joint-angle sequence. Wrong characterizations break novelty search just as badly as a deceptive fitness function.
  • Hybrid approaches exist. Pure novelty search is rarely used in production. Practical systems blend novelty with fitness — for instance Quality-Diversity algorithms like MAP-Elites maintain a grid of diverse high-quality solutions simultaneously, combining novelty's coverage with fitness's directedness.

The deep insight is that deceptive fitness landscapes are common in evolutionary computation: any time a high-scoring intermediate behavior is a dead end, standard genetic algorithms can get stuck. Novelty search proves that an explicit diversity pressure can break those traps — even if the pressure has nothing to do with the final goal.

Where It Matters

Wherever a fitness function has deceptive local optima, novelty (or diversity) pressure helps:

  • Robot locomotion. The classic Lehman & Stanley experiments evolved walking gaits in simulated creatures. Fitness search converged on passive balancing; novelty search found genuine locomotion by exploring a wide variety of body-movement signatures.
  • Open-ended evolution. Artificial-life systems like Picbreeder and Endlessforms use novelty-like objectives to keep a population innovating indefinitely rather than converging on a single good form.
  • Game-level generation. Procedural content generators use behavioral novelty to ensure generated levels feel distinct, preventing repetitive designs that score equally on a crude quality metric.
  • Quality-Diversity (QD) algorithms. MAP-Elites, CMA-ME, and related algorithms are the current state of the art. They maintain a map of behaviors indexed by hand-chosen feature dimensions and fill each cell with the best individual found so far — combining novelty's diversity with fitness's quality.
  • Neural architecture search. Some NAS systems add novelty bonuses to prevent all candidate networks from collapsing to the same architecture.

Novelty Search also changed how researchers think about evolutionary computation: it showed that what you optimize matters as much as how you optimize it, and that sometimes the right answer is to stop optimizing the thing you actually care about.

Conclusion

Novelty Search is a provocation as much as an algorithm: it asks whether the goal you defined is actually the right thing to optimize. On problems where the fitness landscape is deceptive — where higher scores lead systematically away from the solution — abandoning the objective altogether can be the shortest path to it.

The lesson carries beyond evolutionary computation. Whenever you design a reward signal, a loss function, or a metric, ask whether the highest-scoring intermediate state is a dead end. If it is, some form of diversity pressure — novelty search, Quality-Diversity, curiosity-driven exploration in reinforcement learning — may be what breaks the trap.

Chasing non-convex optimization peaks by staring at them is sometimes the worst strategy. Novelty Search is the algorithm that proved it.

Share this article

Pick a channel — or use your device's native share sheet.

Comments

Loading comments...

https://www.kipuhub.com/en/article/novelty-search/Content licensed under CC BY-NC 4.0.