In Progress Simulation Project · 2026

Backbench

A living fictional country that runs on classical AI — a deterministic political simulation where elections, coalitions, party splits, and scandals emerge from 30,000 voter agents and 120 MP agents, with no LLMs and no cloud. You play a career politician inside it: campaign, hold your seat, climb to minister, survive to become PM.

Backbench parliament view — hemicycle seat chart colored by party, with polls, player status, and a live event feed
Fig 01 — Parliament view mid-run: seat hemicycle, party standings, polls, and the event feed

The problem

Political games usually script their drama. Backbench asks whether a believable polity can emerge from classical systems instead — spatial voters, utility-driven MPs, and rule-based party lifecycles — with every outcome decomposable into legible causes rather than a scripted story.

Role & responsibilities

Sole designer and developer. Designed the agent models, election and coalition systems, the weekly action economy, and both drivers (graphical pygame and terminal). Owns tuning of the simulation parameters and the deterministic check suite that guards them.

Architecture

Pure-Python state machine: sim/ is presentation-free and driven by a single tick(state, actions) → events contract; drivers consume events without touching state. All randomness flows from one seeded generator, so every run is deterministic and replayable. Vote outcomes are computed as named utility terms, which powers the in-game why command that explains exactly which factors moved each vote.

Key features

  • 30,000 voter agents in a 2D ideological space and 120 MP agents with ambition, loyalty, grudges, and utility functions
  • Fully deterministic simulation — same seed, same country; autosaves and save/load with reference-identity checks
  • Emergent systems: 120-district FPTP and multi-member elections, coalition formation, confidence votes, party splits, scandals, a constitutional bench, and a press corps
  • Explainable votes — an inspect/why command decomposes every result into the named utility terms that drove it
  • Two drivers: a graphical pygame client (hemicycle view, district map, auto-play bot) and a plain terminal driver with spectate mode
  • No test framework — 43 runnable assertion checks guard worldgen, elections, parliament, persistence, and a 50-seed stability sweep

Outcomes

30k

voter agents per simulated country

120

MPs and districts per run

0

LLMs — every outcome is classical and explainable

Stack

PythonNumPypygameAgent-Based ModelingDeterministic Simulation