Platform¶
The BDPD Arena is a configurable multi-agent simulation platform designed to isolate and recombine the dynamics of common-pool resources in a controlled, reproducible environment. Rather than assuming away complexity, the Arena treats agent heterogeneity, Knightian uncertainty about collapse thresholds, and wealth-driven power asymmetries as first-class experimental variables.
Design Philosophy¶
Existing analytical models can characterise equilibria but struggle to capture the combinatorial complexity that arises when heterogeneous agents, stochastic thresholds, and temporal asymmetries interact simultaneously. The BDPD Arena addresses this by:
- Treating agent composition as a parameter. The ratio of aggressive to conservative agents is swept systematically, revealing a discontinuous collapse threshold at a single aggressor.
- Making information structure configurable. Observability of the commons stock can be degraded with Gaussian noise at configurable resolution, directly testing whether transparency helps or hinders collective outcomes.
- Embedding temporal asymmetry. The Seneca Effect (slow growth, fast collapse) is operationalised through regen shocks, a hidden reserve, and stochastic collapse die — mechanisms that make the "way to ruin" rapid and uncertain.
- Allowing live structural change. The perturbation engine can override an agent's strategy mid-game (The Mule), testing the fragility of cooperative arrangements to well-timed defection.
Core Concepts¶
Logistic Commons¶
The resource stock \(S_t\) evolves according to a logistic growth model:
where \(H_t\) is total harvest, \(K\) is carrying capacity (default 150), and \(r\) is regeneration rate (default 0.12). Harvest capacity scales with accumulated wealth as \(1 + 0.05 \times w_{i,t}\), modelling the compounding advantage of early extractors.
Dual Engine: Logistic and Seneca¶
The platform supports two engine modes via the engine plugin registry (≥ v0.5.0):
| Mode | Model | Use |
|---|---|---|
logistic |
Single-stock logistic (default) | All existing sweeps (P1–P11, B1–B5) |
seneca |
Bardi (2011) three-variable R/C/P | Explicit Seneca cliff modelling |
In seneca mode, the commons is modelled as three coupled ODEs: Resources
(\(R\)), Capital (\(C\)), and Pollution (\(P\)). Capital accumulation drives
pollution with a delay, creating the characteristic false stability before
a tipping point.
Hidden Reserve & Forest Die (≥ v0.4.0)¶
A hidden reserve \(R_t\) is maintained behind the visible stock. When agents attempt to harvest beyond the visible stock, each excess unit triggers a \(d6\) roll. Success (≤ 4 by default) draws from the reserve; failure (5–6) causes immediate, irreversible collapse. This replaces a fixed gate threshold with Knightian uncertainty — agents cannot know how close they are to collapse until the die is cast.
Gate+Rank Victory¶
The game is won only if the resource has not collapsed (\(S_\text{final} > \text{threshold}\)). If the gate passes, agents are ranked by wealth; if it fails, all payoffs are zero. This two-stage function creates genuine tension between individual accumulation and collective preservation.
Nested Worlds (≥ v1.0)¶
A World federates N arenas into a single nested structure
without cloning them. The World adds three substrates above the
arena:
- Resource Links — one-way per-round outflow \(\alpha \cdot S_t^{(\text{src})}\) from source to target arena, applied two-pass so link order does not matter.
- Treaties — named cross-arena constraint records; the payload is read by world-level meta-agents which detect breaches and emit sanction perturbations.
- World meta-agents (C3.b) —
world_sanctioner,treaty_enforcer. They observe the full federation each global round and route perturbations to the offending arena viatarget: { arenaIds }.
A fourth ingredient, the exclude perturbation,
migrates a pact-violating player from its home arena to a
designated junk arena. The migration preserves wealth and
identity but resets pact membership.
Arena-level dynamics (single commons, single pact, single sanctioner) keep working unchanged when no World is used. See World, Treaties, and Governance for the full surface.
Architecture Overview¶
flowchart TD
subgraph CLIENT["Client Layer"]
WEB["Web Dashboard"]
SCRIPT["Orchestration Script"]
EXT["External Agent"]
end
subgraph SERVER["Node.js Server"]
API["REST API"]
REG["Arena Registry"]
STR["Streamer (SSE)"]
subgraph ARENA["Arena Instance"]
ENG["Game Engine"]
SCHED["Scheduler"]
PERT["Perturbation Engine"]
OBS["Observability Layer"]
end
subgraph AGENTS["Agent Runners"]
BUILTIN["Built-in Heuristics"]
SANDBOX["Sandboxed JS"]
HTTP["HTTP Dispatcher"]
end
end
SCRIPT --> API
API --> REG
REG --> ARENA
ENG --> SCHED
SCHED --> OBS
OBS --> AGENTS
AGENTS --> ENG
ENG --> PERT
ENG --> STR
See Architecture for a detailed breakdown of each subsystem.
How the Platform Relates to the Card Game¶
Every mechanical element of the platform has a direct analogue in The Forest of Humbaba:
| Platform | Card Game |
|---|---|
| Commons stock \(S_t\) | Forest Deck (visible cedars) |
| Hidden reserve | Box Reserve |
| Regeneration rate \(r\) | Forest Health (0–10) |
| Forest Die (stochastic collapse) | Physical Forest Die (d6) |
| Regen shock | Seneca Clip |
| Harvest capacity | Capacity tokens |
| The Mule (strategy override) | Stranger-King dual mode |
| Gate+Rank victory | Survival prerequisite |
| Observation noise | --forest-noise (LLM agents only) |
The mapping is exact: what happens in the platform has a direct analogue in the card game, and vice versa. This dual-mode design allows findings on one substrate to be tested for robustness on the other.
Agent Types¶
The platform supports four agent interfaces:
| Type | Description |
|---|---|
| Built-in | 5 deterministic heuristics (aggressive, conservative, adaptive, rcp, random) |
| Code (sandbox) | User-submitted JavaScript, 50ms timeout, persistent private memory |
| HTTP | External callback — any language, any model |
| LLM | via bdpd_agent.py Flask bridge → local llama-server or cloud API |
See Agent Types for strategy formulas, strategyParams, and a
worked code agent example.
Key Findings from the Platform¶
| Finding | Sweep | Detail |
|---|---|---|
| Discontinuous collapse threshold at 1 aggressor | P1, B1 | 100% → 0% gate pass; cliff at \(i \approx 0.05\) |
| Regen cannot offset aggression | P2, B3 | Rescue only at \(r \approx 0.95\), >7× canonical range |
| Reactive < Conservative | P8, B2 | Monotonic welfare cost of reactivity |
| Noise sweet spot at 35–50% | P9 | Welfare-optimal information degradation |
| Safe betrayal | CT4 | Defector profits +27% without triggering collapse |
| Graduated sanctions preserve commons | D2, D3 | Ladder ≥4/5 robust vs flat 1/5 |
| Treaty enforcement at scale (LLM) | D4 LLM | Enforcer fires 2.4× more than built-in baseline |
| Behavioural contagion in junk arena (LLM) | D5 LLM | Purity drops 1.00 → 0.63 when violators are LLMs |