Previous Blog Next Blog
Prev/Next Blog
by date

Neural Networks

Neural Networks
Name:Craig Fortune
Date Posted:Feb 08, 2007
Rating:Not Rated
Public:YES
Comments:YES
RSS Feed:GarageGames Blog feedor Subscribe with .
Profile Page:View profile page for Craig Fortune

Blog post
Well, I'll start with the old adage of "long time no blog" and further the cliche by saying "I intend to start blogging regularly from now on." Thing is though, for once I think I might actually mean it :)

Usually my attempts at regular blogging have always fallen flat on their face by the sheer fact of not having something that I could blog the progress on frequently enough etc, alas now I have! Introducing...

Neural Networks in Torque

There may be some of you out there who recognise my name as that of an artist, this is true enough. (I have credits in some TGB tutorial art and older T2D demos, the RTS Kit, Dimenxion - check it out ion the GG store, its free - amongst other such stuff as many a GID etc) However I'm also a degree student in my final semester, my degree is "BSc Hons Computer Games Development." What this means is that I'm also a programmer who is at a stage nearing when he's supposed to be industry ready to some level.

This is where neural networks come into the fray, for my final year project I'm doing a research paper into cooperation and complex behaviours using NNs. Of note to the GG community is that I'm integrating the NEAT approach into TGE, I'm also using the RTS Kit addon.

NEAT
More NEAT

I've noticed a lot of interest in the GG community for neural networks in the past and hence I thought it might be of some use/interest to people if I blogged my progress and maybe ultimately provide some sort of download/demo of it. Let me know if you're at all bothered about seeing this ;)

Where its at currently

A class derived off RTSUnit called NeuralAI is spawnable and a highly hacked version of "windowsNEAT" is sitting inside tge with a bit of script functionality hooked up to it. (In reality it's actually playing its own little invisible minesweepers game when you run an RTS mission :D)

Doesn't sound much but when you consider windowsNEAT uses STL, it was a chore to get in. In the end I simply decided to disable torque's memory manager as the main work around. The main controller class can be told by script to go through the ticks of its current population until it's time to epoch the system. Epoch, rinse, repeat.

I suppose in a really-odd-round-about-way that means I've got NNs working in TGE :P Of course it'd be a much more interesting proposition if you could either see it in action or at least see its outputs... next blog maybe ;)

Blog also here...
If you've read this far you're either bored or actually have an interest in this random twittering... my blog is also here: craigfortune.blogspot.com and it might also include things I don't put up on GG.

Recent Blog Posts
List:08/08/08 - iPhones and Productivity
07/22/08 - Building community in purely single player games
12/10/07 - Skinned Mesh XSI Exporting
06/25/07 - Vehicle mounting system progress (video)
06/23/07 - Graduation and Freelancing
03/02/07 - NeuralNet FSM mapping
02/26/07 - Neural Nets are learning!
02/19/07 - Backing-Up, Repositories, XSI and Neural Networks Progression

Submit ResourceSubmit your own resources!

Johan Carlsson   (Feb 08, 2007 at 08:52 GMT)
H*ll yeah!

I'm totally into NEAT.

I'm currently porting rtNeat to PyRex, because I want to be able to tweak it and play around with it, so its a port not a wrapper.

I'm also into other ANNs, mostly SOM, but neat really got me hooked on GA too.
My vision is to use GA for other things, like evolving creatures (e.g. models) in
parallel with the evolution of the NN.

Cooperation sounds really interesting, I've been thinking of using sound as communication
between individuals, for instance for dinosaurs hunting in a pack.
E.g a set of sounds that can be detected and a set of sounds that can be emitted are
connected to the NN.
This problem probably needs FS-NEAT so it just selects the sounds it actually needs,
making the potential set of sounds larger without blotting the initial NN.


Looking forward to see what you come up with.
Cheers,
Johan

Maxim Lyulyukin   (Feb 08, 2007 at 09:52 GMT)
Interesting sounds here, good AI are always welcome... Is it any way to use NN not onlly in RTS games?
Anyway BIG job was done.. and more to be done... :)
I have basic knowledge about NN and interesting to see it in Torque, cause like more advanced AI in games.

