Beginning this week, I am not working full time, which gave me much more time to think about my small projects and mental constructions. Here's a take on reconstructing how the process went.
I started by trying to think out a good design for a "two component brain" design. This is one of my theories where I postulate that the brain needs to be constructed of at least two distinct "regions" (each of them probably consisting of many parts). One region would be genetically developed, non-learning entity, developed over years of evolution by the random processes. This region of the brain would have connections to all sentinels and limbs and would, if successful, be enough to sustain the creature through its life (however, fairly non intelligent). The second part of the brain would remind of the human neo-cortex, and would be like a large neural network with strong Hebbian learning capabilities (or some other learning algorithm). This network would not have any knowledge hard coded when the individual is born (unlike the first region, which is already fully programmed and developed when the individual is born, and rather constant afterwards). This second region of the brain would also have connections to all sentinel and motor components of the individual. In other words, both parts of the brain get the full picture, and can try to control the body, but have different deciding mechanisms. There is also a pathway between these two regions, through which they can communicate.
I think a setup like this is necessary to get a truly self-learning (and, in the long run, self aware) agents, as the "lower" constant region of the brain will be able to tell the cortex when it is doing right, and when it is doing wrong, and thus train it. However, the "smarter" and better trained the cortex get, it will be able to go through more and more complicated routines to make the lower part brai
n satisfied. It will also be able to send its opinions to the lower brain (uncertain if it will care). The lower brain needs to protect the vital functions of the individuals if the cortex is about to do something crazy (compare with breathing in humans: we can choose with our cortex not to breath for a while, even extend it until we faint, if we are equipped with truly powerful will, but then we inevitable start breathing again after fainting (if not sooner). So, when cortex wants to do some stupidities, the old brain should protect the body.
Ok, so far so good. For the implementation I imagined using a 3D model with independent agents. They would be able to see some of their surroundings (say a circle of 5-10 cells around them). If there are other agents of food in here, they would know it. Based on this, they need to decide which way to go, and how fast. There would probably be some other actions, like mating, fighting with other agents (they would fight probably just by docking or touching, at which moment the bigger one, or the fiercer one would chip some energy from the smaller one, depending on the size difference). I was hoping to see some interesting patterns of behavior like bluffing etc. But, the problem I was having is how to devise the duplication strategy which would feel natural enough. For example, I wanted to start with fully random variations on the connections of the lower brain, and no cortex. Most of these individuals would be hugely unfit for life, and would just drive around, if they were lucky enough that some parts of their random brain were connected to the limbs. However, over time, the more and better connected individuals, that could see where the food is, and then go there, and stay there until the food is eaten up, they should be premiered and duplicate frequently, thus spreading those brain qualities further. However, devising the fitness strategy that will quickly enough kill the hopeless individuals, but at the same time give enough time to the hopeful ones and give a chance to some promising one is hard to come by, mostly as the most successful individuals often start of as seemingly hopeless, and then suddenly find or do something that shows their full potential.
Another tough problem is that I would like the duplication function to feel natural and not constructed. Duplication functions should normally be able to evolve with the individuals and the universe, and be a part of the universe as a mechanism, and not an outside feature (if possible). Example of a "bad" duplication function is just programmatic copying (cloning) an individual, once certain conditions are fulfilled. This duplication function is not a part of the world (unless its a weird model of a computer that has copying as one of the mechanisms in the world). If you try to go back in time, you will at no point be able to see how the duplication itself developed (like we now are trying to figure out how DNA came to be, as it is facilitating our duplication). As the DNA mechanism has not been changing for a very long time, it is tempting to thing about the duplication as something constant, but it has to be evolved inside the model, for the model to be evolutionary consistent. One example of a good duplication method is having a mechanism where certain cells attract same cells, and then let go under others. If then randomly, a mechanism would develop where the similar cells are first attracted to all cells in one individual (thus doubling the structure) and then when these cells bond, the original "duplication" bonds would let go, that would be an example of the duplication method that is part of the universe and the world and is good. This is very important, as the duplication is the source of live and information preservation and evolution itself. Having an inconsistent duplication method leads to big problems sooner or later.
While going around in the above thought, I had a slight thought bifurcation. I've since some time ago acquired the opinion that life, human intelligence, social structures and interactions, economical systems and interactions are all different presentations of a very similar complex phenomenon. It would be very interesting to make a comparative study of these complex systems, look at different measures of their complexity like the number of particles (or actors) involved, the "unlikelihood" of their existence, the fragility or robustness of the system etc. My impulse was "You should write a book about this and call it "Comparative Analysis of Complex Systems". As soon as I got home I googled that phrase, to see if anybody else wrote about it, and yes, there was like hundreds of books on the subject. However, on closer examination, most of the books seemed to be very mathematical and go into depths of complex systems and their variables. So, it is not very probably that I will write a book on this any time soon, as a) I don't know very much about the subject and b) there's a bunch of good books that I ought to read first on the subject. But, I can dream :-)
The thread goes on. While thinking about making comparative studies of different complex systems I realized that many complex systems share many properties (I base this also on my earlier modelling work, where I could see many reoccurring components of different systems). And then the idea came: I should write a Java framework for quick modelling using agents. The system could also be of distributive nature, to spread out the heavy computing on many computers. There would be a skeleton of classes that would implement the reoccurring things, and then every new model would extend and implement these classes. I googled that too (complex agent framework) and got a lot of hits, but not that many that actually do what I want. So this idea is still valid and I might actually go ahead and code this framework (if nothing else to get an idea of how much it would help and what are the pit falls.
And, once the framework is done, this will be my first project - a simulation of a social interactions. This is a fruit of my today's long walk. One idea that came to me is that everybody (humans) has as a main goal in life to feel good. Some people get this feeling of wellness primarily by going straight to the source (eating tasty food, sleeping in a comfy bed, not doing stuff that instinctively feel wrong like waking up 7am and while it is still dark outside during the winter). Other people get most of their feel good through other people: their boss tells them they are doing a good job (after they spent 20 hours of the night fixing the system somebody else broke), their friends tell them they are smart of pretty or just somebody who buys a new car to make everybody else envious. I think each of us has both methods in them, but in different proportions, somebody is 90% comfy and 10% need other, other people are 90% social animals and only 10% comfy. This should not be too hard to model, using a special "relative happiness" method as a fitness function (i.e. if you are happier than your close friends, then you are successful). It would be interesting to see the behavior of the system if you allow the agents to change their construction (the ration) a little bit, and give them some other tools like money (to buy comfort and "love" from others) and possibilities to "kiss ass" or "not give kudos" when they deem proper. On the other hand, it is really interesting to try to put this ratio on yourself and your friends and see what methods they use to achieve it (two people with the same ratio can behave and feel completely differently depending on the tools they choose to get there).
And, the big question - is one better than another? Is it better to be comfy or needy? Of course, comfy people do not depend on other people for their satisfaction, I give them that. Anything else? Needy people can on the other hand form "reinforcement circles" where they kiss each other asses until they all feel good and strong. But, as the goal is the relative happiness (to your peers), it will not give them that much satisfaction, if they do not have any other reference points.