aidoesscience
aidoessciencefindings › Bak–Sneppen evolution
ValidatingOracle-validated

Bak–Sneppen self-organized criticality

A ring of species each with a random 'fitness', where every step the single least-fit one and its two neighbours are wiped out and reborn random — no dials, no target. Does anything organize itself? The claim is that this blind rule drives the ecosystem to a sharp CRITICAL edge f_c ≈ 0.667 all on its own, with extinctions arriving in scale-free bursts (punctuated equilibrium). Is that edge real, and is 0.667 special to the spatial coupling or just to 'kill the weakest'?

Measured by the lab
0.66212
Known value
0.66702
Relative error
7.35e-3

▶ Run this simulationRead how it works

The finding

Bak–Sneppen self-organized criticality: the 1-D nearest-neighbour threshold f_c ≈ 0.66702 recovered from raw extinction dynamics — f̂_c = 0.6621 ± 0.0018 (0.74%) climbing toward 0.667 from below with N, the mean-field random-neighbour rival falsified at ~1/3, avalanches scale-free — and the screen certified as its own instrument: the displayed edge estimator was silently GRID-LOCKED, returning exactly 0.6625 at N=256, 512 and 1024 (a number that looked 0.7% accurate while carrying no information about system size), now de-quantized to an honest 0.6464 ± 0.0005

Method

Run the Bak–Sneppen dynamics headless from a uniform-random start (Bak & Sneppen 1993): each step replace the global-minimum barrier f∈[0,1] and its two ring neighbours with fresh U(0,1). f_c is NEVER in the generator. After a 300N-step warm-up, snapshot the whole barrier field every N steps and build its stationary density, which self-organizes to a step: ≈0 below f_c, plateau ρ=1/(1−f_c) above. Locate f_c two oppositely-biased ways that BRACKET it — plateau height 1−1/ρ (biased low by the boundary-layer mass just under f_c) and the intersection of the steepest-rise edge with the plateau (biased high) — and average them for bias cancellation, at N=256,512,1024 over 6 seeds. Cross-check with 2⟨f⟩−1; run the random-neighbour (mean-field) variant through the same estimators as a falsification; measure the sub-critical (f0=0.6) avalanche-size distribution. ?world=evolution (&seed=<n> reproduces).

Measurements, controls & cross-checks

Recovered sigma

0.00178

Recovered se units

2.75

Estimator

bracket-average of two oppositely-biased edge estimators (plateau height + edge/plateau intersection) at the largest system size N=1024

Finite size trend

N
  • 256
  • 512
  • 1024
Fc bracket avg
  • 0.65401
  • 0.66188
  • 0.66212
Rel error
  • -0.0195
  • -0.0077
  • -0.0074
Note
each below 0.66702 and climbing toward it (Δ 256→1024 = +0.0081); a finite-size-scaling extrapolation of the trend lands within ~0.1% of the literature value. The ~0.5–0.7% residual at N=1024 is finite size, not a fitted offset — a resolution-limited recovery, cf. henonheiles. The two bracketing estimators at N=1024 read plateau 0.6521 (low), edge 0.6721 (high); the true f_c sits between them.

Internal consistency

Fc via 2meanf minus 1
0.6522
Fc via plateau height
0.6564
Abs diff
0.0042
Note
both finite-size-low estimators recover the SAME f_c — the stationary barriers really are ≈ uniform on [f_c,1], so ⟨f⟩≈(1+f_c)/2 and ρ≈1/(1−f_c) agree

Emergence

Stationary mass below 0.6
0.0049
Uniform start mass below 0.6
0.6
Note
order out of no tuned knob: the barrier mass below f0=0.6 collapses from 60% (uniform start) to 0.5% (self-organized)

Avalanches

F0
0.6
Count
14927
Max size
16095
Mean size
204.7
Max over mean
79
Survival loglog slope
-0.213
Note
scale-free (heavy-tailed power law), not exponential — the SOC/punctuated-equilibrium signature; |slope| = τ−1 in the survival function

Control random neighbour

