chemart / mechanical-self-assembly

View on GitHub

Mechanical 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

namedefaultmeaning
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.