Lesson 11 of 20
Perturbation — the one line that pins a gene down
Knockout (KO) and overexpression (OE)
Virtual genetic manipulation is startlingly simple. You just let that one gene skip its rule when updating.
new[g] = perturb[g] if g in perturb else rule[g](state)
# ^ the pinned value ^ the original rule
That single line expresses both experiments.
| Name | Code | At the bench |
|---|---|---|
| Knockout (KO) | {"DDX54": 0} | siRNA/shRNA knockdown, CRISPR deletion |
| Overexpression (OE) | {"p53": 1} | Plasmid delivery, inducible expression systems |
There is one important difference. The 'single flip' of lesson 9 changed only the initial state. A perturbation changes the rules themselves. It is like keeping the drug on board.
Check that the first column stays pinned at ○ throughout. Below it, the dominoes fall.
Python
Runs in your browser
The results already diverge. Note that the immune targets on their own (PDL1, CD47) do not work.
Python
Runs in your browser
This is a choice you must make, and write down in your documentation, when you build a model.
Python
Runs in your browser
🎮 Perturbation bench
Pick KO / untreated / OE for each gene. The trajectory is recomputed immediately.
🤔 Check yourself
How do you express a gene knockout in a Boolean model?
Answer Deleting it from the list breaks every other rule that refers to it. Setting only the initial value to 0 lets the rules revive it at the next step.
🤔 Check yourself
What is the decisive difference between the 'single flip' of lesson 9 and the perturbation of lesson 11?
Answer It is the difference between taking a drug once and staying on it. Most targeted therapies are the latter.
🤔 Check yourself
Why apply the perturbed value to the initial state as well?
Answer It is a choice. Either is defensible, but you must say which one you took — there are cases where the answer differs.