This thread is not so much a question as a means to start a conversation about an AI that I am working on. I’m looking for comments and suggestions on several different parts (any part of this, really), and hopefully it will also give others ideas for their own projects. The posting is lengthy, and more parts, including code, and outlines will be added at various points. Much of the initial part is the background for how I got to this point, it can be skipped, if you choose.

HISTORY
I started working on a project about 15 years back that was to be a simulation of a lake seen from the point of view of a predator swimming in the lake (predators are prey until they reach a certain size). The behavior of all the other organisms in the lake would be based on a complex genetic algorithm (GA) that would determine just three things: Direction, speed, and duration. I wasn’t coding in any higher level behavior. The organism wouldn’t really know why it was acting, nor would the observer. The organism wasn’t told to feed, nor was it told that it SHOULD feed. Instead, the genome determined how it felt about the state of its stomach, which might or might not push the organism into feeding behavior. However, there wasn’t any specific feeding behavior, as the organism would start off not knowing what to eat, how to eat, or even that eating was a solution to the problem of an empty stomach.

When writing the code to decide the behavior (which was just the direction to swim, speed, and duration), I went to great lengths to put every decision and the magnitude of any response into the genome, with the result that the genome was well over 1000 genes, with each gene being a bit. The thresholds at which responses happened, and the magnitude of the response, were both in the genome, though which factors were considered at any one time was not in the genome…generally. Along the way I wrote a couple GA based programs that were used to build parts of the main program, as well as being spinoffs of the main program, and in doing so, I learned a few things about how many generations they should run and ways to improve the performance. Most of those notes can be seen in this thread:

http://www.vbforums.com/showthread.php?t=553187

I was in the process of revamping the behavior in a way that would push the genome to over 2000 genes when somebody stole the computer that had the current code on it, and when I went back to look at my notes, I couldn’t figure out what I had been working on. That was only a minor disappointment, though, because I was also becoming aware that I would never be able to finish the project. For the project to have worked, it required a 3D interface, and I totally suck at art. There are dozens of books out there telling people how to do transformations, rotations, and all like that. It’s just math, so it isn’t all that hard. The problem I had is that I am so bad at art that though I could understand HOW to rotate the scene, I couldn’t tell whether I SHOULD rotate the scene. I couldn’t even do a horrid job without extensive trial and error, and a good job was out of the question. The other problem was that any estimate I had about the rate of evolution suggested that the top predators might not learn how to hunt in less than months of continual runtime. Would anybody be interested in an evolving simulation? Perhaps. How about if you had to leave it running for months to see any notable changes? Not so much. On the other hand, I had enough experience with GA based programs that I felt fairly certain that the concept would work, in which case the predators might learn their job so effectively that the AI would be better than human intelligence. The human controlled fish would be no match for the AI fish, despite the two having the same physical system, seeing the same things, and living in the same world. That would be a worthy goal in itself. However, with the theft of the code, I faced the fact that I could never complete the UI, and might as well turn my attention elsewhere. I had a neat AI concept, but needed a program that was complex enough to make use of it, yet had a simple enough interface that I could create it with my seriously deficient art skills.

CURRENT SITUATION
One thing I considered was a chess playing program, but I quickly discovered that only bad and novice players use intelligence to play the game, good players do not. What would be the point of creating an artificial form of a bad chess player? After that, I hit upon the more practical idea of building a robot. As a field, Robotics is roughly at the same point that computing was at when Steve and Steve created the first Apple…or maybe a bit earlier than that. There are a handful of hobby platforms, not much standardization, and only a handful of sensors that are both within the price range of hobbyists, and are effective (and many of those are only marginally so). One of the results of this is that the bulk of robots being built by hobbyists are intended to run only for a few minutes, and do only one, often trivial, task. It’s kind of like the early hobby computing where even a half-assed calculator was a significant achievement for a hobbyist.

I wanted something that would run indefinitely, which meant that I needed a relatively robust platform (to hold the heavier batteries needed for lengthier runtimes), and low power components. I also wanted a complex brain capability. If the complex brain was on the robot, that would increase power consumption, which would require bigger batteries (or seriously shorter runtimes), and a larger footprint, none of which was desirable. Therefore, I decided to move the processing off of the robot itself. The robot in my design is nothing more than a platform to move around a handful of sensors, with just enough processing power to be able to communicate the sensor reads out to a separate computer via Bluetooth. As a side note, one of the results of this decision is that there is no reason to only have a single robot. As long as the brain is moved to my home network, and off of the hardware, then there can be any number of bots wandering around doing either the same, or different things, all controlled by the same brain, up to the limit of the bandwidth clutter on the Bluetooth frequencies. In effect, the robot is the house, not the mobile hardware. However, for now, there is just a single bot, which is an exploration and mapping bot.