So I'm way behind with this thread, sorry about that. I'm going to go through now and try and reply to everything I've missed, hopefully without repeating too much of whats already been said.
...So having read all of the above posts, I like a lot of the ideas, but I also see a lot of impracticalities. Please don't take the comments below too negatively, I tend to respond mostly when I see a problem, rather than pointing out everything I agree with. I'll add a tl;dr/summary at the bottom of the main problems so far and what we might want/need to do about them.
While I agree that the AI's response needs to a stimulus needs to change according to it's internal state, or other information, I don't like the idea of 'mode switching'. There are continuous alternatives which could achieve the same result, but with more finesse in it's response. For example, as you get hungrier you worry less and less about spikes. At first this means you'll risk going near a predator to eat prey, then you become more willing to eat spiky/well defended prey, and eventually you may even try to attack a predator. Something like this:
For the reasons you explain later in your post, this is a terrible idea. It's something I've struggled with in some boids based AI's I've written before, even with simply collision avoidance an agent can avoid a single obstacle, but finds it almost impossible to squeeze between, or go around, two nearby ones. You need to aggregate inputs somehow, though I suspect simply adding them would be overly simple.
I like the prototype. I'm guessing it's improved upon later, so I won't comment much on this one. The main problem here is that the agent tries to go through the predator, and doesn't avoid it until it has to, a blended approach might have it giving the predator a wide birth instead. Do you matlab code for these? I'd like to try modifying them at some point.
This is the reason I was referring to, though you have the additional problem of the AI fixating on one stimulus at a time, when a more optimal, and more natural, behaviour is to react to each stimulus in proportion to its importance.
This, and the idea of evolving both how responses are chosen and what they do, is interesting. I still don't like the idea of having absolute responses, and only picking one, but there may be something in this.
This is possibly the biggest advantage of the above.
The rest of your species is AI controlled, though what your hinting at here is interesting too. Could we have a sort of macro, or instinct, system - where you either trigger a preset behaviour with a keypress, or actually have the AI take over in certain circumstances. Just a thought for now.
This is something we're probably not doing, translating the players actions into the AI/CPA system is something we're really not sure is possible.
As much as I have no idea how this would be done, it'd be nice not to force people to use the behaviour editor.
Apart from my usual complaint about continuity, what you propose in this post is pretty good, more specific comments below:
Sort of. You have horizontal gene transfer through plasmids. Some microbes do have sexual reproduction, though I'm not sure how any of this would affect CPA?
As before, this is terrible for a number of reasons, we need to be able to respond to multiple stimuli at the same time. Having discrete responses does make this more difficult, so I'm not sure how that would be possible in this system.
This looks ok for the species in the player patch. One thing I don't think we've considered is how any of this will work in other patches? There will be no microbe interactions from which the AI can learn.
This doesn't work with the possibility of the AI adding new responses. Picking cost functions is (to me) by far the hardest part of evolving a system, especially when you've got competing costs. We can't evolve the costs functions (meta-evolution), we won't have anywhere near enough data for that. Short of fixing the possible responses and only allowing those, I'm not sure how we get round this one either.
We really want to avoid running simulations outside whats going on during the players gameplay, the sheer number of species and interactions going on would make it very difficult to do these in an acceptable amount of time.
This is a huge problem, especially when scaled up to the number of species we'd like to have. This is the case pretty much no matter what system we use though, so a key criteria for picking that system has to be how easily it can be evolved.
I like the idea of simplifying input this way, but it falls down due to the binary response to organelles. This would conceivably result in every species evolving a tiny spike, which would cause everything to run away from it... which would eventually lead to any number of spikes being ignored by all AI's because every cell has at least one. While a bitstring is a nice piece of data to evolve, most species will end up with most organelles, and look very similar if abstracted this way.
Which reminds me - I don't think we've ever considered how AI could play into CPA, if it does at all? Basic stuff, like does spp A consider spp B prey, could have an affect, but the detail of a full AI system would make CPA exponentially more complicated than it already is.
If, then, AI does not feed into CPA, and therefore doesn't really affect it's survival chances, that significantly simplifies what the AI needs to do - it doesn't need to be optimal at anything, it just needs to provide the player with an interesting gameplay experience. It may be we still want more abstract features to feed into CPA (will defend with agents, will 'berserk' when outnumbered, will only feed on autotrophs), which could add some flavour to the AI's in game behaviour. Again, this is just a thought for now, a detailed AI would be nice, but can we afford it, and do we need it?
Conserving energy by doing nothing could be very important in some environments... though rather dull gameplay wise.
This is more the sort of thing I had in mind.
This, and the rest of that post, are much more like it, with continuous and interacting responses to stimuli. It still relies on discrete responses, which works fairly well in this system, though still has drawbacks. It would also require as much if not more data to evolve than @tjwhale summary post above.
While I like this interaction, there are multiple ways of achieving the same thing in the systems proposed so far. You can change your maxes as above (effectively making it almost impossible to flee from A), you can change the shape of the response curves to D and N, you can simply remove the fight response when dealing with B, and so on (I'd give more examples, but I'd end up confusing the different systems proposed so far). My point is, if we want a system to be quickly, cheaply evolvable, I would guess that having only one way to achieve a result would simplify things. Maybe all functions have a [0 1] range, and only the response to stimuli changes? This is something to consider regardless of the system.
As with floating, your discounting energy usage. If you can't outrun something, standing may give you more energy with which to fight effectively. It's not always going to be better or worse than fleeing.
I like your prototype, but this is a bit of a flaw. Effectively each species needs to learn very little to be optimal - which species are friend, which are foe, and which are neutral. That's a very simple set of information to learn given only 6 species. The rest of the setup and process is pretty good, but your not actually testing a sufficiently complex scenario to see if this would work for thrive.
While I agree that the AI shouldn't be optimal, it should be interesting, I don't think that should necessarily come from hobbling the AI. An AI which forgets about you every 20 generations is exploitable, and probably as annoying as a dumb one. If possible, the variable behaviour, and the interesting interactions which result, should come from the environment, not the AI. Given multiple cells to respond to, the behaviour of the AI should vary from simply running away or fighting one target. A microbe that's been cornered by other cells, or is exhausted, will act differently to one faced with just the player (this is another reason I don't like using simulations for training, the training scenario will never be realistic, involved just one or a few cells to respond to). To feel what this is like, go and play http://agar.io/ for a while - the concept is simple, eat smaller cells, avoid bigger ones, but it becomes much more interesting due to the human behaviour behind each cell. Much bigger cells ignore you, but often (unintentionally) herd medium cells around, forcing them to interact when in an empty arena they could simply outrun each other.
Thinking about this some more, remember that these AI aren't learning, they're evolving. What an AI knows isn't limited by what it experiences in its lifetime (like how a toddler learns) but how its instincts have changed over multiple generations. Is memory relevant in that scenario? Even if it isn't, if it makes the game more interesting it may be worth having.
This is getting better, you have something more complex to learn, but have managed to keep the response simple. I like that your using knowledge about yourself as well as about others. Would be interesting to see how it fared in a larger simulation.
- We need to be careful of how much time/cpu is needed to evolve an effective AI. Pe-evolving some as seeds is a good way to reduce this, but we still need to have effective evolution between generations. I don't think we can afford to run simulations, and I'm not sure how we'll get any data for CPA-driven patches.
- Given the above, we need to design an AI which can be easily/cheaply evolved. That doesn't just mean increasing the rate at which it learns, or giving it more information, it means building an abstraction that efficiently represents what the AI needs to know and can be efficiently optimised given the data we can afford to give it. It also means sacrificing optimality, which is fine so long as the resulting behaviour/gameplay is interesting.
- If we can't evolve AI for CPA-driven patches, then the AI can't have any intricate effects on CPA. Even if we can, the CPA is already incredibly complex, and adding behaviour to it will make it much more so. We can do that, or we can simplify/abstract the AI input to the CPA (e.g.: predatory, aggressive, passive, hunts in packs, etc.). If we do that, then can we simplify the in game AI to the same degree? Do we need to evolve responses to specific species, or can we simply tell the AI (rather than have it learn) whether a given cell is weaker than it, and have it act according to its 'personality' rather than learned behaviour? The point of the AI becomes to be interesting, not to evolve/become an optimal survivor.
- The AI needs to respond to multiple, possibly conflicting, stimuli. Becoming fixated on a single other cell leads to death far too often. The later prototypes are heading more in this direction (I think @whodatXLIV's post #20 comes closest).
- If possible, I'd like responses to be continuous. I know I say this far too often, but there are two good reasons for this - #1 it leads to more organic behaviour, with degrees of response and blends of behaviour; #2 computers really don't like making logical (if then, switch) choices repetitively, doing the same calculation 'do x of a and y of b' thousands of times is far more efficient that looping over 'if x < y do a, otherwise do c'.
I think that's all I can manage for now, tomorrow I'll try and come up with some of my own suggestions rather than just criticising yours. Your all doing great work, there's a lot of great suggestions and solutions here, but there's plenty more work to be done.