About this demo
A generative agent-based model of a Mongolian pasture, built as an interview demo. Every number on screen is synthetic.
Research question
Do generative agents (LLM herders reasoning in natural language) allocate grazing differently from classical rule-based herders when both act on an identical landscape, identical weather series and an identical random seed?
The comparison is the point: same seed, same grid, same 26 or 52 weeks — only the decision layer changes. Headline outcomes are cumulative intake energy, the Gini coefficient of grazing pressure across cells, and final mean biomass.
Agent architecture
Decisions are layered. A herder household perceives its own zones, neighbours' messages, the weather bulletin and the market price, then assigns a target zone to each of its herds. Each herd is itself an agent: it picks a cell inside that zone and may stray one zone away, which is recorded as non-compliance.
Everything below that is mechanistic and has no LLM: vegetation regrowth, intake, body condition, deaths, water and degradation. Wildlife (a gazelle herd) can be run as rule or LLM. Climate is scripted from the seed; an optional narrator turns the scripted weather into a weekly bulletin the herders read.
Decision flow
What is synthetic here
The 32×32 grid, its zones, terrain and biomass, the three households and their personalities, the herd sizes, the weather series and every metric are generated from a seed. No field data, no remote sensing product and no household survey went into this build.
The map is anchored near Bulgan, Mongolia only so the GIS view has plausible satellite imagery underneath. Nothing on it is a measurement.
What a real study would swap in
Biomass would come from Sentinel-2 derived NDVI or a fitted biomass product rather than a logistic regrowth toy, resampled to roughly an 80 m grid instead of 250 m cells.
Herd movement would be fitted to GPS collar tracks, and herder decisions calibrated against household interviews and off-take records. Weather would be reanalysis plus station data, and dzud years taken from the historical record rather than a preset.
Providers
Agents are routed by how much reasoning they need. Herders (multi-step trade-offs, negotiation) go to Kimi (OpenAI-compatible, JSON mode, thinking always on, about 2–5 s per call, 5-hour usage quota). Herds, wildlife and the climate narrator go to a self-hosted Ollama qwen3:8b (thinking off, JSON format, 8 parallel slots, about 1 s per call). If one provider fails three times in a row its tier is rerouted to the other; if both fail the demo replays a recorded run. Roughly eleven agent calls run concurrently per week: three herders, six herds, one wildlife agent and the climate narrator.
Every LLM call has a rule-based policy behind it. On timeout or malformed JSON the rule policy answers and the decision is tagged FALLBACK; if failures pile up, the app drops to replaying a recorded run so the demo never stalls.