Ignoring CPU time for a moment, what level of abstraction perfectly balances understandability and realism? If you go too real, if we could somehow simulate a real life cell, with protein folding and everything, it's probably too much for most lay people. You'd need a degree in biology too interact with it meaningfully. If you go too abstract, you end up with Conway's game of life. Generally just too limiting to interact with meaningfully.
I'm trying to discover that sweetspot between the two. The place where humans can interact with evolution on a maximally meaningful way. I've constructed a couple of test cases in my head for what I want the program to be capable of. I want multibots that can swim like a fish or like a squid
smoothly. I want bots to be able to form together like sheets of epethilial cells. I want things like volvox to be possible. I want bots that can dig into shapes and form burrows. I want to create a situation like the African plain, with lions taking down gazelles, and some gazelles being able to escape from the lion.
So far what I'm thinking is something like a uniform, undifferentiated blob. Something that can ooze through cracks, or surround food particles to absorb them. Maybe something like
Gish. I'm still working out the math for something like this. The blobbot could stretch itself in a certain direction or shrink to form something like a muscle.
Maybe bots could excrete something like bone (or an extracellular matrix, if you prefer) that they attach themselves to. Then you'd have the basis for a muscle/bone interaction.
Another option is to explore something like
fl0w. Maybe more differentialized, with different parts on an animal corresponding to different functions.
I'm really open to whatever people want to explore, especially with regards to physics. I'm learning more everyday about physical simulation, and there's not a whole lot that's really out of reach.
And to end on a more sober note, I'm aware of CPU hits, but truthfully you'd be surprised what is computationally expensive and what isn't. Making a bot's geometry arbitrarily complex doesn't really add that much to the computational cost because most bots aren't even close to most other bots. The difference between a complex to complex collision and a circle to circle collision is actually rather small, because you can usually simplify a complex mesh down to a far more managable bounding volume (a circle for instance).
Even the most ambitious ideas I've had haven't had a runtime performance worse than O(n^3), which is bad but isn't
that bad when you consider that we normally only run in the 100 to 1000 bot range anyway. The method presented here is actually pretty fast. Check out the video on the site to see. Most ideas I've considered are in the O(nlogn) range, which is about as good as anything like this is likely to be.
I'll scale back later as needed to get the program working at an appropriate cycle/sec mark. I'm interested right now in what people really wish the program was or allowed them to do.