I just read a journal entry from Mr. Big Boss at Stardock and I have to disagree with the information about AI algorithm, CPU times and stuff.
I can understand that it is very limiting having to write algorithm that must be executing in timely milisseconds but, but in my humble opinion, more important that produce fast algorithm is to make them time efficient.
In the world of multi-threading, much can be made while the player is taking its turn. The AI characters can perform a lot precalculations before is their time to play.
In my experimental AI code, I like to split the AI into smaller pieces of code I call agents.
The main AI analyse information provided by those agents (wich by turn have that information pre-calculated) and them take decisions based on them.
The result is a very code efficient and realistic AI code. I say realistic because the communiction between the agents and main AI may result in interesting misunderstandings and this will result in unpredictable results. By unpredictable I don't mean buggy, but simply hmm... unpredictable, they may not take the same decision in very similar situations.
To improve unpredictability, another think I like to do is, when aplicable, limit the communication between the agents to the main AI to "subjective opinions".
For example (in the context of GalCiv2), if the main AI need to improve production is may ask a planet about their production capacity and instead of returning a number, the planet would simply answer: my production capacity is "very high" or "low" or "at maximum capacity". The main AI would then use this information to decide if is would ask the planet to improve do something or switch to another planet.
Another advantage of this model is that it is very easy to implement new features since it is just a matter of adding new agents and reconfigure the main AI to consider the new parameters.
Thanks for listening...
Kisses from me,
Edna