chemart / mechanical-self-assembly
View on GitHubMechanical self-assembly (Hosokawa) — Proof that chemical kinetics does not need chemicals. Plastic triangles with magnets in two faces are shaken in a dish; they stick into dimers, trimers and larger assemblies, and the yields over time fit an ordinary mass…
How it works
Proof that chemical kinetics does not need chemicals. Plastic triangles with magnets in two faces are shaken in a dish; they stick into dimers, trimers and larger assemblies, and the yields over time fit an ordinary mass-action reaction network. The instructive detail is where the rate constant comes from: it factorises into how often two pieces collide and the probability they are correctly oriented when they do - an encounter term times a geometric term.
- S
- triangular plastic bodies with permanent magnets in two of three faces; x = monomer, x2..x6 = assemblies · explicit
- R
- x+x -> x2 ; x+x2 -> x3 ; x+x3 -> x4 ; x+x4 -> x5 ; x+x5 -> x6 ; x2+x2 -> x4 ; x2+x3 -> x5 ; x2+x4 -> x6 ; x3+x3 -> x6 · arity 2
- A
- ode · none
Parameters
| name | default | meaning |
|---|---|---|
| n_monomers int · population |
100 | initial number of monomers x (book figure 20.3a) [1, ∞] |
| agitation_rate float · kinetic |
1.0 | collision frequency; rate = agitation_rate * P_b [0, ∞] |
| P_b dict · kinetic |
{} | bonding probability per pair, keyed 'x+x2' etc.; pairs not listed use 1.0 |
Mechanical self-assembly (Hosokawa)
One of the artificial chemistries of Banzhaf & Yamamoto, Artificial Chemistries (MIT Press, 2015), §20.1; first proposed by Hosokawa, Shimoyama & Miura, 1994.
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/mechanical-self-assembly", seed=0) # same as "mechanical-self-assembly"
print(net.summary())
What to look for
- simulated from 100 monomers, the intermediates x4 and x5 stabilise together with the final product x6 (book fig. 20.3a)
- model and experiment agree roughly in the x3-x6 plane; the book notes the statistics did not allow a more accurate comparison (fig. 20.3b)
Implementation decisions
- The book gives no numerical bonding probabilities ('under reasonable assumptions'); every P_b defaults to 1 and can be overridden per pair.
- The book's discrete-time update is represented by mass-action rates k = agitation_rate * P_b. extras.conservation records the monomer count (x=1 ... x6=6).
Banzhaf & Yamamoto, Artificial Chemistries (2015), §20.1
Preview at default parameters
6 species · 9 reactions · status complete · seed 1
2 x -> x2 [mass-action k=1.0] x + x2 -> x3 [mass-action k=1.0] x + x3 -> x4 [mass-action k=1.0] x + x4 -> x5 [mass-action k=1.0] x + x5 -> x6 [mass-action k=1.0] 2 x2 -> x4 [mass-action k=1.0] x2 + x3 -> x5 [mass-action k=1.0] x2 + x4 -> x6 [mass-action k=1.0] 2 x3 -> x6 [mass-action k=1.0]
Generated by the uploader with chemart push; the hub never runs uploaded code.