aidoesscience
aidoessciencefindings › Schelling segregation
ValidatingOracle-validated

Schelling segregation

Are the two numbers the Schelling world prints on-screen — the segregation index S and the unhappy fraction U — calibrated instruments? Do they read the exactly known combinatorics of the model's solvable configuration (the freshly randomized board), and does the famous mild-preference → strong-segregation claim survive against a preference-blind rival on the same machinery?

Measured by the lab
0.499721
Known value
0.5
Relative error
5.58e-4

Units: E[S] on the initial random board — exact at every grid size and vacancy (binomial symmetry)

▶ Run this simulationRead how it works

The finding

Schelling segregation — the lab's segregation instruments calibrated on the model's one exactly solvable configuration: the initial random board is an iid Bernoulli field, so the SAME S (mean same-kind neighbour fraction) and unhappy-fraction U the screen prints have exact combinatorial values — S₀ = 0.499721 ± 0.000666 vs exactly 1/2 (0.06%, 0.4 SE), the 14-point tolerance staircase U(T = k/16) sits on the exact finite-binomial law point-by-point (max 1.9 SE) including its strict-inequality plateaus (T = 1/16 ≡ 2/16 and 7/16 ≡ 8/16, bit-identical unhappy sets on every board) and U(0) = 0 exactly, and the law tracks a 6× vacancy sweep — then Schelling's 1971 phenomenon lands as branch separation on the calibrated ruler: wanting just ~31% like neighbours (T = 5/16) settles every agent content at S = 0.7514 ± 0.0018 (strong segregation nobody asked for), demanding 87.5% never settles and stays at S = 0.52 (gridlock segregates LESS than tolerance), and a preference-blind churn rival with the identical move machinery NEVER leaves the random floor (max |S − 1/2| = 0.010, a 25× separation) — segregation is carried entirely by the mild preference rule

Method

The generator is SchellingModule transcribed headless (iid Bernoulli fill: empty w.p. 0.1 else A/B w.p. 1/2; Moore-8 neighbourhoods with hard walls on the 80×80 grid; strict f < T unhappiness; 120 random unhappy-agent hops per tick to uniformly random empty cells; settle at unhappy < 0.004 measured every 6 ticks, 220-tick cap — one measured divergence from the shipped file, see module_systematics; mulberry32 PRNG) — no binomial formula anywhere in the generator; the exact staircase is computed in the scoring path only. Calibration: 24 seeds × the module's own 14-tolerance grid on the initial board. Phenomenon: 12-seed dynamics at T = 5/16, 6-seed monotone mid-range sweep (T = 2/16 → 8/16), 6-seed gridlock run at T = 14/16, 6-seed preference-blind rival scored on its worst excursion over the full 220 ticks, pinned-seed determinism regression. HONEST-MODULE CERTIFICATE (gates H–L): the shipped SchellingModule.ts is sha-pinned, mechanically type-stripped, EXECUTED against Babylon/DOM recorder stubs, and bit-locksteped against an independent replica for 4520 engine calls at fl(1/120) — a full 14-tolerance sweep plus three second-pass records — with grid, empty-list, unhappy-scratch, results, S/U, both 102400-float render buffers and every 5th-frame HUD innerHTML byte-exact at EVERY call (variable draws per tick, so lockstep IS the stream proof; 461,255-draw fingerprint pinned; the live stream sits in helpers _randomize/_tick that init/fixedUpdate call, and init itself consumes 12,157 draws before the first tick). The estimator is proven live on synthetic boards (all-A → S=1; a Moore-8 checkerboard whose diagonals are same-parity → S = (78²·½ + 312·⅖ + 4·⅓)/6400 and U = 316/6400 bit-exact — a closed-form fingerprint of neighbourhood + boundary classes + strict inequality; isolate exclusion; running-average weights recovered by synthetic _record calls). Closure: the executed screen measured across 6 seeds against the oracle. 22 gates in scripts/schelling-derisk.mjs (~3 s); tamper ⇒ exit 1 (sha ⇒ only H; strict-to-≤ rule flip ⇒ lockstep breaks at call 2; known-value ⇒ only the three S₀ gates, recovery unchanged). ?world=schelling.

Measurements, controls & cross-checks

Recovered se

0.000666

Seeds

24

Worst seed z

2.66

Staircase

Points
13
Max abs z
1.89
Mean abs z
0.66
U0 exact zero
true
Plateaus bit exact
true
Note
the strict rational comparison 16·same < k·occ makes T = 1/16 and 2/16 (and 7/16, 8/16) the IDENTICAL unhappy set — the simulated boards reproduce both plateaus bit-exactly, a fingerprint that the module's float comparison equals the exact rational one

Vacancy sweep

T
0.375
Vacancies
  • 0.05
  • 0.1
  • 0.2
  • 0.3
Max abs z
1.93
Recovered swing
0.098
Note
the exact law recomputed at each occupancy is tracked across a 53% swing in the predicted value

Mild preference

T
0.3125
Settled S
0.7514
Se
0.0018
Seeds
12
Settled
12/12 in 24 ticks each
Note
wanting ~31% like neighbours lands three-quarters same-kind with every agent content — collective outcome ≫ individual intent

Monotone midrange

T16
  • 2
  • 4
  • 5
  • 8
S
  • 0.511
  • 0.577
  • 0.751
  • 0.879
Note
each gap > 3× combined SE, all runs settled

Gridlock

T
0.875
S
0.5186
Seeds
6
Settled
0/6 — all churn through the full 220 ticks
Note
the over-demanding board never satisfies everyone and segregates LESS than the tolerant one — non-monotonicity at the top of the sweep

Rival rejected

