feat: establish simulation scaling baseline

This commit is contained in:
Rijad Zuzo
2026-07-16 13:07:01 +02:00
parent 4f88d15e12
commit 4be72639d8
14 changed files with 1004 additions and 15 deletions
+24 -6
View File
@@ -467,7 +467,10 @@ a smaller active population remains fully represented. Moving an NPC between
fidelity levels preserves identity, inventory, task, relationships, and
important history.
Set the target population only after collecting baseline measurements.
[Simulation scaling baseline 01](benchmarks/SIMULATION_SCALING_BASELINE_01.md)
sets the first local target at 600 data-only full-fidelity NPCs while preserving
deterministic state. Revisit that target when world presentation or LOD enters
the measured workload.
## Milestone 9 — Player interaction and social agency
@@ -849,14 +852,29 @@ cared-about shortage now produces an inspectable opportunity whose NPC and
player responses both use the originating resource, relationship, knowledge,
and event systems rather than quest-only duplicates.
The immediate next slice should begin Milestone 8 with a deterministic headless
scaling baseline: measure tick throughput, serialized-state growth, and retained
history across increasing NPC/event counts using the current full-fidelity
simulation. Set an evidence-backed target before adding spatial partitions,
batching, or active/abstract LOD transitions.
The first Milestone 8 measurement slice is complete. A reusable schema-valid
headless fixture and CLI runner now measure three fresh deterministic samples
across 6, 60, and 600 NPCs plus 600 and 6,000 seeded event histories. The
reviewed Apple M1 Max baseline reaches 65.84 ticks per second at 600 NPCs, but
10x population from 60 to 600 costs about 24.4x per tick and creates 20,950
objective events over 200 measured ticks. The machine-readable samples,
workload exclusions, checksums, and local 50-ticks-per-second reference target
live in
[Simulation scaling baseline 01](benchmarks/SIMULATION_SCALING_BASELINE_01.md).
The immediate next slice should build one bounded per-tick population view for
the existing trusted-starving-subject query. That scarce-food path currently
rebuilds an all-NPC lookup for each applicable idle decision, making it the
first code-level candidate consistent with the measured superlinear growth.
Preserve exact selection/checksum behavior and rerun the same ledger before
choosing a spatial index or active/abstract LOD design.
Recently completed:
- Deterministic simulation scaling baseline: schema-valid full-fidelity
fixtures, a repeatable CLI runner, and a fast headless regression now record
population throughput, phase timing, serialized-state growth, history
retention, event growth, and deterministic checksums before optimization.
- Simulation responsibility cleanup: storage/inventory transactions now live
in `VillageEconomy`, ordered history and rate queries live in
`SimulationEventLog`, and `SimulationManager` exposes a shorter tick