Skip to content

Outputs

The other half of the site: a place to publish results, data, and figures from experiments run with the library. Each write-up links its run-dir — the config, manifest.toml, CSVs, and figures — so a result is always traceable to the exact code (git SHA), seeds, and package versions that produced it.

This page walks one real run end to end.

The study

Question: on the forage swarm task, how does reservoir wiring density (node.link_p), swarm size (task.N), and whether agents can see conspecifics (env.conspecific_vision) move performance and criticality? A one-at-a-time sweep answers it.

(a) The config

Source: configs/sweep_forage_criticality.toml

[sweep]
id = "forage_criticality" # names the run-dir: sweeps/forage_criticality/
mode = "one_at_a_time" # vary one axis at a time; Σ of axis lengths
seeds = [0, 1, 2, 3]
max_rollouts = 80 # cost guard
[baseline] # the setup every axis perturbs around
node = "falandays_base"
task = "forage"
N = 80
n_agents = 6
ticks = 1200
[axes] # architecture / coupling surface only
"node.link_p" = [0.05, 0.1, 0.2]
"task.N" = [60, 100]
"env.conspecific_vision" = [true, false]
[analytics]
measures = ["sigma_mr", "susceptibility_node", "correlation_length",
"spectral_radius", "liveness", "regime"]
[capture] # opt-in: record one representative cell
group = "representative"
gif = true
[capture.groups.representative]
"node.link_p" = 0.1 # capture only the cell where link_p == 0.1

(b) The command

Run from the repo root against the top-level project:

Terminal window
julia --project=. sweep/run.jl configs/sweep_forage_criticality.toml

It first prints a cost preview — one_at_a_time: 2+3+2 = 7 cells x 4 seeds = 28 rollouts — then writes each cell. Re-running with the same id resumes: cells with a DONE marker are skipped, so the run is restartable.

(c) The run-dir that appears

Because the sweep is keyed on its id, everything lands under sweeps/forage_criticality/:

sweeps/forage_criticality/
├── manifest.toml # git SHA, dirty flag, Julia + package versions,
│ # host, seeds, resolved [baseline]/[axes]/[capture]
├── config.resolved.toml # the fully-resolved config actually run
├── results.csv # one row per cell: axis, value, *_mean/_std for
│ # every measure, regime_mode, warnings, errors
├── README.md # the headline callout (read this first)
├── figures/
│ ├── node.link_p.png # score / σ / liveness vs each knob, house palette
│ ├── task.N.png # (+ a .png.csv sidecar with the plotted numbers)
│ └── env.conspecific_vision.png
└── cells/
├── cell_001/ # every cell: DONE marker, manifest.toml, metrics.csv
│ ├── DONE # (metrics.csv = one row per seed)
│ ├── manifest.toml
│ └── metrics.csv
├── … cell_002 … cell_007 …
└── cell_004/ # the captured cell (node.link_p == 0.1) also gets:
├── representative.gif # a behaviour GIF (placeholder if no
├── criticality_timeseries.csv # Makie backend is loaded)
└── null_test.csv

(d) Reading the headline result

README.md is the summary. It restates the baseline and cost, then gives a callout per axis — the best value found, whether the axis flagged a breakdown (a dead/liveness-failed cell), and whether the regime flipped:

## Callouts
- `env.conspecific_vision`: best `true` (score=0.6241); no breakdown flagged; no regime flip
- `node.link_p`: best `0.2` (score=0.7017); liveness failed at 0.05; no regime flip
- `task.N`: best `100` (score=0.7181); no breakdown flagged; no regime flip
Dead/liveness-failed cells flagged: 1 / 7.
Cells with recorded errors: 0 / 7.

The read: performance climbs with wiring density and swarm size, and the sparsest reservoir (node.link_p = 0.05) tips into a dead/liveness-failed regime — the breakdown the sweep was built to find. For the numbers behind a callout, open results.csv (aggregates across seeds) or a cell’s metrics.csv (per seed); sigma_mr and spectral_radius are meant to be read together, since homeostatic rate control can pin σ while ρ(W)\rho(W) still moves.

That whole tree — config, manifest, CSVs, figures, GIF — is what a published result links to, so anyone can trace the headline back to the code and seeds that made it.