Steve Grand’s "Creatures" Neurons simulated on Arduino Uno

Neural_Servo_Control.txt (4506Bytes)

Hey everyone, it’s me again.

So today I’ve been working on a project: recreating Steve Grand’s artificial neural networks from the old “Creatures” games on Arduino. Why, you ask?

Well, I honestly think that the game’s namesake Creatures are one of the closest things we have to a “true” digital AI, in my opinion, along with the fact that these neurons might work for Arduino, having been rapidly simulated on older computers. While Franklin’s LIDA might be the number one “true” AI (it is claimed to display some aspects of consciousness,) it is not available for just anyone to use (and with no way it would ever fit on an Arduino). That’s where this AI comes in.

The code will be made available soon. I plan to make a Creatures-esque AI out of these neurons, with improvements. However, it will not be for sale, due to it possibly being copyrighted by Gameware- but it will be open source, for non-commercial use only (again, the neural model might be copyrighted).

And in case you’re wondering,.. This program uses only 6% of program storage space and 2% dynamic memory.

Thank you for reading!

Edit: Had to include a text file of the sketch because it wouldn't accept the .ino file... Just copy and paste it into your Arduino IDE of choice, wire it up, and run it! :-)

Update: Looked over and modified my code, and realized that the neurons were printing the same value. Nothing was actually really doing anything (except making a servo move). I think I'll just use a more "modern" spiking neural network. Oh, well... The idea was nice, and it worked really well in Creatures. Bummer.

Possible coding problem

Thanks for posting. I loaded and looked at the code. The following lines (around line 103) make no sense to me:

         if (stw[sw] == ltw[lw]) {

            stw[sw] = ltw[lw];


Those lines just mean “

Those lines just mean “ when stw[sw] and ltw[lw] become the same, make them stay the same” (I read some things about that in my reference). Otherwise, the final “weight” just wouldn’t exist.

In other words, I just copied how Steve Grand did it. Still, thank you for your help- it is greatly appreciated!


They only stay the same if they are already the same. I suspect a good compiler would optimize the code away. I only mention because is it a logic error that looks like a typo to me. I make them all the time!!!


We’ll have to agree to

We’ll have to agree to disagree. But thank you for your help.