I didn't understand the whitepapers.
Two demos with sourcecode got me on the right track.

They are : DigiBrain v1 and v2 by Thomas Bleek (madwizard.org)
               SmartSweepers v1 zipfile (unsure about author, google stumbed on it)

Especially useful was the latter, as the author had written a number of webpages documenting the algorithms used, which include fusing of genetic learning algorithms with traditional FFNN's.
Posted on 2010-05-11 18:46:40 by Homer
I have no idea how this thread escaped me. Please continue! :)
Posted on 2010-05-12 00:26:04 by ti_mo_n
I pretty much already closed this thread, except for specific questions.
The only reason you noticed it is because it was bumped from the dead... although its still a fairly fresh corpse :P
Posted on 2010-05-14 11:09:52 by Homer
And so the AI will forever remain a mystery...  Too bad ;P I was hoping for some in-depth kind of posts.
Posted on 2010-05-15 19:48:41 by ti_mo_n

This thread was about implementing a neural network-based AI, which uses genetic algorithms to train the neural network (self-learning). If you want to ask any questions about neural networks, where to find code, how to get from a neural network to an ai, etc, go ahead !
Posted on 2010-05-15 20:22:49 by Homer
There are hundreds of thousands of articles and tutorials about neural networks, genetic algorithms and AI in the Internet. Are the any you could recommend for beginners? Anything you learned from?

I've read a thing or two on these topics and now I think I can understand simple inputs -> outputs networks (like the one here). What bothers me is how do you implement complex decisions, not ones based on simple inputs.
Let's imagine a 3d shooter game (Gears of war, for example ;p)  . I, more or less, know how would one need to write a NN/GA/AI to make it shoot targets in its field of view. What I absolutely DON'T know is how do you make it "creative". Specifically, how would you make it do the following tasks:
1) Turn around if you don't see anyone - maybe someone is behind you. If not, continue doing what you were doing before turning around.
2) Look for an andvantageous location and wait for someone to come (aka 'camping').
3) Plant traps in locations frequently visited by enemies, preferably plant them (the traps) in hard to spot locations.

AD1: I have no idea what input-output logic would tell the bot "turn around and if you see nothing then continue".
AD2: How would you make it think that a location is advantageous, or not (without hardcoded scripts/hints, of course)
AD3: How would you make it think that a location is frequently visited and hard to spot by humans.

Any suggestions? ...Or do i completely misunderstand the topic? ^^'
Posted on 2010-05-16 07:15:53 by ti_mo_n

Specifically, how would you make it do the following tasks:
1) Turn around if you don't see anyone - maybe someone is behind you. If not, continue doing what you were doing before
turning around.

Not specifically a job for Neural Network AI - although we can train the NNAI to do it, using the genetic algorithm, and/or live training.
However, in this case, I would implement this by firstly nominating a 'proximity radius' around the ai - if there is an enemy within that radius, and outside the field of view, I would use a probability calculation (dice roll) to make the AI periodically rotate that enemy into the field of view - of course the enemy could still be obscured (occluded) ;)


2) Look for an andvantageous location and wait for someone to come (aka 'camping').

Have you heard of a Signed Distance Map? Imagine that you can assign the walls of the world to be positive and negative - perhaps thinking in terms of magnetism will help. We can 'color' the world in terms of any abstract attribute we choose, by adding a new vertex component for that purpose.
However, most game studios just script a list of likely locations they discovered during testing - think "spawn points".
This leads to predictable and unbelievable gameplay.


3) Plant traps in locations frequently visited by enemies, preferably plant them (the traps) in hard to spot locations.

Same as the above. But how would I do it? Neural Network , manual training: In the last two cases, I would take control of one of the AI in my game, and run around doing what I want the AI to do, with the AI in 'Training Mode'.
Then I would put the AI in 'Run Mode' and let it control itself.
If the world position is one of the inputs into the neural network, then the AI will do similar things in similar places to what we 'showed it'... and if world position is NOT one of the inputs, the AI will STILL do similar things - but in similar environmental conditions (given the other environmental inputs to the nnet).
For games like Quake, you basically want the AI to mimick the behavior of players in the game - so you can use any player input state as a tool to teach any / all ai in the entire game, at all times.. this will result in game enemies which quickly adjust their behavior to counter you, having learned to do so from you or other human players.
Literally, we attach all the inputs to a Player that we have in our AI, then just pretend the Player is an AI, and use its state (including the user's control inputs) to reinforcement-train some or all of the NNet population

But why stop there with a pure scheme?
What if we have a script that controls a set of variables (the AI's stats) which are in turn used as some or all of the inputs into a NNet? Now we can develop more a comprehensive array of behaviors, which are partly formed from experience, and partly guided by our scripting of some/all the inputs.

Don't think that scripted AI and NNet AI are completely mutually exclusive - these schemes CAN work together, and produce better/more interesting/less predictable/richer results that either scheme can alone - kept within sane and safe bounds by the limits imposed by our scripting of the input values, and yet dynamically changing via realtime reinforcement learning techniques.

But you have to start somewhere - and you really need code that can drive a population rather than just one individual, because you WILL want your AI to be aware of one another ;)

Posted on 2010-05-16 10:48:15 by Homer
Thank you! Looks like the topic is even broader than I suspected. I'll be back with more questions when I learn more ^^
Posted on 2010-05-16 11:38:56 by ti_mo_n