Monday, October 5, 2009

Thoughts, ideas, and progress

Finally figured out a way to do something I wanted to do in VB.net. So now my rudimentary mouse/keyboard control is working. Nothing fantastic at the moment. Still a lot of work to go.

Leads me to think about a whole lot of different things though. I've been wondering how to teach a computer anything. With enough effort, I could write everything I ever wanted into the program, but that is more effort than it is worth. It is much more worthwhile in my opinion to code the program so it learns how to do things on its own. Ahh... into the wonderful realm of artificial intelligence. So I've come up with an idea. Tell me what you think.

I've realized that much of human life is very routine. Very little thought is actually required to perform most of what we do. We can sleep walk through the day without making a single complex decision. At my job, I find that a computer program, or perhaps a robot, could probably do my job better. It could be just as personal, if not more so than me. My job sucks anyways.

With life being so incredibly routine, then I have to wonder how I could write a program to get a computer to perform every single action that I perform. It's all fairly simple. Most are just a combination of known actions performed in a set sequence to accomplish a specific task. In other words, I perform a few different actions in the right order to complete the necessary task. Showering, shaving, driving, navigating, eating... it's all the same thing every single day.

Now how do I get a computer to do this? I'm working with two different ideas. The first is post-action analysis of random action selection. Did that make any sense? I suppose not. Let me explain it to you. Normally, an artificial intelligence decides what it is going to do before it ever does anything. Take the master chess computers. It maps out a list of possible actions, and compares those actions to a table to see which action will perform the best based on pre-programmed knowledge. Eventually, be it from exhaustive examination or the timer running out, the computer makes a decision. Humans don't learn that way, or at least they don't in their early years. We do not examine every possible consequence of every single action before we ever make a decision. We make a decision, and evaluate the effects of the decision afterwards.

So that's the basic idea. My idea is to randomly select from a list of possible actions, perform that action, and then continue doing so until the computer either gives up because it did not randomly select the right answer in enough attempts, or it succeeds. Now it may take a few dozen attempts, but you will come up with a correct answer.

If you run that last algorithm enough times, you will come up with the most efficient answer, based on the number of moves. You then equate that list of moves to producing that result. Now that is the easy part. Here's the hard part.

Create a goal-based system, with the purpose of building a list of actions that produce successful results. Start with simple actions that are easy to perform, and then perform them many times. Once the computer has decided that this action produces the proper result, you give it a slightly harder goal, and do it all over again.

See where this is getting difficult? Though the actions we perform on a daily basis are horribly routine, we spent years learning to perform those actions in those specific ways to get the proper results. We as humans have refined our techniques in ways that we barely understand and don't even remember doing.

Now imagine trying to teach someone. Not just any someone, but a newborn baby. Because that is essentially what we are dealing with. Teaching a two day old baby is completely out of the question. So what do we teach it? We initially teach the baby motor skills. Somewhere afterwards, a light goes off in the babies head and off they go, charging down the hall as fast as their chubby legs and horrible balance will take them.

So here I have two problems. How in the world do I code a goal based system in VB.net? Secondly, how do I turn the subject matter into tiny bite sized pieces so a computer will eventually learn to perform the actions I want it to. In effect, how do I teach it to learn?