Non symbolic AI

Hi,



My research in artificial life and artificial intelligence using evolutionary and dynamical systems has led me to start using physics simulations for the 'animats' that we are trying to evolve. My preferred language is Java but most of the physics simulators require some flavour of c/c++, so jME and jME-Physics got me really excited  :stuck_out_tongue:



My question is this: has anyone looked into building support into the engine for non-symbolic AI techniques such as genetic algorithms, artificial neural networks, swarm intelligence, neutral networks etc??



I would be really interested in getting involved in a project like this, if there is one!



Thanks

My wife and I have been researching AI in order to create a game-specific API for Artificial Intelligence.  If you are interested in assisting I would welcome the insights:



http://www.captiveimagination.com/forum/index.php?board=13.0



We are still in very early concept stages, but it is definitely something we are serious about developing.

That sounds great!



My experience is mostly in genetic algorithms, neural networks (CTRNNs etc) and complex systems such as cellula automata and L-Systems. I'm confident we could implement these techniques in jME!



I'm not sure how much you've already got done or even what kinds of things you want to implement etc. Is there an area were we can post ideas/documents etc??

Sure, just post a new topic in the board referenced above and we can discuss further.

though, i must comment that there's a reason for not being any ai libs out there(compared to all 3dengines + physics libs etc)…ai are moste often extremely tightly connected to the core gameplay and usually needs very game specific implementations…but, there's always a use for sample nn,snn,ga,l-s etc etc to copy paste from offcourse

That's what everyone says, but I don't believe it.



In fact, that's what people kept telling me when I decided to write a general purpose game-networking API and JGN is thriving and I haven't found a game that it can't be utilized in. :wink:



Perhaps it's just not had enough time considering the best way to create a general use game AI API.  :slight_smile:

well just look at the how the world looks…there are pretty many ai experts that has thought about this before(i know several very good)…making a lib with useful low level algorithms is possible offcourse(just like your network lib does)…but not a general high level api

though, i must comment that there's a reason for not being any ai libs out there(compared to all 3dengines + physics libs etc)...ai are moste often extremely tightly connected to the core gameplay and usually needs very game specific implementations...but, there's always a use for sample nn,snn,ga,l-s etc etc to copy paste from offcourse


I gotta say I agree with Darkfrog on this one, I think it is possible.

There are plenty of NN engines and GA engines around because the general structure of these techniques don't change, only the environment in which they're placed does. GOFAI techniques like search algorithms and logic/fuzzy logic tend to be the ones that are tightly bound to the environment because they require constraints and a lot of predefined knowledge about the context in which they are used. Hence the general move away from GOFAI towards dynamical systems approaches. Of course its still up to the game/simulation developer to define fitness functions, and neuronal input data etc you can't get away from that, but you wouldn't want to code the entire NN or GA or CA from scratch every time  :|

Its worth a try at least, and if it doesn't work then we'll have a load of code that, as you say, can be used as a reference for others  ;)

Hi I'm wolfgang, I stupidly made two accounts haha,



I've been working on an AI project which has resulted in making a general purpose Continuous Time Recurrent Neural Network (CTRNN) framework. These neural networks are incredibly useful and are used a lot in autonomous systems research, which makes them perfect for controlling computer game characters. I'm using jME/ODE to build a simple robot simulator for this project and have been using this CTRNN framework quite successfully for a few weeks! I was wondering if anyone (Darkfrog) would be interested in looking at the framework?



Its rather simple at the moment, but part of the project is to evolve the CTRNN to do specific things (i.e. phototaxis) so currently I'm extending the framework to be evolvable, if anyone is interested then I'll be happy to share the idea :wink:



Happy coding

yeah, I'd be very interested. :slight_smile:

great, how should I send it to you?

E-mail would be fine or if you'd like to hit that forum I referenced above it offers the ability to make posts with file attachments.

I posted it on the forum, hope you like it.  :slight_smile:

it would be kind of nice if interesting stuff like AI and networking discussions and code didnt always get sucked out to "other" forums…

Sorry its just the other forum had the ability to add a file to the message  :stuck_out_tongue:



Heres what I wrote in the other forum (minus the code of course)



Hi Darkfrog,

This is still rather rough, but the basic idea is that the agent (computer character) implements the CTRNNWatcher interface, when the CTRNN is updated it calls the watchers pre- and post-update methods. In these methods the inputs are given to the input neurons of the CTRNN, and the output neurons outputs can be retrieved.

The input neurons get given their input from sensors (I haven't given this code yet because its changing a lot!!) or can just be set directly. I'm developing a 'range sensor' at the mo for my research project (the sensors need a lot of work, there could be lots of pre-made sensors e.g. light sensors, range sensors, sound sensors etc, but all the sensors are built to the same interface so they can be extended by the game developer).

The output neurons receive their output state when the update method of the CTRNN is called, in my robot simulator these values set the rotational speed of two motors that drives wheels.

The CTRNN can be built from XML and saved to XML (this is a bit rough at the mo but it works), they can also be built from a genotype (this is something for my project but can definately be expanded to allow all sorts of GA's to evolve the CTRNN (this would be especially useful for AI researchers wanting to build robot simulations in jME!!)).

Thats it for the moment, but its something that can be extended Smiley These NN's are very useful (especially for people wanting to build robot sims) so I'm very interested in working on it and maybe creating a more general purpose API Cheesy



CTRNN background (just in case your not familiar with them)

A CTRNN is a dynamical system so the concept is rather different to that of a bog-standard feed forward (backprop) net. They are inherently recurrent in nature and so the concept of feeding input through a network to find a discrete output is non-existent. Each neuron is updated simultaneously according to this equation:

tauj * dyj/dt = -yj + sum(wij * ai(yi + bi)) + Inputj

where:
  tau = membrane potential or time constant of neuron
  y = neuron state at time t
  b = neuron bias
  ai(y + b) = activation of neuron ni, usually sigmoid function (1/1 + e(-(y + b)))
  sum(wij * ai) = sum of all connecting neurons ni activation * weight to neuron nj
  Input = input value to this neuron (if its an input neuron)

The neurons produce a spiking behaviour dependent on the value of tau and so do not produce discrete output. This NN is surprisingly powerful and can be used to control very complex behaviour. As is the case with most recent AI research especially evolutionary robotics.

Tell me what you think.
MrCoder said:

it would be kind of nice if interesting stuff like AI and networking discussions and code didnt always get sucked out to "other" forums...


You should start visiting my forum as well and you won't miss out on everything. ;)  It doesn't make sense that all of the networking discussions (particularly when they are directly related to JGN) should be discussed here does it?  :P

offcourse…but why are those topics never started over at your site? what i find a bit tedious is to have to follow lots of topics between two sites…but i'm lazy though :slight_smile:

hehe…many ARE started over at my site, but obviously you never see them.  :stuck_out_tongue:



jME users just expect to get an "all answers here" in this forum. :wink:

Hi and hello to that thread, that is really looking interssting to me.
It is a pitty that the thread seems to be some how older and finsihed from discussion and it also a pitty that the link in this thread is already broken. (And then people think the internet never forgets anything :-D)

What happend to this topic was ever something released for JMonkeyEngine reffering to EA and NN?
If so where could I read more about it?
(just as Info …
Right now I am also a bit experimenting outside of JME concerning GA & ANN.
I am actually to lazy to implemeneverything on my own so I thought of using JME one day as environment for the physics, SNNS ( stuttgart neural network simulator ), for NN Implementation and my own ideas for evolutionary stuff )

“13 years later”

…wow, that may be a record.

I think that was near JME version 1 timeframe. Definitely waaay before JME 3. 3-4 years before.

1 Like