Name
preference-blind churn: identical board, PRNG, move budget and machinery, but movers drawn from ALL agents instead of the unhappy
Max abs dev from half
0.01
True displacement
0.2514
Separation
25.1
Note
over the full 220-tick run the rival never leaves the random floor — segregation is carried entirely by the strict f < T unhappiness rule, not by relocation churn

Determinism pin

Seed
42
Final S
0.75363973
Ticks
24
Rel dev
0

What it reduces to

Bernoulli-trial combinatorics on the initial board (J. Bernoulli, Ars Conjectandi 1713; de Moivre 1738): with cell types iid uniform given occupancy, E[same-kind fraction] = 1/2 exactly and P(unhappy at T = k/16) is a finite binomial sum over the grid's three hard-wall boundary classes — no asymptotics, exact at N = 80². Non-circular: the generator codes ONLY the module's fill/measure/move rules (the reduction of the fresh board to a Bernoulli field is a property of that fill code, not a formula in it), the estimators are the module's own S and U, and the exact staircase is computed exclusively in the scoring path. INSTRUMENT-CALIBRATION scope, honestly stated (the paircorr/flock pattern): this validates the S and U rulers on the exactly solvable configuration and falsifies the churn rival; Schelling's phenomenon itself (mild preference → strong segregation; over-demand → gridlock) is gated as branch separation on the calibrated ruler because the settled S(T) curve has NO citable closed form (it depends on grid, vacancy, move rule and settle criterion — Schelling 1971 gives the phenomenon, not a constant) — the quantitative S(T) curve remains the open question the world investigates, now asked with calibrated instruments. Module systematics now MEASURED BY EXECUTING the shipped file (see module_systematics): the executed screen reads settled S(5/16) = 0.7474 ± 0.0019, the module prose's '≈ 0.76' sits at the top of the scatter, and the on-screen '(random ≈ 0.50)' anchor is exactly right.

Module systematics

MEASURED BY EXECUTING THE SHIPPED MODULE (gates H–L, added this run; module file untouched — sha-pinned b4a0adee…). (1) The screen's settled S at mild T = 5/16, executed over 6 seeds through the full first sweep pass, is 0.7474 ± 0.0019 SE (per-seed 0.7394–0.7517), vs the oracle's fresh-stream 12-seed 0.7514 ± 0.0018 — a 0.0040 gap ≈ 1.5 combined SE, consistent with seed scatter rather than bias (the module runs every tolerance off ONE continuing mulberry32 stream, the oracle reseeds per run; same physics, verified by 4520-call bit-exact lockstep). The module doc-comment's 'S ≈ 0.76' sits at the top of the per-seed scatter, a prose-only overstatement of ~0.01 left untouched so the sha pin stays stable. (2) CAP SEQUENCING, the one real divergence between the shipped file and the oracle generator (previously mis-stated as 'transcribed verbatim', now corrected in the reference): the module checks its 220-tick cap only at 6-tick measure boundaries, so every capped (gridlock) run actually runs and records at tick 222, while the generator caps at exactly 220 and reads its last measure from tick 216 — executed on all 6 seeds the effect on gridlock S is 0.5187 vs 0.5186, < 0.002, i.e. real but negligible for a churning board. (3) DISPLAY DEPTH: after the first full sweep pass the on-screen T→S list is NOT single-run — _record keeps a 0.5/0.5 running average across passes (verified exact by execution: stored === 0.5·old + 0.5·new at each of 3 pinned second-pass records), so a long-watching viewer sees pass-averaged values while the finding's quoted numbers are first-pass single-run. (4) TOP-END RICHNESS the two-branch summary understates: T = 11/16 (0.6875) never settles yet churns at S ≈ 0.90 — HIGH-segregation churn, identical unsettled set {11,12,14}/16 on all 6 executed seeds — so 'over-demanding segregates less' is true at 14/16 but the collapse toward the floor is not monotone in T; the screen displays this honestly with its *-marks. (5) ANSWER-FREE, certified per #138 by execution not token-scan: the three '0.5' literals coinciding with the known value are (a) the fill's type probability — the equal-population MODEL being simulated, from which the oracle's ½ is derived, (b)×2 the _record averaging weights — synthetic _record(0.9)+(0.7) returns 0.8, and the measurement slice (_sameFrac/_measure/_tick) contains none; the '(random ≈ 0.50)' HUD anchor is a static disclosed overlay; synthetic boards (all-A, Moore-8 checkerboard with its exact class sum (78²·½+312·⅖+4·⅓)/6400 and U = 316/6400, isolate exclusion, A-B pair) prove S and U are computed from the grid.

Confidence & reproduction

Confidence
high
Validation
derisk-pass
Re-run the check
npm run derisk -- schelling (scripts/schelling-derisk.mjs — 22 gates: S₀ = 1/2 (SE + abs + worst-seed z), U(0) = 0 exact, 13-point staircase (max/mean z) + bit-exact plateaus, 4-point vacancy sweep (z + swing), mild-T settles + strong segregation, mid-range monotone, gridlock never settles + near floor, rival on floor + 10× separation, determinism pin, plus the honest-module certificate H–L (sha-pin + type-strip + rng-site census + stream-position-after-init, executed init state/mesh/camera/DOM pins, 4520-call bit-exact lockstep with pinned record/advance calls + 461,255-draw stream fingerprint + executed running-average identity, HUD byte-equality + synthetic-board estimator proofs, 6-seed executed-screen closure vs the oracle); ~3 s, exit non-zero on any miss)
Oracle
scripts/oracles/schelling.reference.json

Sources

T. C. Schelling, 'Dynamic Models of Segregation', Journal of Mathematical Sociology 1, 143–186 (1971); J. Bernoulli, Ars Conjectandi (1713); A. de Moivre, The Doctrine of Chances (1738)

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.