Modularity (One kind)[chaos]
There is a large literature about modularity in evolution and development (Wagner et al., 2007). One problem with modularity is that it is conceived of in so many ways (A. Wagner, 2007; Wagner et al., 2007). For example, a number of papers use measures of modularity in networks (Clune et al., 2013; Kashtan & Alon, 2005). But this is only useful if we assume that modularity of this kind is relevant to how such networks change over time.
Here, we are interested in how some property (modularity) affects how a complex system can change over time. From an engineering perspective there are two related, but distinct, notions of modularity that matter for change over time. The first is the “decoupling” of two parts of a larger system, so that one can be modified without affecting the other. The second is “re-usability”. Here, the idea is a part of the system can be re-used for some other functionality. This “re-use” is ambiguous here.
- Do we mean re-use of the very same part of the system?
- Or are we making a copy of this piece of the system and redeploying it?
A definition with teeth
Wagner & Altenberg (1996) sharpen the notion enough to test it. A modular genotype-phenotype map, they say, is one “in which there are few pleiotropic effects among characters serving different functions, with pleiotropic effects falling mainly among characters that are part of a single functional complex.” The pay-off they claim is evolvability: such a map limits “the interference between the adaptation of different functions.”
Look at what that definition needs before you can apply it. It talks about characters, about the functions those characters serve, and about pleiotropic effects running between them. So you have to know what the parts are for, and you have to know what a mutation in one gene actually does to each part. A clustering coefficient computed on a graph asks neither question, which is why you can report one for any network at all.
That gap is our opening. Build a system where the functions are stipulated in advance, and you can measure pleiotropy directly, in Wagner and Altenberg’s own terms, instead of reaching for a graph statistic and hoping it tracks them.
A task with two jobs in it
The AND programs on the previous pages each had one job. Here every program has two, chosen to have nothing to do with one another.
Four stimuli arrive, A to D, and two responses leave, which we’ll call Pigment-1 and Pigment-2.
Pigment-1 must switch on when exactly one of A and B is present, the exclusive-or A \oplus B.
Pigment-2 must do the same for C and D.
All sixteen combinations of the four stimuli appear as challenges, so a program can’t fake one job by exploiting a correlation with the other.
Two details make this a real problem. The cis-regulatory operators available to mutation are limited to conjunction, disjunction and negation, with nothing that computes exclusive-or in one step. Each pigment therefore has to be built from several genes, using five memory elements as intermediates.
Now the functional decomposition is stipulated rather than guessed.
A and B serve Pigment-1; C and D serve Pigment-2.
So we can ask Wagner and Altenberg’s question the way they posed it.
Knock out a gene, run all sixteen challenges, and see which pigments change.
A gene that moves both is a pleiotropic effect between characters serving different functions, and a map with no such gene is what their definition calls modular.
For comparison we’ll also compute the graph proxy: walk the wiring back from each response and collect the stimuli it can reach. A stimulus reachable from both responses counts as shared. This is close to what the network-modularity literature works from, and it needs no knowledge of what anything is for.
Watching the pleiotropy go
Below is one climber’s ancestry, from a random genome to a perfect score. The frames are the steps where fitness changed, and the circuit is its regulatory network at each step.
Here are both measures at each of those steps. Fitness is scaled exponentially, so a score of 0.1 is a good program rather than a failing one, and 1.0 is perfect.
| Generation | Fitness | Genes moving both pigments | Stimuli shared in wiring |
|---|---|---|---|
| 0 | 0.0000 | nothing wired yet | nothing wired yet |
| 1,497 | 0.0032 | E F G I | C D |
| 21,309 | 0.0049 | E F H I | A B D |
| 26,084 | 0.0060 | F H J | A B |
| 26,099 | 0.0097 | F H J | A B |
| 26,153 | 0.0113 | E F H I J | A B |
| 26,176 | 0.0189 | E F H I J | A B C |
| 27,980 | 0.0562 | F H | A B D |
| 28,762 | 0.0736 | E G H J | D |
| 32,337 | 0.1065 | G H J | A B C D |
| 32,353 | 1.0000 | none | C D |
| 36,112 | 1.0000 | none | C D |
The pleiotropy disappears at exactly the generation the task is solved.
Every step from the first wired genome onwards has at least two genes that move both pigments, and then the last two steps have none.
Nor is this a gradual decline that happens to bottom out.
Between the second-to-last row and the last there are sixteen accepted mutations, all neutral, all leaving the same three genes (G, H and J) moving both pigments.
The seventeenth mutation lifts fitness from 0.11 to 1.0 and removes all three shared effects at once.
The other climber does the same thing at its own perfect score, some seven thousand generations earlier.
So the map really does become modular in Wagner and Altenberg’s sense, and it gets there in the step that satisfies the second function. The path is easy, which is what this page is titled after.
The middle of the climb is worth a look too.
At three consecutive steps both pigments read only A and B, so whatever Pigment-2 is doing there, it can’t be tracking C \oplus D: nothing on its path senses C or D at all.
Fitness climbs steadily while that holds, but every improvement to one pigment is forced on the other.
That’s the interference Wagner and Altenberg describe, sitting in the wiring where you can see it.
The re-use question gets an awkward answer
That shared stretch speaks to the ambiguity raised at the start. When one sub-network drives both responses, that is re-use of the very same part of the system, the first of the two readings. And here it’s the thing that has to be given up. Re-use of one part and decoupling pull against each other in this task, so the climb to a perfect score is partly a climb away from sharing.
The second reading, copy the part and redeploy the copy, isn’t available to these genomes. Nothing in the mutation operator duplicates a gene. That’s a limit of the model rather than a result, and it’s worth saying plainly: the reading of re-use that evo-devo leans on hardest is the one we can’t test here yet.
What the wiring says instead
Now put the graph proxy beside the definition.
Look again at the table above, at the row where fitness reaches 1.0.
No gene moves both pigments, so the map is modular.
Yet the wiring still shows C and D reachable from Pigment-1.
On the structural measure this genome looks like a failure, at the very moment it satisfies the definition the measure is standing in for.
The disagreement isn’t a one-off. Once a climber scores perfectly, every mutation it accepts is neutral: fitness can’t rise, and anything that lowers it is rejected, so the wiring wanders freely across the set of perfect solutions. The widget below samples that history. Fitness is pinned at 1.0 in every frame; only the wiring moves.
Binding sites appear and vanish.
A gene on Pigment-1’s path picks up a site for C, which costs nothing because the site changes no pigment on any of the sixteen challenges, and later it’s lost again.
Tallying every accepted mutation across the whole neutral history, weighted by how long each genome persisted:
| Climber | Solved at | Neutral steps | Modular by effects | Modular by wiring | Measures agree |
|---|---|---|---|---|---|
| 4 | 32,353 | 3,760 | 88.2% (66 switches) | 32.9% (166 switches) | 43.8% |
| 70 | 24,674 | 7,045 | 85.6% (118 switches) | 49.6% (384 switches) | 59.0% |
The two measures reach opposite verdicts about half the time. By effects, these genomes are modular for most of their neutral history and change verdict rarely. By wiring, they’re modular for a third to a half of it and flip verdict two and a half to three times as often. The wiring measure is picking up connections that carry no effect on either pigment, and counting them as pleiotropy. So both climbers finish with a tangled network and a modular map.
What this does to the measurement
Return to the doubt we began with. Suppose we’d done what the network-measure literature usually does, and computed a modularity score on the final, best genome of each run. Both would have registered as un-modular, because both end with cross-talk in the wiring. Both had in fact satisfied Wagner and Altenberg’s condition thousands of generations earlier, and still satisfied it when we stopped looking.
The trouble runs in two directions at once. A wiring measure over-reports pleiotropy, by counting connections that do nothing. And a measure taken at one moment reports a draw from a neutral set as though it were a property of the lineage, which assumes exactly what the user of the measure wants to show: that modularity of this kind is stable enough to matter for how the network changes over time.
Which leaves the question of what would make it stable. Nothing here does, because once the task is solved nothing needs it. Kashtan & Alon (2005) found that a fixed goal doesn’t preserve modularity, and that goals varying in a modular fashion do. Espinosa-Soto & Wagner (2010) reach a modular outcome by another route, as a by-product of selection for specialised gene activity. This experiment is the null case those proposals are answers to: a task where the modular map is easy to find, arrives exactly when the second function is satisfied, and is then held by nothing at all.