Intro
The process that takes a single cell to a functioning organism is one of the most remarkable phenomena in the natural world. From one cell and a suitable environment, a creature emerges—with limbs, organs, and attitude. There are three features of this process that are especially striking, and especially puzzling.
First, complexity. Intricate, organised structures arise from local cellular interactions, without any global coordinator. No one is reading the plan. There is no plan.
Second, diversity. The same basic process of development can produce radically different outcomes. Start with a different cell and you get fins instead of wings, scales instead of feathers.
Third, evolvability. These diverse outcomes are not scattered randomly across some space of possibilities. They are connected by a continuous series of small, viable changes. Evolution can navigate smoothly from one form to another, without catastrophe at every step.
These three features—complexity, diversity, and evolvability—are the central focus of this website. They are also, I will argue, precisely the features that expose what is missing from standard accounts of how evolution works.
Lessons from Building
There is a concrete way to see what is missing: try to build an evolutionary algorithm.
Implementing the Darwinian recipe is straightforward enough. A population of mutable individuals, a fitness measure, selection—these can certainly produce an increase in mean fitness. But when you want your algorithm to generate something genuinely novel, you quickly discover that the machinery of selection is not the hard part. The hard part is a set of choices about how to represent the problem: how to encode candidate solutions, and how to map those encodings to the things being evaluated.
In evolutionary computation, this is known as the representation problem (Wagner and Altenberg 1996). And the challenges it poses map directly onto our three features. You want your algorithm to produce complex solutions. You want access to a diverse range of them. And you need a way to move between them—small changes to the encoding should yield small, meaningful changes in the solution.
The representation problem is, in effect, the computational face of the genotype-phenotype map. Wagner and Altenberg recognised this parallel clearly, and saw the potential for cross-fertilisation between evolutionary biology and evolutionary computation. Building evolutionary systems, they argued, reveals blind spots that biologists miss when they study only the end products of evolution.
A Gap Between Fields
Yet despite this promising connection, remarkably little has come of it. The reason is straightforward: evolutionary computation and evolutionary biology have different goals.
In evolutionary computation, the aim is engineering success. A representation is good if the algorithm finds better solutions, faster. There is no particular pressure to understand why a given encoding works, or what it tells us about the structure of the problem. The burgeoning work in AI demonstrates vividly that engineering success and conceptual clarity are only loosely coupled.
In biology, the aim is explanation. We want to understand how the structure of heritable encodings gives rise to form, function, and the capacity for further change. We want to know what features of the genotype-phenotype map make complexity, diversity, and evolvability possible.
These goals are not incompatible, but they pull attention in different directions. The result is that, despite Wagner and Altenberg’s enthusiasm, the promised dialogue between the fields has barely materialised. When Pigliucci, some fifteen years later, pointed enthusiastically to advances in “developmental encoding” as revelations about biological systems, it was telling: he was rediscovering insights that computational scientists had been developing independently for decades (Pigliucci 2010).
The Aim of This Website
This website picks up the thread that Wagner and Altenberg identified, but steers it in a different direction than most work in evolutionary computation.
The models here are not optimisation engines. They are thinking tools—built to explore what modelling decisions are needed to produce complexity, diversity, and evolvability through bottom-up construction. As Hanna Kokko observes, models don’t investigate nature directly; they investigate “the validity of our own thinking” (Kokko 2007). When biological debates remain conceptually murky, building things can force the precision needed to make progress.
The strategy is to draw on insights from evolutionary computation—particularly about the representation problem—but to aim them squarely at explanation. What features must an encoding have to produce organised multicellular behaviour from the bottom up? What happens when we vary those features? And can the answers shed light on some long-standing controversies in the philosophy of biology?
I think they can. But first, we need to address one of those controversies head-on.