Craig Fortune   (Feb 08, 2007 at 14:16 GMT)
@ Maxim:
Sure NNs can be used outside RTS games but as per any AI they become quite specific to the game they're used in so my implementation will in turn be quite RTS specific.

However something I want to do is try creating a boss character ala World of Warcraft that uses a Neual Net to control its behaviour. Imagine a boss that'll pick an attack that screws up your group's main offensive tactic ;) That'll keep ya on your toes... hehe.

@ Johan:
Yea I've had a brief look at FS-NEAT and it looks pretty cool on the outset. Personally I find it weird to be thinking about dropping some inputs altogether, technically NEAT can do that anyway by making the weighting coming from said input to its linked neuron negligible. And although this method creates even more minimal networks thanm standard NEAT and apparently creates them faster and will score even higher, you have to stop and ask why are you hooking these inputs up in the first place if they useless? lol ;)

Tom Bampton   (Feb 08, 2007 at 14:37 GMT)
Craig,

Hmm... you know, it might be kinda interesting to branch A&T when you have some usable NN stuff working ;)

T.

Tom Eastman (Eastbeast314)   (Feb 08, 2007 at 22:02 GMT)
I'm taking Introduction to Computational Neuroscience this term and we just started with some basic NNs - man that stuff is awesome!

Craig Fortune   (Feb 08, 2007 at 22:57 GMT)
@Tom Eastman:
Take a look at the NEAT approach, it gets even more awesome than basic NNs. Then FS-NEAT, as mentioned above, takes it that one step further into awesomeness ;)

Tom Eastman (Eastbeast314)   (Feb 08, 2007 at 23:20 GMT)
@ Craig:
Any good links? The Wiki article is pretty weak.

Craig Fortune   (Feb 08, 2007 at 23:23 GMT)
http://nn.cs.utexas.edu/downloads/papers/stanley.ec02.pdf

The paper on it. Its a bit of a beast to read for just one very particular subject, but its fascinating. Diagrams etc the whole way so it explains everything really well.

Also, its from MIT press, so you feel intelligent reading it :)

Johan Carlsson   (Feb 09, 2007 at 09:44 GMT)
Craig:
Quote:

And although this method creates even more minimal networks thanm standard NEAT and apparently creates them faster and will score even higher, you have to stop and ask why are you hooking these inputs up in the first place if they useless?"


First thing reason to let the Neat decide which inputs are useful is what you said,
the nets tend to be smaller and more efficient (links with zero weight are unnecessary links).
Smaller neat = more AI :-)

Second reason is that Neat does a much of a better job deciding what inputs are useful that
the human designer. So the human just need to provide any input they can think of and the FS-NEAT
may eventually find a use for it. Also if the Neat should be used to learn player strategies in real-time,
having additional unused inputs may be crucial. Inputs for one type of strategy might might be useless for another and the other way around.

Third, using feature selection makes it possible to give the Neat a very large of inputs to
evolve from, making it possible to evolve different species (not neat species, more like game-play species).
Each with its own evolutionary history and their own special strategies.
In a massive online world maybe even competing for recourses against other gp-species, creating a partial virtual ecosystems.

Edit:
Forth, FS-NEAT is such a small change to NEAT, and possible to rtNEAT as well so its definitively worth trying to implement.


Another innovation to NEAT I've found interesting is the rowing-eye.
The rowing-eye scans the input for useful patterns and use them.
The rowing-eye (that I know of) have only been applied to more discrete
types of problem, e.g. the board game Go, but have been very successful
in learning to pay Go incrementally (e.g. starting with smaller boards and
some what reusing strategies learn on smaller boards when moving to a large) .

I would like to investigate the possibility of using rowing-eye for some kind of
"visual sense", for instance scanning a array from a radar input instead of
feeding the whole she bang.
I'm hoping this would make it possible to use larger radars without bloating
the nets.

All my ideas are fairly untested and just wild dream at the moment.
So take it for what it is :-)
Edited on Feb 09, 2007 09:48 GMT

You must be a member and be logged in to either append comments or rate this resource.