ABM Sugarscape — does an LLM f reproduce a rule f?¶
studies/abm_sugarscape/ · not a reference study · an umbrella shell over
the sibling SocioVerse-ABM benchmark
Does foraging on an uneven sugar field produce wealth inequality, and does an
LLM agent reproduce it? Sugarscape is the worked example of a family of
eleven abm_* studies that all exist to ask one question: swap the rule
behaviour function for an LLM one, hold P and E fixed, and see whether the
macro pattern survives. This is deliberately the thinnest page in the gallery,
because the study directory is deliberately the thinnest thing in studies/.
What is actually here¶
studies/abm_sugarscape/ contains exactly two files: an 18-line study.yaml
and an __init__.py whose make_bundles() delegates to
studies/_abm_common/make_abm_bundles("sugarscape", …). The shared umbrella
machinery lives in studies/_abm_common/; the task itself — grid, agents,
rule_f, llm_f, evaluation — lives in the sibling repository under
SocioVerse-ABM/tasks/market/sugarscape/.
Needs the sibling checkout
The umbrella resolves SocioVerse-ABM from $SV_ABM_ROOT, else as a
sibling directory of the beta repo. Without it, nothing runs — and
tests/test_abm_sugarscape.py skips rather than fails, the same
contract the Chicago study uses when its census data is absent.
P / E / B¶
| what it is | |
|---|---|
| P | 200 citizens on a 50×50 toroidal grid, ids sugarscape-0000 …, each with metabolism drawn from 1–4, vision from 1–6, and initial sugar from 5–25. interaction: none. Agents starve and leave the grid; beta's persona pool stays fixed and the umbrella returns an empty Observation for a departed agent. |
| E | The sugar landscape: patch capacity max 4, regrowth rate 1 per step. |
| B | One action kind: move. mode is rule | llm | hybrid, defaulting to rule. |
The LLM branch is worth looking at because of how narrow it is: the agent is shown its current sugar and a numbered menu of reachable cells (each with the cell's sugar and distance) and returns only an index. That is the whole interface. Nothing about the comparison depends on the LLM writing prose — it picks from the same candidate set the rule function picks from, which is what makes the comparison clean.
Metrics: alive, mean_sugar, gini. There are no metric_descriptions and
no display_metrics — another sign of how minimal an umbrella shell is meant
to be.
One step, and the horizon¶
One step is one forage-and-metabolize round: every surviving citizen moves to a
reachable cell, harvests it, pays its metabolism, and the patches regrow.
n_steps: 30 in study.yaml, seed: 42.
advance_to() in the umbrella provider returns [] — there are no
interventions at all, in this study or any of its ten siblings. That is not
an omission; it is the design. A benchmark that is asking whether one f
reproduces another must not have an exogenous shock confounding the comparison.
Results¶
No committed results, no grounding sidecar, no report
This study ships as structure only. There is no trajectory/, no
reports/, no grounding/ — to get numbers you run it yourself against
the sibling checkout.
The only asserted facts about its behaviour live in
tests/test_abm_sugarscape.py:
| assertion | what it pins down |
|---|---|
31 metric rows for n_steps=30 |
the t=0 baseline plus one row per step |
alive at the last step < alive at the first |
citizens do starve; the disappearing-agent path is exercised |
final gini within [0, 1] |
the inequality metric is well-formed |
exact parity with the native SocioVerse-ABM trajectory on alive, mean_sugar and gini, step by step |
the umbrella is a faithful re-host, not a reimplementation |
That last test is the real content of the page. Parity is exact — not
approximate — because the active agent set and the action ordering are
identical (agent-id order, same seed) on both sides. It means any difference
you later observe between mode: rule and mode: llm is attributable to the
behaviour function and to nothing else in the stack.
And the proposition scales beyond sugarscape. Across the full SocioVerse-ABM benchmark — the eleven classic models this family mirrors — LLM behaviour functions reproduce the rule dynamics with an average consistency around 0.90, fairly evenly across model families and across GPT-4o / DeepSeek-V3 / Qwen3:

Grounding¶
There is no grounding/grounding.json here, and that is consistent rather than
sloppy: a benchmark study is not making a claim about the world. Its
parameters are the task's published defaults, and its validity claim is
internal — parity against the original implementation, enforced by a test in
CI rather than by a citation in a ledger.
Contrast that with the research cases on the other pages, where the whole point of the sidecar is that load-bearing numbers about the real world must cite a fact or declare an assumption. See Grounding & Provenance for when a sidecar is doing work and when it would be ceremony.
What you can fork¶
adjustable_params from study.yaml:
| param | the question it opens |
|---|---|
mode (rule\|llm\|hybrid) |
the question this family exists for: does the LLM f reproduce the rule f's inequality curve? hybrid mixes the two populations. |
n_steps |
30 steps is short for a Gini to settle; the task's own default config runs longer. |
seed |
how much of any rule-vs-LLM gap is seed noise? |
grid size / n_citizens |
density is the main driver of starvation pressure. |
| vision / metabolism ranges | the classic Sugarscape levers on who survives and who accumulates. |
regrowth |
scarcity vs abundance — the strongest single lever on whether inequality emerges at all. |
The ten sibling studies (abm_schelling, abm_sir, abm_boids,
abm_nasch, abm_social_force, abm_lux_marchesi, abm_minority_game,
abm_axelrod, abm_civil_violence, abm_hegselmann_krause) follow the
identical shell-plus-umbrella shape, so anything you learn about forking this
one transfers directly.