Do you plan on monetizing this somehow? If not, open sourcing some, if not all, would be pretty cool, even if it weren't necessarily licensed in a way that others could 'take' it, if that's your concern. Nonetheless, a very cool project.
Do you plan on monetizing this somehow? If not, open sourcing some, if not all, would be pretty cool, even if it weren't necessarily licensed in a way that others could 'take' it, if that's your concern. Nonetheless, a very cool project.
To keep it sane, I don’t do naive all-vs-all. I use:
Zone-based spatial indexing so most checks only run against local neighbors (roughly n/16 instead of n). Temporal caching of indices so they’re not rebuilt every tick. Statistical sampling for crowd density at high population (estimate from a fixed-size sample instead of full scans).
So in practice it’s closer to O(n² / k), with k ≈ 16–50 depending on zone layout and population. You still see spikes during blooms, but it’s usually 10–30× faster than naive pairwise checks.
You might be able to do a bit better for some of these, check this out https://en.wikipedia.org/wiki/N-body_simulation
Essentially the idea in some optimizations is to divide the space into cells, and so you can discard relations with elements in far away cells.
One big recent win was actually on the rendering side: I was rebuilding complex morphology geometry every frame for large organisms. I’ve added caching for that, which significantly reduced spikes during population blooms.
At very high populations the sim tick itself becomes the bottleneck, even for mostly O(n) logic per organism. When populations crash (which they usually do ecologically), performance recovers.
Quad trees / more adaptive structures are on my radar, but I’m trying to balance complexity vs predictability for now.
I’ve spent a lot of time optimizing hot paths and getting calculations down, but when the ecology goes a bit wild, you’ll still see temporary spikes. If you want to focus on stats only, you can switch to Simmer mode (no graphs) or turn off the arena, which reduces rendering work quite a bit.