Run provenance  ·  2026-04-12 13:11:48 EDT  ·  main@43a3ab7 [uncommitted changes]  ·  eranagmon@LT-0919936  ·  Darwin 24.2.0 arm64 (16 cores)  ·  Python 3.12.9

v2ecoli Architecture Comparison

2026-04-12 13:11 · Duration: 2520s (42.0 min) · Seed: 0 · 3 simulations in parallel · Total wall: 263s

Summary

Baseline Steps
46
Departitioned Steps
42
Reconciled Steps
41
Baseline Wall
216.4s
Departitioned Wall
258.4s
Reconciled Wall
217.7s
Departitioned Max Error
28.32%
Reconciled Max Error
0.00%
Molecules Diverged
4456 / 16321
Reconciled Improvement
28322.7x

Architecture Descriptions

Baseline (Partitioned) 46 steps · 216.4s wall

Strategy: The partitioned architecture splits each biological process into three coordinated steps per timestep: Requester, Allocator, and Evolver. Requesters read the current state and compute how many molecules each process needs. The Allocator collects all requests and distributes available molecules using priority-based proportional scaling — high-priority processes (RNA Degradation +10, Protein Degradation +10) get resources first, then default-priority processes share the remainder, and low-priority processes (Two-Component System -5, Metabolism -10) get what is left. When total requests exceed supply, molecules are distributed proportionally within each priority level, with integer remainders allocated randomly. Evolvers then execute with their reconciled allocation.

Layers: 3 allocator layers execute sequentially: Layer 1 (Equilibrium, RNA Maturation, Two-Component System), Layer 2 (Complexation, Protein Degradation, RNA Degradation, Transcript Initiation, Polypeptide Initiation, Chromosome Replication), Layer 3 (Transcript Elongation, Polypeptide Elongation). Processes within a layer request simultaneously and compete for the same molecular pool.

Trade-offs: Highest fidelity to the original wcEcoli model. Guarantees fair resource distribution under scarcity. Cost: 55 steps per timestep (3 per process + allocators + listeners + infrastructure).

Composition Diagram (interactive network)

Standalone viewer: open in new tab

Initial State (interactive JSON viewer)

Departitioned 42 steps · 258.4s wall

Strategy: The departitioned architecture wraps each biological process in a single DepartitionedStep that calls _do_update() — which runs calculate_request() followed by evolve_state() in sequence, with the requested molecules immediately applied to a local bulk copy. There is no allocator and no fairness mechanism. Each process gets exactly what it asks for, limited only by what remains after earlier processes have run.

Layers: Processes execute sequentially in the same order as the partitioned model, but without the request-allocate-evolve split. Earlier processes effectively have higher priority by virtue of running first and seeing the full molecular pool. Evolve-only optimization: RNA Maturation and Complexation skip calculate_request() entirely after the first timestep, since their evolve_state() recomputes everything independently.

Trade-offs: Simpler execution graph (41 steps). No allocation overhead. But no scarcity management — diverges from baseline by ~27% in water mass over a full cell cycle because different metabolite allocations cascade through metabolism (FBA) every timestep. The cell never reaches division threshold within 42 minutes.

Composition Diagram (interactive network)

Standalone viewer: open in new tab

Initial State (interactive JSON viewer)

Reconciled 41 steps · 217.7s wall

Strategy: The reconciled architecture groups processes by allocator layer into ReconciledStep instances — one step per layer. For example, Layer 2 in the baseline needs 13 steps for 6 processes (6 Requesters + 1 Allocator + 6 Evolvers); here it is a single ReconciledStep. Each ReconciledStep implements the reconcile pattern from bigraph-schema: it collects calculate_request() outputs from all processes in the layer, then reconciles the requests against available supply using proportional scaling (same algorithm as the Allocator but without priority levels). Finally, it runs evolve_state() for each process with its reconciled allocation.

