chemart / brusselator
View on GitHubBrusselator — The minimal oscillator, and the standard first test for anything that handles reaction networks. Two species are held constant as reservoirs, two are dynamic, and the autocatalytic step 2X + Y -> 3X provides the feedback…
How it works
The minimal oscillator, and the standard first test for anything that handles reaction networks. Two species are held constant as reservoirs, two are dynamic, and the autocatalytic step 2X + Y -> 3X provides the feedback. Push the parameter b past 1 + a^2 and the steady state loses stability: concentrations stop settling and run around a limit cycle instead. The trimolecular step is chemically unrealistic and deliberately so - it buys analytic tractability.
- S
- A, B (buffered), X, Y (dynamic), D, E (waste) · explicit
- R
- A --k1--> X ; B + X --k2--> Y + D ; 2X + Y --k3--> 3X ; X --k4--> E · arity 1, 2, 3
- A
- ode, ssa · A and B held constant by buffering
Parameters
| name | default | meaning |
|---|---|---|
| a float · population |
1.0 | [A], held constant [0, ∞] |
| b float · population |
3.0 | [B], held constant; sustained oscillations require b > 1 + a^2 when all k_i = 1 [0, ∞] |
| k1 float · kinetic |
1.0 | A -> X [0, ∞] |
| k2 float · kinetic |
1.0 | B + X -> Y + D [0, ∞] |
| k3 float · kinetic |
1.0 | 2X + Y -> 3X [0, ∞] |
| k4 float · kinetic |
1.0 | X -> E [0, ∞] |
Brusselator
One of the artificial chemistries of Banzhaf & Yamamoto, Artificial Chemistries (MIT Press, 2015), §17.4.2, 19.3; ARMS 9.4; first proposed by Prigogine & Lefever, 1968.
Its generator ships with the chemart library, so loading it runs no code from the hub and needs no trust_remote_code.
import chemart
net = chemart.generate_network("chemart/brusselator", seed=0) # same as "brusselator"
print(net.summary())
What to look for
- limit-cycle oscillations for b > 1 + a^2 (all k_i = 1); damped oscillations to (X, Y) = (a, b/a) below
Implementation decisions
- Buffered species A and B are listed in extras.buffered: their concentrations stay at a and b although the reactions consume them. Initial X, Y, D, E are 0, as in figure 17.6.
Banzhaf & Yamamoto, Artificial Chemistries (2015), §17.4.2, 19.3; ARMS 9.4
Preview at default parameters
6 species · 4 reactions · status complete · seed 1
A -> X [mass-action k=1.0] B + X -> Y + D [mass-action k=1.0] 2 X + Y -> 3 X [mass-action k=1.0] X -> E [mass-action k=1.0]
Generated by the uploader with chemart push; the hub never runs uploaded code.