# Balance Lab > Batch-simulate one specimen on the real game engine — sweep movement/feeding/eyespot tiers, the diet triangle and food richness, and measure intake, survival and travel in isolation. --- .. toc:: ### Movement × intake, isolated The arena couples everything — rivals, hunters, the NPC ecosystem, colony economics — which makes it hard to tell whether a build starved because its **movement** couldn't reach food, its **feeding part** couldn't take it, its **eyes** never saw it, or the dish was simply too poor. This lab strips all of that away: one specimen, the **exact engine the game runs** (`EVO.tick` — same movement archetypes, feeding cones, diet-class triangle and energy economy), in a dish reshaped to **food only** at a chosen richness. .. admonition::How to use it :color: blue **▶ Watch one run** renders the dish in slow motion so you can *see* a mechanic work (or not — a pseudopod at poor, say). **⚡ Run batch** executes N headless runs fast and reports per-run intake: prey eaten, dna banked, mean/min energy, survival or the starvation tick, distance covered and speed. Every batch's aggregate lands in the **session history**, so sweep one dial at a time (tier, diet, richness) and compare rows. .. exec::docs.balance_lab.balance_lab ### Reading the numbers - **survival %** — the headline: a balanced build at *medium* richness should mostly live. - **prey μ / dna μ** — the intake rate. Herbivores bank dna from grazing (prey stays 0); carnivores need kills — exactly as in-game, the **feeding part picks the eating lane** (a jaw hunts even on a herbivore's body, a filter grazes). - **energy μ / min** — how close the run skated to exhaustion; a low min with survival means the build lives tick-to-tick. - **dist / u-per-tick** — what the movement tier actually buys; compare none → great with the same feed to separate "couldn't reach food" from "couldn't eat it". Findings tuned here port straight into the game: the engine constants live in `lib/evolution/config.py` (ENERGY, SPAWN, diet classes in `lib/diet.py`) and this lab reads them live — change a constant, restart, re-run the same sweep. --- *Source: /balance-lab*