Vault

democracy3-solver

“Solve” Positech’s Democracy 3 by extracting its game-data model and running optimization on it.

Logical name: democracy3-solver · Sibling path: ../democracy3-solver (resolved on this machine via .claude/local-paths.md) · Remote: https://github.com/chrisaacson69/democracy3-solver (public) · Stack: Python (LP/MILP library deferred)

Links: MOO1 Opening Optimizer (sister “solve a game with a sim + optimizer” project), project SDK, Three-Layer Method

Overview

Democracy 3’s entire simulation is data, not code: data/simulation/*.csv defines a feedback network of ~40 simulation values, ~123 policies, 21 voter groups, and situations, where every node emits effects that are polynomial functions of a source value x (optionally lagged by inertia). A turn resolves the network to a fixed point; vote share is read off the voter groups. That makes the game a nonlinear constrained optimization over a fixed-point simulator — LP/MILP are the tractable approximations, not the native form.

Two-layer architecture: (1) a grounded equilibrium simulator built by converting the CSV grammar (the oracle), then (2) an optimizer on top — linearized LP for marginal advice, MILP for a global solve — with every candidate scored by Layer 1. This is the verification-layer thesis made concrete: the simulator is the accumulated state that keeps the optimizer honest.

Goals

Notes

Tags

python, games, simulation