The pre-code steady-state accounting required by section 10. Source of truth is
budget/flow_budget.py; outputs are budget/flow_budget.csv, budget/flow_budget.xlsx.
Reproduce with python3 budget/flow_budget.py.
Method. Flows in units per in-game day. Labor = work lines + travel lines. Haul capacity is
derived from travel (carry_cap / weighted-average round-trip), so distances consume labor. A
population is feasible when utilization ≤ 1, feed margin ≥ 0, and beds ≥ P. The paper model
ignores latency and queuing, so it is an upper bound on feasibility and a lower bound on labor
(owner's review, section 10); it is validated against measured M3 runs.
Starting parameters (all [PROPOSED] until measured runs confirm them).
| Parameter | Value | Parameter | Value |
|---|---|---|---|
ticks_per_day |
600 | inn_service_slots × serve_rate_per_server |
2 × 10 = 20 beer/day |
work_fraction |
0.5 | target population (gate) | 12–14 (ref 13) |
beer_per_agent_day |
1.0 | immigration beer gate | > 3 days supply + free beds |
carry_cap |
10 (≈ 50 items/day at these distances) | tree_count_map |
8 (≈ 2× the sustainable need) |
ticks_per_edge / distances |
15 ticks; field 5, tree 7, build 6, well/brewery/silo 4, inn 3 | house_wood_cost, building_decay_days |
20 logs, 20 days |
| founders / buffers | 10–12; ~5 days beer + wheat buffer | foraging yield | 0 (switch off) |
Results at the target population (P = 13, foraging off).
| Quantity | Value | Acceptance target | Met |
|---|---|---|---|
| Labor utilization (demand / supply) | 0.843 (5.48 / 6.50 agent-days) | 75–90% | yes |
| Feed margin (inn cap − demand) / cap | 35% | ≥ 15% | yes |
| Wood demand / regrowth supply | 0.42 (4.0 / 9.6 logs/day) | ≈ half | yes |
| Bed margin | 3 beds | ≥ 0 | yes |
| Inn staffing line | 1.45 agent-days (26% of labor) | explicit | yes |
| Haul labor (travel-derived) | 0.82 agent-days | — | — |
| Foraging on/off comparison | shown (below) | required | yes |
Feasibility by population (foraging off).
| P | utilization | feed margin | bed margin | wood frac | feasible |
|---|---|---|---|---|---|
| 10 | 0.97 | 50% | 2 | 0.31 | yes |
| 11 | 0.91 | 45% | 1 | 0.31 | yes |
| 12 | 0.85 | 40% | 0 | 0.31 | yes |
| 13 | 0.84 | 35% | 3 | 0.42 | yes |
| 14 | 0.80 | 30% | 2 | 0.42 | yes |
| 15 | 0.76 | 25% | 1 | 0.42 | yes |
| 16 | 0.73 | 20% | 0 | 0.42 | yes |
| 18 | 0.85 | 10% | 2 | 0.52 | yes |
| 20 | 0.79 | 0% | 0 | 0.52 | yes |
Foraging switch. Turning foraging on (assumed yield 0.3 beer/agent/day) lowers beer demand, so at P = 13 utilization drops to 0.77 and the feed margin rises to 55%. Default remains off to keep the budget honest (section 5.5).
Findings. - The inn remains the master dial (cap 20 beer/day); the immigration gate at 12–14 keeps the village ~30–35% below the feeding cap, so it never rides the hard limit. - Travel time is what makes labor tight: without it the same parameters leave a large surplus (iteration 1, ~64% idle). With time-based edges the target sits at ~84% utilization, inside the owner's 75–90% band. - Serving is the single largest labor line (~26%), so inn staffing is budgeted explicitly. - Wood is now a visible brake: demand is ~42% of regrowth for a map with 8 trees; the initial four houses also cost a one-off 80 logs. Tree count is an explicit config parameter.
Open questions carried to the owner (do not decide): confirm the exact inn cap (18 vs 20) and
whether work_fraction 0.5 or 0.55 feels right; the paper model must be reconciled with measured M3
runs before any parameter is frozen.