Monday, May 21, 2007

Genetic Programming

What is the difference between a mouse and man? How will we identify non-human intelligence when we find it?

So I have been rolling this very simple idea over in my head. After only a week or so of messing around with AIML I already felt very limited by the XML. There had to be someway to exponentially improve on the way the program sifted through the data. So I read several theories on how to improve current AI. It struck me as I was running several different AI's and genetic 'games' what the difference between sentience (and/or intelligence) and programmed behavior is.

A mouse is a composition of billions of cells that create a living being, each cell in the mouse is alive and composed of a million atoms or more that reproduce. When two mice reproduce some of the cells genetic codes change, these are completely random changes (though there causes may not be). The first life on earth is believed to be a single celled creature that was randomly created (this is debatable but for the purposes of this thought we will assume it to be true). These randomly created life-forms reproduced and changed over the course of millions upon millions of years. These changes produced a near infinite number of separate living entities, over the course of history only an infinitesimally small fraction of those entities became 'sentient'. Of that small fraction only one species survives today.

What is it that makes us different though? Most other species communicate, we all reproduce eat excrete etc... Take a plant and transplant it somewhere that is inhospitable to it and it will die. Take a fish out of water and it will die. Only through several thousand generations will an animal significantly change its habitat to something that was previously inhospitable. Should global warming take its course and drastically reduce the land mass creating a water-world man would survive even after most other land animals had perished. We are able to habitat space, something that no other living life-form on earth is capable of.

The one thing we do that defines us as different is that we do not follow our instincts as laid out by our genetic codes. No matter how complex you make AIML or any other program it will still follow its code. It is stuck inside its box it cannot leave or change beyond the confines of its code. No matter how complex the code is you will never be able to have artificial life on your computer made by man. All you will be able to create is a simulation of life that is constricted to the confines as set forth by its programmers.

Running any genetic 'game' will only result in an artificial species that can survive in its box if it results in anything at all. This is not what we are after this is only a toy to suggest that what we are after is possible.

What needs to be done to create true artificial life is to remove the box. What I theorize is to write a very simple program, that reproduces and changes with no other limitations set.

1. The code will create a cpp (C++ source code) file in the cpp file the code will print its own source code and create a .txt file with the same source as well as some other trivial variables.

2. The code then will create another line of text completely at random inside the cpp file.

3. The code will attempt to compile.

A. Should the file not compile it will do the first three steps again repeatedly.

B. If the file does compile it will execute the new program.

4. The new program will close the old program and proceed with the first three steps again.

I assume that it will be at least a billion generations (I will allow for a billion billion however) between each workable source.

The text file will contain variables for statistical data such as:

Generations since last successful compile

gen: resets to zero every billion generations.

Billion Generations since last successful compile. Or at a successful compile.

bil_gen: resets to zero after a billion billion generations. Or at a successful compile.

Successful compiles, actual generations created.

live_gen

Resets to zero after a billion living generations

Billion live generations,

bil_live_gen

Both bil_live_gen and live_gen will also be the name of the text file so there will be source available for every generation.

The txt file will also contain this info:

Complete living source-code.

The source of the last living generation.

Attempted line of source code.

The source the current live generation is attempting.

Some things I would like to add to this project would be the ability to p2p network the source creation process. Similar to seti@home or another networked processing system. The way I envision this would be done would be for every successful source created the program would then email the txt file to a database that could then be downloaded at other terminals. Should a billion billion attempts be reached then the host would automatically discard the source and acquire a new instruction set at random from the central database.