Layers: Same 3-layer grouping as baseline: Layer 1 (Equilibrium, Two-Component System), Layer 2 (Protein Degradation, RNA Degradation, Transcript Initiation, Polypeptide Initiation, Chromosome Replication), Layer 3 (Transcript Elongation, Polypeptide Elongation). Evolve-only: RNA Maturation and Complexation skip the request phase and run via _do_update() with full bulk state. A bulk delta clamping step prevents negative molecule counts when combined deltas from multiple evolvers overdraw a molecule.

Trade-offs: Fewest steps (33). Proportional allocation preserves fairness — diverges only ~4.5% from baseline (vs 27% departitioned). The cell reaches division within the same cell cycle. Remaining gap comes from: (a) no priority levels (all processes equal), (b) evolve-only processes not participating in reconciliation, (c) different stochastic remainder distribution.

Composition Diagram (interactive network)

Standalone viewer: open in new tab

Initial State (interactive JSON viewer)

Mass Trajectories

Mass

Mass Divergence vs Baseline

ComponentDepartitioned Max % Reconciled Max %
Cell Mass6.1155%0.0000%
Dry Mass6.1173%0.0000%
Protein1.8607%0.0000%
RNA28.3227%0.0000%
DNA5.6974%0.0000%
Small Molecule11.3696%0.0000%
Water6.1155%0.0000%
Divergence

Growth & Volume

Growth

Top Diverging Molecules (N-Way vs Baseline)

Signed count differences from the baseline for each architecture. Red/green bars show how far each model deviates. When the reconciled bar is shorter than the departitioned bar, reconciliation reduced the divergence for that molecule.

N-way
#MoleculeBaseline Departitioned Δ Reconciled Δ Max |Δ|
1WATER[c]54290529375-1259413732+01259413732
2polymerized_GTP[c]15465777-15465777+015465777
3polymerized_ATP[c]14227498-14227498+014227498
4polymerized_CTP[c]14090986-14090986+014090986
5polymerized_UTP[c]13232765-13232765+013232765
6GLT[c]28521731+7383097+07383097
7THR[c]1490080+1663498+01663498
8K+[c]118598388-1281989+01281989
9LEU[c]1568913+1126726+01126726
10glycogen-monomer[c]80920501-874713+0874713
11GLN[c]1314851-726502+0726502
12CPD-12819[c]51408029-555696+0555696
13ILE[c]354143+492283+0492283
14VAL[c]1066758+474558+0474558
15L-ASPARTATE[c]3038687+464337+0464337
16LYS[c]1992089-391600+0391600
17GLUTATHIONE[c]14937398-346513+0346513
18ATP[c]12231899-283751+0283751
19ARG[c]365581+270096+0270096
20PUTRESCINE[c]18619831-201272+0201272
21FRUCTOSE-16-DIPHOSPHATE[c]8095325-187793+0187793
22SER[c]893667+176177+0176177
23L-ALPHA-ALANINE[c]1378014+171989+0171989
24OROTATE[c]6947922-161175+0161175
25UDP-N-ACETYL-D-GLUCOSAMINE[c]6294411-146016+0146016
26UTP[c]5988931-138929+0138929
27TTP[c]5868263-136130+0136130
28CPD-8260[c]12336838-133355+0133355
29GLC-6-P[c]5631374-130635+0130635
30PRO[c]597354+128404+0128404
31PYRUVATE[c]4648883-107843+0107843
32GUANOSINE-5DP-3DP[c]89674-89674+089674
33CPD-12575[c]3175467-73663+073663
34NAD[c]2965886-68802+068802
35GLY[c]729212+67629+067629
36GTP[c]2711849-62908+062908
37URIDINE[c]2654691-61583+061583
38CPD-2961[c]2638178-61200+061200
39MAL[c]2519204-58440+058440
40DI-H-OROTATE[c]2471720-57338+057338

Timing

Timing
Reconciled closes the gap: 0.00% max error vs departitioned 28.32% (28322.7x improvement). 41 steps vs 46 baseline (11% fewer).