Recovered fc
0.3319
Fc via 2meanf minus 1
0.3314
Fc via plateau height
0.3324
Gap from nn
0.335
Note
the mean-field version (min + two UNIFORMLY-RANDOM sites, de Boer et al. 1994) run through the identical estimators self-organizes to a decisively different threshold f_c≈1/3, isolating the spatial nearest-neighbour coupling as what fixes 0.667 — 'kill the weakest' alone does not

Module certification

Summary
The shipped src/modules/BakSneppenModule.ts is sha-pinned (165005f4…), mechanically type-stripped (38 strip pairs) and EXECUTED headlessly in lockstep against an independently written replica, so every number the viewer reads is a bit-proven output of the code that ships. 2400 engine calls at fl(1/120) are bit-exact on EVERY call across the accumulator, extinction count, snapshot count, Σ of snapshot means, avalanche run/max, argmin site, the 256-float f64 fitness ring, the 40-bin histogram, both 4096-float render buffers and the HUD string: 264,000 extinctions / 1200 ticks, 1142 snapshots, 792,256 RNG draws, HUD 480 writes / 480 distinct.
On screen edge
0.64641
On screen edge se
0.00052
On screen edge rel error
-0.0309
On screen fcmean
0.62956
On screen fcmean se
0.00077
On screen fcmean rel error
-0.0562
Protocol
12 seeds × 120 s of simulated time (14,400 engine calls, 1.58M extinctions) through the EXECUTED module's own estimators; 30 s vs 120 s drift +0.00046, so the reading is settled rather than still warming.
Honesty chain
2⟨f⟩−1 0.6296 < on-screen edge 0.6464 < oracle bracket on the module's OWN N=256 fields 0.6541 < oracle recovery at N=1024 0.6621 < literature 0.66702 — every on-screen number is finite-size LOW, in that order, and the HUD now says so instead of quoting the guide line back.
Quantization defect found and fixed
What
The displayed half-height edge estimator returned the CENTRE of the first histogram bin clearing half-plateau, quantizing f̂_c onto the 1/40 = 0.025 grid.
Pre fix value
0.6625
Pre fix displayed
0.662
Pre fix rel error
-0.0068
Evidence
The snapped readout returned EXACTLY 0.6625 for all 12 seeds, at all four watch depths, and at N=256, 512 AND 1024 — identical across a 4× change in system size. It was the most accurate-looking number on screen (−0.68% from f_c) precisely because the +0.0156 grid snap nearly cancelled the −3.0% finite-size deficit, and it carried no information about the physics at all.
Paired snap displacement
0.01564
Snap displacement bins
0.63
Fix
_edgeFc now interpolates the crossing linearly between the two straddling smoothed bins. The displayed edge becomes 0.6464 ± 0.0005 — visibly further from the 0.667 guide line, and honest: it now moves with the seed and climbs with N.
Post fix size trend
{"N":[256,512,1024],"edge":[0.64686,0.65208,0.65284],"fc_via_2meanf_minus_1":[0.62949,0.64584,0.647]}
Display lag
The HUD refreshes on every 5th render (calls 1, 6, …, 2396) while ticks land on every 2nd call, so the last-written text LAGS the state by 4 calls ≈ 33 ms: at call 2400 the state holds edge 0.6451883233347764 while the screen still shows the call-2396 value 0.6451472957065857 (both print as 0.645). The gate pins the WRITE value — what a viewer actually sees — not the state.
Accumulator
Exact-doubling regime: fl(1/60) = 2·fl(1/120) to the bit, so the tick-gap census is {2: 1200} with no incommensurate grain. dt twins prove dt genuinely drives the cadence and that no branch is dead code: dt=999 runs 880 extinctions (the budget-4 clamp fires) and then the >4·TICK_DT overflow reset zeroes the accumulator; dt=0 runs none; dt=fl(1/60) gives census {1: 300}, bit-exact against the replica.
Float precision
Zero f32 pricing: the science is a Float64Array fitness ring plus f64 scalars end to end. The module's two Float32Arrays are render matrices only, and are bit-compared in the lockstep.
Rng
Live stream (3 draws per extinction, 660 per tick), so per-call bit-equality IS the stream proof: the position after init is exactly 256 draws and after the lockstep exactly 792,256. The single Math.random site is the no-seed constructor fallback (executed: the seeded path draws 0, the unseeded path draws 1, and seed === (draw*0xffffffff)>>>0); there are no addEventListener handlers.
Answer freedom
The literature 0.667 IS in the module — as the yellow guide-line height, the bar colour split and the SVG marker — so it is proven DISPLAY-ONLY by token scan: 0 hits in the whole measurement slice (_step → _writeBar: dynamics, accumulation and the edge estimator) out of 10 file-wide.

