You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+7-1Lines changed: 7 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,12 +14,14 @@ biota runs MAP-Elites searches across a Ray cluster, dispatching batches of [Flo
14
14
15
15
[MAP-Elites](https://arxiv.org/abs/1504.04909) searches that parameter space for behavioral diversity rather than a single optimum. Instead of one best creature, it fills a grid where each cell holds the highest-quality creature with a particular phenotypic fingerprint: an atlas of qualitatively distinct life-forms.
<palign="center"><imgsrc="docs/archive-grid.svg"alt="CVT-MAP-Elites archive: calibration survivors (grey dots) and occupied Voronoi cells (magma color = quality)"width="85%"/></p>
18
18
19
19
The driver owns the archive and the search loop. Each Ray task evaluates B creatures as a single `(B, H, W)` vectorized forward pass. One task fills one GPU. Workers are stateless; nothing persistent lives on the cluster between tasks.
20
20
21
21
<palign="center"><imgsrc="docs/search-loop.svg"alt="Search loop and Ray dispatch"width="95%"/></p>
22
22
23
+
<palign="center"><imgsrc="docs/cvt-map-elites.svg"alt="CVT-MAP-Elites two-phase algorithm: calibration fits k centroids, search loop inserts via nearest-centroid lookup"width="95%"/></p>
24
+
23
25
`--workers N` controls how many batches are in flight simultaneously. `--workers 1` is synchronous MAP-Elites (maximally fresh archive). Higher values trade freshness for throughput on multi-node setups.
24
26
25
27
## Ecosystem simulation
@@ -32,6 +34,8 @@ Ecosystem dispatch is Ray-correct: each experiment is a self-contained payload.
The archive grid has three axes, each a scalar measured empirically from the rollout. Choose any three from the built-in library of eighteen:
@@ -166,6 +170,8 @@ This adds six signal parameters to each creature's searchable parameter space:
166
170
167
171

168
172
173
+
<p align="center"><img src="docs/signal-coupling.svg" alt="Inter-species signal coupling: dot products between emission vectors and receptor profiles determine chemotaxis, chemorepulsion, pursuit, or blind interaction" width="95%"/></p>
174
+
169
175
**Physics.** At each step: (1) convolve mass to get G(H,W); (2) convolve signal field; (3) compute reception `dot(convolved_signal, receptor_profile)`; (4) apply `alpha_coupling`: `G *= (1 + alpha * reception).clamp(min=0)` -- positive alpha is chemotaxis (grow into favorable signal, including other species' territory, enabling cross-species predation); negative alpha is chemorepulsion; (5) modulate emission rate via `beta_modulation`: `rate_eff = rate * (1 + beta * mean(reception))` clipped to [0, 0.1] -- positive beta is quorum sensing, negative beta is feedback inhibition; (6) emit `G_pos * rate_eff * emission_vector`, draining mass into signal field; (7) reintegrate mass; (8) decay signal at `decay_rates`. Note: signal mass decays each step by design -- total mass+signal is not conserved. Creature mass alone is conserved modulo emission (which transfers mass into the signal field).
170
176
171
177
**Archive compatibility.** An archive produced with `--signal-field` is tagged `"signal_field": true` in `manifest.json`. Ecosystem runs detect this automatically from the creature params -- no YAML flag needed. If any source creature comes from a signal-enabled archive, all sources must too; mixing signal and non-signal archives raises an error at load time.
0 commit comments