Falandays
The Falandays node is a homeostatic, online-plastic leaky-integrate-and-fire unit. A reservoir of them learns during the rollout — which is why it is fair to run untrained: behaviour self-organises with no outer optimiser. Two presets share the exact same neuron update and differ only in their substrate.
The update (per node , per tick)
The membrane potential leaks, then integrates input and recurrent current:
with leak . A node fires when it crosses its threshold (multiplier ), and resets by subtraction:
Homeostatic learning (each tick)
The error is the post-spike distance from set-point, . Two local updates drive the node toward homeostasis:
The weight error is shared over , the number of currently active presynaptic inputs to (, , ). Both are local: a node aggregates only its own afferents.
Source: the membrane update, threshold, and spike in src/nodes/Falandays.jl (step!); the homeostatic rules in src/nodes/Axes.jl (learn!, _update_targets!).
base vs extended
Same neuron, same equations — the difference is the substrate the reservoir is built on.
The plain base model: Bernoulli recurrent wiring, unsigned weights, no sensory noise. Input-driven homeostatic reservoir. The settled, authors-faithful baseline.
simulate(:wall; node=:falandays_base, ticks=300)The paper’s extended architecture (experimental — validated against the v0.2 numpy reference, not the authors’ bit-parity fixtures): the same neuron with a richer substrate —
- sensory input noise ( on the receptor vector),
- Watts–Strogatz small-world recurrent wiring,
- Dale’s law — each node is fixed excitatory or inhibitory.
simulate(:wall; node=:falandays_extended, ticks=300)The 7-scalar evolvable genome’s own defaults: , , ,
, , input weight , weight-init std . These are what you get
off-task (evolution, or any task with no registered paper config) — not what
:falandays_base actually runs with on :wall/:tracking/:pong. For those three,
simulate injects the task’s own authors-faithful constants
(falandays_paper_config(task), checked directly against the original authors’ Julia
source, not just the numpy port): e.g. on :wall, and input weight
(not /) — is task-dependent ( for wall/tracking/pong, for
the collective/swarm config) per a since-corrected bug in the authors’ own code (their
commit ba56475: an earlier .01 “was actually not being applied” and the true rate was
). See falandays_paper_config(:wall) (and :tracking/:pong/:collective) for the
full per-task table.
The Oosawa drive (a variant, for contrast)
:falandays_oosawa is not a substrate change — it adds a term to the update: a
target-gated membrane noise that keeps a blind network alive by variance, not by
deterministic self-excitation.
When a node sits below its firing threshold (starved), grows and it keeps
randomly crossing threshold; at set-point . So oosawa
belongs on a dynamics page, not the base↔extended substrate contrast.
The biology: Oosawa’s spontaneous activity
The drive is a minimal model of the spontaneous regime described by Fumio Oosawa, Spontaneous activity of living cells, BioSystems 88 (2007) 191–201 (and Oosawa 2001, Bull. Math. Biol. 63, 643). Oosawa separates three stimulus→response regimes in living cells: reflective (tight, deterministic coupling), autonomic (loose — the same stimulus gives varying responses), and spontaneous — internally-generated activity with no external stimulus. The Oosawa drive models that third regime.
In Paramecium, an inserted microelectrode shows the membrane potential is never constant even in a fixed environment: a basic fluctuation plus occasional spike-like events that trigger spontaneous reversals of ciliary beating — the cell’s spontaneous changes of swimming direction. Two facts from the paper map directly onto the node’s update:
- The basic fluctuation is an Ornstein–Uhlenbeck process (Oosawa’s Eq. 1, — a Langevin equation). In the node, the membrane leak is the relaxation and the injected Gaussian current is the random force, so the noise is added to before thresholding and integrated into a temporally-correlated subthreshold fluctuation. The spike-like events (Eq. 2, nonlinear, from field-sensitive channels) are the threshold crossings.
- It is metabolically driven, and regulated. The fluctuation’s variance is proportional to a circulating ionic current sustained by free-energy consumption — “active” cells (Paramecium, ~3 mV) produce large fluctuations, “quiet” cells (nerve axon, ~0.03 mV) suppress them. And the frequency of spontaneous events is regulated by internal state (in thermotaxis, fewer direction-changes when heading toward the preferred temperature). That regulation is exactly the node’s target-modulated gain — ramps up when a node is starved and switches off at set-point.
Why it matters here. The Oosawa drive keeps a blind or input-starved network alive by variance rather than deterministic self-excitation — an endogenous source of exploration. It is the same role spontaneous direction-changes play in Paramecium thermotaxis, and it is what lets an untrained reservoir keep acting on the wall, pong, and tracking demos when sensory drive alone would let it fall silent.
Source: src/nodes/Drives.jl (apply_drive!(::OosawaDrive, …)). See also Neurons for where this sits among the neuron features modelled here.
Reference
The model reimplemented here as :falandays_base is from:
J. Benjamin Falandays, Jeffrey Yoshimi, William H. Warren, and Michael J. Spivey. “A potential mechanism for Gibsonian resonance: behavioral entrainment emerges from local homeostasis in an unsupervised reservoir network.” Cognitive Neurodynamics 18(4), 1811–1834 (2024). doi:10.1007/s11571-023-09988-2
BrainlessLab is an independent reimplementation and extension; it is not affiliated with or endorsed by the original authors. “Authors-faithful” refers to bit-fidelity against a reconstruction of the authors’ code (see the fidelity note above), not to paper-fidelity for every component.