SiriusDragon wrote:
As a result, for this semester I am creating a Neural Net and/or Genetic Algorithm based AI. Now, NNs require training in order to be effective so I was thinking, if I could somehow have a headless version of Spring I could run multiple copies of the game on my home PC and let the AI 'learn' that way.
What would you be using ANNs and GAs for really?
I believe it's a general thought that ANNs are just useless when it comes to game development (and really most of machine learning), and even though GAs are useful sometimes, they are often an overkill for the optimization problem you're faced with (it can probably be solved with more simple things like coordinate ascend/hill climbing/simulated annealing, etc.).
I had experience using GAs to optimize unit targeting in starcraft, and it was slow, although that was made in python and could be further optimized, it most likely wouldn't scale to the size of TA based mods. In the end, I just used coordinate ascend since I didn't have too many cycles to spare on the GA version, and the benefit wasn't noticeable.
I'm not sure entirely what you intend to use ANNs for, but if it's for supervised learning SVMs are probably much easier to implement and often give you a better result - not to mention they're easier to analyze in comparison to ANNs. For unsupervised learning I think K-means are probably much more meaningful than SOM, and if you wanted something more complex you could always aim for hierarchical clustering, then again speed is very important here.
I haven't looked up the entirety of the code of other AIs, but I doubt that any of them are using ANNs, GA or any other pure machine-learning based algorithm. In general, if you wanted more interesting behavior you should look at creating threat/defense regions, have your AI avoid enemy regions with high threat but aim for low threat/high valued(in resources) regions.
Perhaps, if you really wanted to you could use some type of supervised learning to generalize your AIs ability to choose which units to build depending on their stats (or just have it classify them in a couple of classes, like harassment/regular/AA, etc.).
A thing that might be interesting is getting good build orders for maps, I guess that would be a part of reinforcement learning or similar sequence-based learning. Then again, this is something that you would probably do off-line and maybe create a decision-tree model of possible build options - but in all likelihood, there aren't and probably never will be enough replays to give you a good enough model after 10-15 buildings given the amount of maps, mods and races spring has (in all likelihood it would be hard to get a good model even for much simpler RTSes like starcraft, but it's feasible).
Also I've never actually tried reading spring replays with programs, but I'm not sure if it even has information in proper format - a sad fact about starcraft was that the only available replay loaders weren't giving just successful build unit orders, but also ones that weren't accepted as valid, so basically you'd get 50 clicks of a nervous person trying to build a Probe without enough minerals.
Oh... look, I went offtopic, oh well.