MachineSex/README.md
Giorgio Gilestro ab3dc10587 Restructure: descriptive tier and experiment names, paper/manuscript
- paper/pnas -> paper/manuscript (venue-neutral)
- configs/layer1 -> configs/inheritance, src/knowledge -> src/inheritance
  (imported as `inheritance`), make layer1 -> make inheritance; layer2 alias dropped
- inheritance and trained-network bundles named after the manuscript figure
  they feed (fig2_grounding_sweep, figS3_rebaselining, ...), or descriptively
  where they feed none; configs keep their `experiment:` value so parquet
  hashes are unchanged, only output.dir moves
- figure scripts, SI figure sources, notebooks, REPRODUCING.md, README and the
  SI Methods/tables updated; make clean no longer deletes tracked manifests;
  reproduce.sh hashes the s{seed}/ layouts too

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y64o8FKP7rCuXzC48pxpMm
2026-09-13 17:00:40 +01:00

89 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# The evolution of sex for artificial intelligence
A population-genetic framework for multigenerational model populations. Knowledge transmission
between generations of learning agents is modelled *literally* as a WrightFisher process, not by
analogy: a model's knowledge is a distribution `p_t` over `K` discrete items, a fixed true
distribution `p*` has a rare tail, and each generational step is "sample from the parent (drift) +
mix in fresh real samples (grounding/immigration) + refit". Model collapse is the loss of rare
alleles under drift — and the remedies population genetics knows for drift (immigration,
recombination, selection, population structure) become engineering levers for model populations.
The framework is developed at three tiers of increasing realism:
| Tier | What it is | Hardware |
|---|---|---|
| **Inheritance model** | WrightFisher simulator over knowledge distributions; closed forms, bitwise reproducible | laptop |
| **Trained networks** | RNN / MLP / VAE on a synthetic mode universe with an exact oracle; convolutional VAE on MNIST | one GPU |
| **Language models** | LoRA specialists on Qwen2.5-Instruct (0.5B / 7B) with an exact-match verifier | one GPU / L40S |
## Reproduce
**Start here: [`REPRODUCING.md`](REPRODUCING.md)** — the authoritative map from every manuscript
figure panel back to the artifact, config, and seed that produced it, plus the determinism policy
and artifact-hash verification.
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh # one-time, if needed
./reproduce.sh # env -> tests -> inheritance-model tier at committed seeds -> figures
./reproduce.sh --with-gpu # ... and the trained-network + language-model tiers
```
Or tier by tier:
```bash
make env # build .venv from the committed, hash-pinned uv.lock
make test # correctness + closed-form scientific validation (the spine of trust)
make inheritance # the inheritance model, every experiment at its committed seed
make figures # per-experiment figures, from committed parquets (no re-simulation)
make paper-figures # the manuscript's Fig. 1-5 + rebuild the PDF bodies
```
`make help` is not defined, but every target carries a `##` description — `grep '##' Makefile`.
## Notebooks
```bash
make env-notebooks && jupyter lab notebooks/
```
- `01_biological_model.ipynb` — builds the WrightFisher model from scratch, checks it against the
closed forms (geometric diversity decay, the immigrationdrift equilibrium), and derives the
grounding threshold and its per-item observation floor. Runs on a laptop in under a minute.
- `02_paper_figures.ipynb` — verifies artifact hashes, then regenerates and displays every
manuscript figure from the committed artifacts.
## Layout
```
src/inheritance/ inheritance-model tier (imported as `inheritance`)
src/neural/ trained-network tier
src/llm/ language-model tier
configs/ one YAML per experiment: inheritance/ neural/ llm/ (each declares its master seed)
figures/ plot_*.py — per-experiment diagnostics, read results.parquet only
paper/manuscript/ the manuscript: main.md, si.md, make_figs.py (Fig. 1-5), si_figures.py, build.py
notebooks/ executable walkthroughs
hpc/ PBS job scripts for the 7B tier (Imperial CX3)
tests/ correctness + test_scientific_validation.py (the closed forms as assertions)
results/ run artifacts: results.parquet (gitignored) + resolved_config.yaml + manifest.json;
bundles are named after the manuscript figure they feed (fig2_*, figS4_*)
```
Development history, design documents, pre-registrations and exploratory experiments that did not
reach the manuscript live on the `dev` branch; `main` holds only what reproduces the paper.
## The engineering contract
- **Reproducibility is a requirement, not a preference.** The environment is a `uv` venv built from
a committed, hash-pinned `uv.lock`; the biological-model tier is bitwise reproducible from a
single master seed, and the GPU tiers are statistically reproducible with per-seed points
reported.
- **One master seed per config**, with all sub-randomness derived via `SeedSequence.spawn`. No code
touches global RNG state; a run is a pure function of its resolved config.
- **No magic numbers in code.** Every parameter lives in a YAML resolved at run time, and the
resolved config is written next to the results.
- **Every run writes the same triple:** `results.parquet` + `resolved_config.yaml` +
`manifest.json` (seed, git commit, library versions, row count, SHA-256 of the results).
- **Every figure is a pure function of a committed artifact** — figure scripts never re-simulate.
- **The scientific-validation tests are the spine of trust.** They assert that the simulator
reproduces the closed forms to within 0.5%. If they fail, the science is wrong, not just the code.