Gates

12/12 pass in ~18s. Physics (1–6, untouched by this run): recovery within 1.2%, finite-size climb, plateau⇔2⟨f⟩−1 consistency, emergence, random-neighbour rival falsified, scale-free avalanches. Honest-module (H–M, new): module-pin (sha + strip + RNG census + answer-free measurement slice + stream position), init-exec (statics, 256-draw ring, buffers, meshes, guide line, camera, DOM), lockstep-2400 (bit-exact every call), dt-twins, screen-protocol (12 seeds, honesty chain), snap-fix + display-closure. Tamper self-tests, all exit 1 with every recovered number byte-unchanged: sha ⇒ H only; a rule tamper moving one coupling from the nearest to the next-nearest ring site ⇒ state diverges at call 2 (the first tick, exactly as predicted — the call-1 HUD quotes only init-frozen counts) hitting J+K+L+M while H, I and all six physics gates stay green, and the on-screen threshold moves 0.6464 → 0.5456 for the changed topology; known_value 0.66702→0.70 ⇒ gate 1 only, →0.60 ⇒ gates 1, 2 and M (whose finite-size clause asks the trend to stay below f_c).

What it reduces to

The self-organized critical threshold of the 1-D nearest-neighbour Bak–Sneppen model, f_c ≈ 0.66702 (Grassberger, Phys. Lett. A 200, 277, 1995; Bak & Sneppen, PRL 71, 4083, 1993). Non-circular in the estimator sense: the generator is ONLY the extinction rule (replace the least-fit barrier and its two ring neighbours with fresh U(0,1)); neither f_c nor the closed form ρ=1/(1−f_c) appears in the recovery path — f_c is located from the shape of the emergent stationary density and loaded only to score. f_c itself is a numerically-determined constant, not analytically exact, so the validation content is that the blind dynamics self-organizes to a sharp threshold at the literature value, that its finite-size trend converges to 0.667 from below, that the uniform-[f_c,1] structure is internally consistent (⟨f⟩ and ρ agree), and that the SAME machinery separates the nearest-neighbour value (0.667) from the mean-field random-neighbour value (~1/3). A second self-organized-criticality world alongside the sandpile, framed as evolutionary punctuated equilibrium (Gould–Eldredge). The honest-module rung adds a separate, non-circular claim about the INSTRUMENT rather than the physics: the shipped module is executed headlessly and shown bit-for-bit to be the source of what the screen displays, and its two on-screen estimators are placed on a measured chain (2⟨f⟩−1 < screen edge < oracle bracket at N=256 < oracle recovery at N=1024 < f_c) using only executed numbers — the known f_c never enters those gates, which is why tampering with known_value cannot move them.

Confidence & reproduction

Confidence
high
Validation
derisk-pass
Re-run the check
npm run derisk -- evolution (scripts/evolution-derisk.mjs)
Oracle
scripts/oracles/evolution.reference.json

Sources

P. Bak & K. Sneppen, Phys. Rev. Lett. 71, 4083 (1993); P. Grassberger, Phys. Lett. A 200, 277 (1995) [f_c = 0.66702(3)]; M. Paczuski, S. Maslov & P. Bak, Phys. Rev. E 53, 414 (1996); J. de Boer, B. Derrida, H. Flyvbjerg, A. D. Jackson & T. Wettig, Phys. Rev. Lett. 73, 906 (1994) [random-neighbour mean-field].

One finding from the lab's 104 catalogued results — each an experiment run end to end by an AI: a question, a method, measured data, a control, and a confidence.