chemart / oregonator
View on GitHubOregonator (Belousov-Zhabotinsky) — The reduced model of the Belousov-Zhabotinsky reaction - a real chemical oscillator, not an invented one. Five reactions couple an autocatalytic species, an inhibitor and an oxidised metal ion, with two reactants buffere…
How it works
The reduced model of the Belousov-Zhabotinsky reaction - a real chemical oscillator, not an invented one. Five reactions couple an autocatalytic species, an inhibitor and an oxidised metal ion, with two reactants buffered; the autocatalysis fires, exhausts itself, regenerates the inhibitor and waits. Add diffusion and it becomes an excitable medium supporting target patterns and spiral waves, which is the basis of reaction-diffusion computing.
- S
- A, B (buffered reactants), X (autocatalyst, HBrO2), Y (inhibitor, Br-), Z (oxidised metal ion, e.g. Ce(IV)), P, Q (products) · explicit
- R
- A + Y --k1--> X ; X + Y --k2--> P ; B + X --k3--> 2X + Z ; 2X --k4--> Q ; Z --k5--> f Y · arity 1, 2
- A
- ode, lattice-2d · A and B buffered; reaction-diffusion on a grid for spatial patterns
Parameters
| name | default | meaning |
|---|---|---|
| k1 float · kinetic |
1.0 | A + Y -> X [0, ∞] |
| k2 float · kinetic |
10.0 | X + Y -> P [0, ∞] |
| k3 float · kinetic |
10.0 | B + X -> 2X + Z [0, ∞] |
| k4 float · kinetic |
2.5 | 2X -> Q [0, ∞] |
| k5 float · kinetic |
1.0 | Z -> f Y [0, ∞] |
| f float · kinetic |
1.0 | stoichiometric factor of inhibitor regeneration; the key bifurcation parameter [0, ∞] |
| A float · population |
1.0 | buffered concentration of A [0, ∞] |
| B float · population |
1.0 | buffered concentration of B [0, ∞] |
| D dict · spatial |
{"X": 1.0, "Y": 1.0, "Z": 1.0} | diffusion coefficient per species for the reaction-diffusion setting |
| lattice enum · spatial |
"hexagonal" | grid used for reaction-diffusion (the book's patterns use a hexagonal grid) square | hexagonal |
Oregonator (Belousov-Zhabotinsky)
One of the artificial chemistries of Banzhaf & Yamamoto, Artificial Chemistries (MIT Press, 2015), §19.3.3; first proposed by Field & Noyes, 1974.
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/oregonator", seed=0) # same as "oregonator"
print(net.summary())
What to look for
- target patterns and spiral waves
- excitable medium supporting reaction-diffusion computing (logic gates, image processing, maze solving)
Implementation decisions
- Rate constants are the book's (figure 19.20). f, the buffered concentrations A and B, and the diffusion coefficients are not given; defaults are f = 1, A = B = 1, D = 1.
- A real f cannot be an integer stoichiometric coefficient. Z -> f Y is emitted as Z -> floor(f) Y at rate k5 (1 - frac(f)) plus Z -> (floor(f)+1) Y at rate k5 frac(f), which gives exactly the same rate equations.
- Space is recorded in extras.space (lattice, diffusion); A and B are listed in extras.buffered.
Banzhaf & Yamamoto, Artificial Chemistries (2015), §19.3.3
Preview at default parameters
7 species · 5 reactions · status complete · seed 1
A + Y -> X [mass-action k=1.0] X + Y -> P [mass-action k=10.0] B + X -> 2 X + Z [mass-action k=10.0] 2 X -> Q [mass-action k=2.5] Z -> Y [mass-action k=1.0]
Generated by the uploader with chemart push; the hub never runs uploaded code.