Each candidate is a synthetic gene circuit built from three standardized (BioBrick-style) parts: a promoter of transcription strength ktx ∈ [0,1], a ribosome-binding site of translation strength ktl ∈ [0,1], and a terminator/mRNA context that sets an effective protein degradation-and-dilution rate kdeg ∈ [0.1, 2.0] h⁻¹. Protein level P(t) follows the standard gene-expression ODE:
dP/dt = 100 · k_tx · k_tl − k_deg · P
Steady state: P_ss = 100 · k_tx · k_tl / k_deg
This 2D view plots every candidate on the ktx–ktl plane. Because P_ss depends only on the ratio k_tx·k_tl / k_deg, one target level traces out a whole family of curves — one per k_deg slice, k_tl = P_target·k_deg / (100·k_tx) — shown as dashed lines. A point's radius encodes its own k_deg (bigger = faster degradation, needs a stronger promoter/RBS pair to hit the same target), so the population visibly spreads across several curves rather than collapsing to one spot.
The population (40 candidate circuits) evolves by a real genetic algorithm — this is directed evolution / adaptive laboratory evolution, used in real biofoundries when rational part selection alone can't hit a target:
- Fitness = −(P_ss − Ptarget)², so circuits closer to the target score higher.
- Selection keeps only the top fraction (survivor %) of the population each generation, unchanged (elitism).
- Mutation perturbs each surviving parent's three parameters with Gaussian noise of width σ, clipped to valid part ranges, to refill the population.
- Step Generation advances one round; Auto-Evolve runs continuously so you can watch the cluster of points converge and flatten onto the nearest iso-expression curve instead of collapsing to one point.
Marker color encodes fitness (teal = near target, red = far); the best circuit each generation is drawn larger with a glowing ring. Drag to pan, scroll to zoom.